flx
blockhero-14source: ok · hit
Hero 14
A centered product hero with dual CTAs, a full-width photo with a floating block-builder demo panel, and a logo strip.
npx shadcn add "https://ui.flexnative.com/r/hero-14.json"free
Where it goes
hero
Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.
Dependencies
Bundle weight · mediumanimationmotion
iconslucide-react
Registry dependencies
button
Files2 · source cached 10/15/2026, 9:35:38 AM
registry/blocks/hero/hero-14/hero-14.tsx
import Balancer from 'react-wrap-balancer'
import { Button } from '@/components/ui/button'
import { Hero14BlockBuilder } from './hero-14-block-builder'
const logos = ['Northwind', 'Vertex Labs', 'Solstice', 'Anchorpoint', 'Lumen']
export function Hero14() {
return (
<section className="bg-background relative isolate w-full overflow-hidden">
<div className="relative z-10 mx-auto flex max-w-6xl flex-col items-center gap-10 px-6 py-20 sm:gap-14 sm:py-28">
<div className="flex w-full max-w-2xl flex-col items-center gap-5 sm:gap-6">
<div className="flex flex-col items-center gap-3 text-center sm:gap-4">
<h1 className="text-foreground text-3xl font-semibold tracking-tight text-balance sm:text-4xl md:text-5xl">
<Balancer>Describe the screen. Ship the block.</Balancer>
</h1>
<p className="text-muted-foreground max-w-xl text-sm sm:text-base">
<Balancer>
Turn a plain-language brief into a production-ready block you
can copy into your app.
</Balancer>
</p>
</div>
<div className="flex flex-wrap items-center justify-center gap-3">
<Button
variant="outline"
className="w-fit rounded-full px-4"
nativeButton={false}
render={<a href="#" />}
>
How It Works
</Button>
<Button
className="w-fit rounded-full px-4"
nativeButton={false}
render={<a href="#" />}
>
Browse Blocks
</Button>
</div>
</div>
<div className="relative w-full overflow-hidden rounded-2xl outline outline-black/10 dark:outline-white/10">
<img
src="https://images.unsplash.com/photo-1673271044466-b23ea152130f?q=80&w=2070&auto=format&fit=crop"
alt="Alt"
decoding="async"
className="absolute inset-0 size-full object-cover"
/>
<div
aria-hidden
className="absolute inset-0 bg-gradient-to-t from-black/15 via-transparent to-black/5"
/>
<div className="relative flex items-center justify-center px-6 py-10 sm:px-12 sm:py-16">
<Hero14BlockBuilder />
</div>
</div>
<div className="flex w-full flex-wrap items-center justify-center gap-x-10 gap-y-4 border-t pt-8 sm:pt-10">
{logos.map((logo) => (
<span
key={logo}
className="text-muted-foreground/70 text-sm font-semibold tracking-tight"
>
{logo}
</span>
))}
</div>
</div>
</section>
)
}
registry/blocks/hero/hero-14/hero-14-block-builder.tsx
import { CheckCircle2, Send, Sparkles } from 'lucide-react'
import { Button } from '@/components/ui/button'
import { cn } from '@/lib/utils'
const checklist = ['Three-tier layout', 'Monthly / yearly toggle']
export function Hero14BlockBuilder() {
return (
<div
className={cn(
'bg-card w-full max-w-md overflow-hidden rounded-xl border',
'shadow-[0_20px_50px_-16px_rgba(0,0,0,0.25)]',
'dark:shadow-[0_20px_50px_-16px_rgba(0,0,0,0.6)]',
)}
>
<div className="border-b px-5 py-3">
<span className="text-muted-foreground text-[11px] font-medium tracking-wide uppercase">
Block builder
</span>
</div>
<div className="flex flex-col gap-3.5 px-5 py-5">
<div className="flex items-end gap-2.5">
<div className="bg-foreground text-background flex size-7 shrink-0 items-center justify-center rounded-md">
<Sparkles className="size-4" />
</div>
<div className="bg-muted max-w-[80%] rounded-xl rounded-bl-sm px-3.5 py-2.5 text-[13px] leading-relaxed">
Hi! Describe the block you want to build.
</div>
</div>
<div className="flex justify-end">
<div className="bg-foreground text-background max-w-[80%] rounded-xl rounded-br-sm px-3.5 py-2.5 text-[13px] leading-relaxed">
A pricing section with three tiers
</div>
</div>
<div className="bg-muted/60 space-y-2 rounded-xl p-3.5">
<span className="text-sm font-medium tracking-tight">
Pricing-03 block
</span>
<ul className="text-muted-foreground space-y-1 text-xs leading-relaxed">
{checklist.map((entry) => (
<li key={entry}>{entry}</li>
))}
</ul>
<div className="text-foreground flex items-center gap-1.5 pt-0.5 text-xs font-medium">
<CheckCircle2 className="size-3.5 text-emerald-600 dark:text-emerald-400" />
Ready to copy
</div>
</div>
</div>
<div className="border-t p-3">
<div className="bg-muted/50 flex items-center gap-2 rounded-full py-2 pr-1.5 pl-4">
<span className="text-muted-foreground min-w-0 flex-1 truncate text-[13px]">
Describe your block…
</span>
<Button
size="icon-xs"
variant="default"
className="size-8 shrink-0 rounded-full active:scale-[0.96]"
aria-label="Send"
>
<Send className="size-4" />
</Button>
</div>
</div>
</div>
)
}