Three side-by-side step cards with a media surface anchored to the bottom of each card. Each slot accepts an image, video, or live registry-component asset.
Centered header above three side-by-side step cards, each with its media surface pinned to the bottom of the card so uneven copy lengths still align the media row across all three cards. Each step's media slot follows the Media Slot Standard.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/feature9"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/feature9"This installs the block to components/beste/block/feature9.tsx, the shadcn/ui badge component it depends on, and the calendar1, terminal2, and upload1 pieces it embeds as media-slot fillers (installed to components/beste/piece/{name}.tsx).
The installed file exports feature9Demo alongside the block: the exact props behind the preview above. Spread it to get a working three-step section in one line.
import { Feature9, feature9Demo } from "@/components/beste/block/feature9";
export default function Page() {
return <Feature9 {...feature9Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup mixing an image card and a live-asset card looks like this:
import { Terminal2 } from "@/components/beste/piece/terminal2";
import { Feature9 } from "@/components/beste/block/feature9";
export default function Page() {
return (
<Feature9
badge={{ label: "How it works", variant: "outline" }}
heading="Ship your next release in three steps"
description="Each step shows the surface you'll actually touch."
cards={[
{
title: "Review the design",
description: "A screenshot of the finished mockup handed off to engineering.",
media: {
type: "image",
src: "https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=1200&h=900&fit=crop",
alt: "Code on screen",
},
},
{
title: "Ship the change",
description: "One copy-and-paste command pushes the release.",
media: { type: "component", component: <Terminal2 command="pnpm dlx shadcn@latest add feature9" /> },
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Badge above the heading |
heading | string | – | Section heading |
description | string | – | Section intro text |
cards | StepCard[] | [] | Step cards, rendered side by side |
className | string | – | Extra classes for the outer <section> |
type StepCard = {
title: string;
description: string;
media: StepMedia;
};
type StepMedia =
| { type: "image"; src: string; alt?: string }
| { type: "video"; src: string; alt?: string }
| {
type: "component";
component: React.ReactNode;
background?: ComponentBackground;
};
type ComponentBackground =
| { type: "dots" }
| { type: "none" }
| { type: "image"; src: string; alt?: string }
| { type: "video"; src: string; alt?: string };md:flex-row (column on mobile) and cap at md:w-[350px]; each card's media is pushed to the bottom via mt-auto pt-4, so the three cards' media rows stay aligned even when the title/description text runs to different lengths.background: { type: "none" } on its component media, opting out of the dotted-grid default so the embedded Calendar1 piece sits directly on the card's own surface, the only demo item in this batch that uses the none background variant.bg-card (matching the card's own background), not the bg-muted/30 panel used in feature1/feature2/feature8, so the media area blends into the card instead of reading as a distinct tinted panel.buttons/CTA prop on this block at all; it stops at badge, heading, description, and the three step cards.feature194
Three feature cards that swap an icon for a real micro-asset: a bar chart, a before/after stat, and a terminal prompt. Demonstrates how registry-pieces drop into block media slots.
feature8
Looping carousel of capability cards with a centered media slot per card. Each slot accepts an image, video, or live registry-component asset.
feature185
Three-column image feature cards grid with sticky header over background media and glass-morphism styling
feature192
Large hero card with image at top followed by three-column feature card grid over background media
feature201
Centered header followed by a 4-step numbered process row with arrows between cards on desktop, plus a wide CTA card with badge, heading, description, button, and image.