Fullscreen hero with centered phone mockup flanked by feature columns on each side over inset background video
Fullscreen mobile-app hero with a centered heading block above a symmetric three-column row: a stack of right-aligned feature callouts, a phone mockup in the middle, and a stack of left-aligned feature callouts, all over an inset background video panel, with app-store badges centered below.
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.
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
npx shadcn add "https://ui.beste.co/r/hero106?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero106?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero106.tsx and its dependency: the badge shadcn/ui primitive.
The installed file exports hero106Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero106, hero106Demo } from "@/components/beste/block/hero106";
export default function Page() {
return <Hero106 {...hero106Demo} />;
}Then replace the demo with your own props. Written out, the same setup looks like this:
import { Cloud, Lock, Smartphone, Zap } from "lucide-react";
import { Hero106 } from "@/components/beste/block/hero106";
export default function Page() {
return (
<Hero106
badge={{ label: "Mobile First", variant: "secondary" }}
heading="Built for speed, designed for you"
description="A lightning-fast mobile experience."
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" }}
features={[
{ icon: Zap, title: "Instant Load", description: "Under 100ms cold start" },
{ icon: Lock, title: "Secure", description: "Biometric authentication" },
{ icon: Cloud, title: "Cloud Sync", description: "Real-time across devices" },
{ icon: Smartphone, title: "Offline Mode", description: "Works without internet" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | Badge | – | Pill shown above the heading |
heading | string | – | Main headline, centered |
description | string | – | Supporting copy under the heading, centered |
appStores | AppStore[] | [] | Store badge images/links centered below the phone row |
backgroundMedia | BackgroundMedia | – | Video or image behind the whole section |
phoneScreenshot | { src: string; alt: string } | – | Screenshot rendered inside the centered phone frame |
features | Feature[] | [] | Feature callouts split between the two flanking columns |
invertColor | boolean | true | Light-on-dark treatment (white text, black overlay) vs. dark-on-light |
className | string | – | Extra classes for the outer <section> |
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 Feature = { icon: LucideIcon; title: string; description: string };features is capped at 6 entries (features.slice(0, 6)) and split down the middle with Math.ceil(allFeatures.length / 2) going to the left column and the remainder to the right, so odd counts always give the left side the extra item.md (hidden flex-col ... md:flex); on small screens only the badge, heading, description, phone, and app-store row are visible, the flanking callouts drop out entirely rather than reflowing beneath the phone.items-end text-right) and the right column left-aligns (items-start text-left), so the two columns visually point inward toward the phone.rounded-[2.75rem], border-[7px]) has no notch bar, unlike the other single-phone heroes in this set (hero103, hero107, hero108), giving it a slightly more minimal bezel.inset-x-6 top-6 bottom-6, wider from lg).hero105
Fullscreen hero with two overlapping angled phone mockups and app store buttons over inset background video
hero107
Fullscreen split hero with content left and 3D perspective-tilted phone mockup right over inset background video
hero103
Fullscreen hero with app store buttons and phone mockup over inset background video
hero108
Fullscreen hero with phone mockup, star rating review card, and app store buttons over inset background video
hero100
Fullscreen hero with centered content and browser window frame mockup over inset background video
hero80
Centered hero with inset background media and overlapping product image