Two-column grid of numbered items (01, 02, etc.) with circular badges, titles, and descriptions. Perfect for why-choose-us sections, benefits lists, or key differentiators.
List of features tagged with zero-padded circular numbers ("01", "02", ...) instead of icons, laid out as either a single centered column or a two-column grid depending on the columns prop.
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/feature34"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/feature34"This installs the block to components/beste/block/feature34.tsx and the shadcn/ui badge and button components it depends on.
The installed file exports feature34Demo alongside the block: the exact props behind the preview above. Spread it to get a working numbered list in one line.
import { Feature34, feature34Demo } from "@/components/beste/block/feature34";
export default function Page() {
return <Feature34 {...feature34Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Feature34 } from "@/components/beste/block/feature34";
export default function Page() {
return (
<Feature34
badge={{ label: "Why us", variant: "default" }}
heading="Four reasons teams choose us"
description="We've spent years refining the details."
columns={1}
features={[
{
id: "feature-1",
title: "No learning curve",
description: "Familiar interface patterns mean your team can start immediately.",
},
{
id: "feature-2",
title: "Transparent pricing",
description: "One plan, one price. No hidden fees.",
},
]}
buttons={[{ id: "btn-1", label: "Start free trial", href: "/signup" }]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Badge above the heading |
heading | string | – | Section heading |
description | string | – | Section intro text |
features | NumberedFeature[] | [] | Numbered rows; the section renders nothing when this is empty |
buttons | ButtonItem[] | [] | CTA buttons below the list |
columns | 1 | 2 | 2 | 2 lays out a md:grid-cols-2 grid; 1 centers a single max-w-3xl column |
className | string | – | Extra classes for the outer <section> |
type NumberedFeature = {
id: string;
title: string;
description: string;
};
type ButtonItem = {
id: string;
label: string;
href?: string;
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive";
};null when features is empty, so it never renders a header with no rows beneath it.padStart(2, "0") ("01", "02", ...); it is not a prop and cannot be overridden per item.columns is coerced with Number(columns) before the === 2 check, so it tolerates a stringified "2" being passed even though the type only declares 1 | 2.border-primary text-primary, unlike feature23/feature26/feature29/feature107 which accept a custom icon node per item.columns grid switch itself.feature233
A header with a badge, heading, and description, followed by many compact items in a two-column grid — each a lucide icon in a rounded bg-muted tile beside a title and one-line description.
feature199
Two-column feature section with a large heading on the left and a 2x2 grid of feature cards on the right, each with a large badge icon, title, and description.
feature162
3-column grid of numbered steps with titles and descriptions. Ideal for onboarding flows, process overviews, and how-it-works sections.
feature200
Two-column feature section with badge, heading, description, a 2-column checklist of icon items (defaults to check icon), and CTA on one side, with a square image on the other. Image position is configurable.
feature146
Responsive grid of benefit items with checkmark icons and descriptions. Perfect for benefits list, value proposition, or key advantages.
feature202
Two-column feature section with badge, heading, and multi-paragraph copy on the left, plus a custom tab strip and panel on the right.