Streamline your development workflow with AI-assisted tools that understand your codebase and help you ship features 10x faster.
Deploy in seconds with zero configuration
SOC 2 compliant with end-to-end encryption
Monitor performance with live dashboards
Deploy in seconds with zero configuration
SOC 2 compliant with end-to-end encryption
Monitor performance with live dashboards
Two-column hero with announcement banner, social proof metrics, and three floating feature cards with hover animations. Perfect for SaaS product launches.
Split hero for SaaS launches: an announcement banner above a two-column layout with a highlighted heading and social-proof metrics on one side, and three feature cards scattered at fixed offsets and rotations on the other, each lifting on hover.
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.
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/hero61?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero61?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero61.tsx and its shadcn/ui dependencies: Badge, Button.
The installed file exports hero61Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero61, hero61Demo } from "@/components/beste/block/hero61";
export default function Page() {
return <Hero61 {...hero61Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Gauge, Users, Zap } from "lucide-react";
import { Hero61 } from "@/components/beste/block/hero61";
export default function Page() {
return (
<Hero61
announcement={{ label: "Introducing v2.0 with AI-powered workflows", href: "/changelog" }}
badge={{ label: "Now Available" }}
heading="Build products faster with <strong>intelligent automation</strong>"
description="AI-assisted tools that understand your codebase and help you ship faster."
buttons={[{ label: "Start Free Trial", href: "https://beste.co" }]}
metrics={[
{ icon: Users, value: "50K+", label: "Developers" },
{ icon: Gauge, value: "99.9%", label: "Uptime" },
]}
featureCards={[
{ icon: Zap, title: "Lightning Fast", description: "Deploy in seconds with zero configuration" },
{ icon: Gauge, title: "Real-time Analytics", description: "Monitor performance with live dashboards" },
]}
displayPosition="right"
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
announcement | { label: string; href?: string } | – | Clickable pill centered above the two-column layout |
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Pill above the heading, inside the text column |
heading | string | – | Main heading; may contain <strong> for highlighted text |
description | string | – | Supporting paragraph |
buttons | ButtonItem[] | [] | CTA buttons; the first one gets a trailing arrow icon |
metrics | Metric[] | [] | Inline social-proof numbers under the buttons |
featureCards | FeatureCard[] | [] | Cards rendered opposite the text column |
displayPosition | "left" | "right" | "right" | Which side the feature cards render on |
className | string | – | Extra classes for the outer <section> |
type ButtonItem = {
label: string;
href?: string;
variant?: "default" | "secondary" | "outline" | "ghost";
};
type Metric = {
icon?: LucideIcon;
value: string;
label: string;
};
type FeatureCard = {
icon: LucideIcon;
title: string;
description: string;
};heading is rendered with dangerouslySetInnerHTML, so <strong> tags in the string are picked up by [&>strong]:text-primary for a highlighted-word effect (the demo highlights "intelligent automation"); pass plain text if you don't need the highlight.displayPosition reorders only the feature-card column: "right" (the default) leaves the text column first and cards second; "left" moves the text column to lg:order-2, putting the cards first.lg and up, the three featureCards are positioned absolutely inside a relative h-[500px] box at fixed coordinates and rotations cycling through top-0 right-0 rotate-3, top-1/3 left-0 -rotate-2, and bottom-0 right-8 rotate-1 (via positions[index % 3]), each lifting -translate-y-2 with a stronger shadow on hover.lg, that absolutely positioned stack is hidden (hidden lg:block) and a second, separate render of the same featureCards data appears instead, laid out as a static sm:grid-cols-3 grid with no rotation or absolute positioning: the cards are rendered twice in the markup and swapped by breakpoint, not repositioned by CSS from a single render.ArrowRight) nudges right on hover via group-hover:translate-x-0.5; the whole pill is one next/link hit target.hero96
50/50 split hero with content left and metric dashboard cards with trend badges over video right
hero38
Two-column hero with prominent testimonial quote card featuring author avatar and company info. Perfect for building trust and social proof.
hero37
Centered hero with four floating stat cards positioned around the content displaying key metrics. Perfect for analytics platforms and data-driven products.
hero25
Split-layout hero with interactive dashboard mockup featuring stats cards, line chart, and recent activity feed. Perfect for SaaS and analytics platforms.