Mobile Hero with Dual Phone Mockups

About this block

Mobile Hero with Dual Phone MockupsPRO

Fullscreen hero with two overlapping angled phone mockups and app store buttons over inset background video

Hero105: Mobile Hero with Dual Phone Mockups

Fullscreen app-download hero with two phone mockups overlapping and rotated in opposite directions on the right, text and app-store badges on the left, over an inset background video panel.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/hero105?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/hero105?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/hero105.tsx and its dependency: the badge shadcn/ui primitive.

Quick start

The installed file exports hero105Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.

tsx
import { Hero105, hero105Demo } from "@/components/beste/block/hero105";

export default function Page() {
  return <Hero105 {...hero105Demo} />;
}

Then replace the demo with your own props. Written out, the same setup looks like this:

tsx
import { Hero105 } from "@/components/beste/block/hero105";

export default function Page() {
  return (
    <Hero105
      badge={{ label: "Cross Platform", variant: "secondary" }}
      heading="One app, every device"
      description="Seamless experience across iOS and Android."
      appStores={[
        { image: { src: "/badges/app-store.svg", alt: "Download on App Store" }, href: "/ios" },
        { image: { src: "/badges/google-play.svg", alt: "Get it on Google Play" }, href: "/android" },
      ]}
      backgroundMedia={{ type: "video", src: "/videos/hero.mp4" }}
      phoneScreenshots={[
        { src: "/images/screen-1.png", alt: "App screen 1" },
        { src: "/images/screen-2.png", alt: "App screen 2" },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadge–Pill shown above the heading
headingstring–Main headline
descriptionstring–Supporting copy under the heading
appStoresAppStore[][]Store badge images/links rendered under the description
backgroundMediaBackgroundMedia–Video or image behind the whole section
phoneScreenshotsPhoneScreen[][]Exactly the first two entries are used, back phone then front phone
invertColorbooleantrueLight-on-dark treatment (white text, black overlay) vs. dark-on-light
classNamestring–Extra classes for the outer <section>
ts
type Badge = { label: string; variant?: "default" | "secondary" | "outline" };
type BackgroundMedia = { type: "image" | "video"; src: string; alt?: string };
type AppStore = { image: { src: string; alt: string }; href: string };
type PhoneScreen = { src: string; alt: string };

Behavior notes

  • The dual-phone stack only renders when phoneScreenshots.length >= 2; with fewer than two entries nothing is shown on the right, there is no single-phone fallback.
  • phoneScreenshots[1] becomes the "back" phone (rotate-6, offset top-4 right-0, lower z-index) and phoneScreenshots[0] becomes the "front" phone (-rotate-6, offset top-0 left-0, z-10), so array order controls which screenshot appears on top and which side it leans toward. Both use non-null assertions (phoneScreenshots[1]!), so a one-item array would throw at runtime, not just render blank.
  • Rotation is static Tailwind (rotate-6 / -rotate-6), not scroll- or hover-driven; there is no animation on this hero.
  • Each phone frame is border-[6px] border-zinc-900 with its own small notch bar, independent of invertColor, which only affects the text, background overlay, and app-store badge opacity treatment.
  • Layout stacks to a single centered column below lg (text above, phone stack below) and goes side by side from lg up, matching the other single/dual-phone heroes in this set.

More Hero blocks

View all Hero
PRO

hero103

Mobile App Hero with Phone Mockup

PRO

hero106

Mobile Hero with Flanking Features

PRO

hero107

Mobile Hero with 3D Perspective Phone

Get Pro access