Mobile Hero with 3D Perspective Phone

About this block

Mobile Hero with 3D Perspective PhonePRO

Fullscreen split hero with content left and 3D perspective-tilted phone mockup right over inset background video

Hero107: Mobile Hero with 3D Perspective Phone

Fullscreen split hero for a mobile app: heading, description, a short checklist of feature highlights with icon bullets, and app-store badges on the left, a single notched phone mockup on the right, 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/hero107?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

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

Quick start

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

tsx
import { Hero107, hero107Demo } from "@/components/beste/block/hero107";

export default function Page() {
  return <Hero107 {...hero107Demo} />;
}

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

tsx
import { Check, Fingerprint, Zap } from "lucide-react";
import { Hero107 } from "@/components/beste/block/hero107";

export default function Page() {
  return (
    <Hero107
      badge={{ label: "New Release", variant: "secondary" }}
      heading="Experience a new perspective"
      description="Crafted with obsessive attention to detail."
      features={[
        { icon: Zap, text: "Instant sync across all devices" },
        { icon: Fingerprint, text: "Biometric authentication built-in" },
        { icon: Check, text: "Works offline, syncs when ready" },
      ]}
      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" }}
      phoneScreenshot={{ src: "/images/app-screen.png", alt: "App screenshot" }}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgePill shown above the heading
headingstringMain headline
descriptionstringSupporting copy under the heading
featuresFeatureHighlight[][]Icon + text checklist rendered between the description and the app-store row
appStoresAppStore[][]Store badge images/links rendered under the feature list
backgroundMediaBackgroundMediaVideo or image behind the whole section
phoneScreenshot{ src: string; alt: string }Screenshot rendered inside the phone frame
invertColorbooleantrueLight-on-dark treatment (white text, black overlay) vs. dark-on-light
classNamestringExtra 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 FeatureHighlight = { icon: LucideIcon; text: string };

Behavior notes

  • Despite the title, the phone mockup itself carries no perspective or rotation transform in the markup: it is the same flat, notched rounded-[2.75rem] frame used by hero103 and hero108, just placed in a two-column split layout instead of centered. The "3D perspective" is purely a naming/positioning choice, not a CSS perspective/rotate3d effect.
  • features renders as a plain <ul> of icon-in-circle rows; unlike hero106's flanking columns, this list stays attached to the text column and does not move to flank the phone.
  • Text and feature-list alignment flips with viewport: centered on mobile (text-center, justify-center), left-aligned from lg (lg:text-left, lg:justify-start), applied independently to the heading block, feature list, and app-store row.
  • The content wrapper caps at max-w-4xl (narrower than hero103's max-w-6xl) and uses justify-between between the text column and the phone, giving this hero a tighter, more compact split than the other phone-mockup heroes.
  • Video backgrounds autoplay muted and loop inside the standard inset panel (inset-x-6 top-6 bottom-6, wider from lg).

More Hero blocks

View all Hero
PRO

hero105

Mobile Hero with Dual Phone Mockups

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

PRO

hero106

Mobile Hero with Flanking Features

Fullscreen hero with centered phone mockup flanked by feature columns on each side over inset background video

PRO

hero103

Mobile App Hero with Phone Mockup

Fullscreen hero with app store buttons and phone mockup over inset background video

PRO

hero82

Left-Aligned Hero with Gradient Overlay

Left-aligned fullscreen hero with inset background media and directional gradient overlay

PRO

hero108

Mobile Hero with Review Card

Fullscreen hero with phone mockup, star rating review card, and app store buttons over inset background video

PRO

hero100

Fullscreen Hero with Browser Mockup

Fullscreen hero with centered content and browser window frame mockup over inset background video