Two ways in
A tabbed comparison under a centred serif heading that settles in word by word: pill tabs switch between approaches, each blurring in a drifting portrait photograph beside a serif title, a description, a ruled fact list and a sliding-marker pill.
Two doors behind one pill tab bar: choosing a tab blurs in a portrait photograph that drifts inside its frame, beside a serif title, a paragraph, a ruled list of facts and that door's own action.
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/feature278?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/feature278?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/feature278.tsx, the shadcn tabs primitive it is built on, and the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports feature278Demo alongside the block: the exact props behind the preview above. Spread it to get a working two-door feature in one line.
import { Feature278, feature278Demo } from "@/components/beste/block/feature278";
export default function Page() {
return <Feature278 {...feature278Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Feature278 } from "@/components/beste/block/feature278";
export default function Page() {
return (
<Feature278
eyebrow="Two ways in"
heading="Pick the door that feels lighter. You can always use the other."
items={[
{
tabLabel: "Therapy",
title: "For what is heavy and has been for a while",
description: "Therapy looks back as well as forward, and moves at whatever pace lets the hard things be said.",
facts: ["60 or 75 minute sessions", "Weekly to begin with", "In the room or on video"],
button: { label: "Start with therapy", href: "/therapy", tone: "dark" },
image: { src: "/photos/pines.jpg", alt: "Pine trees standing in soft morning fog" },
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
items | Approach[] | [] | The doors; the first is selected on mount |
className | string | – | Extra classes for the outer <section> |
type Approach = {
tabLabel: string;
title: string;
description: string;
facts: string[];
button: ActionButton;
image: { src: string; alt: string };
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};tabLabel doubles as the tab's value, so two approaches must not share a label; give them distinct names and the tabs track correctly.defaultValue is read from the first item, so the section opens on a real door rather than with nothing selected.animate rather than whileInView, because a tab panel is mounted when its tab is chosen and would otherwise never have a moment to arrive; the copy is given a 0.1s head start behind the image so the two do not land together.Tabs: arrow keys move between doors and the panel follows.divide-y between, so a short list of three reads as a small table rather than as bullets.-10% to 10% against a 1.2 scale and clears from blur(24px) on decode, with a complete check on mount for cached files.feature298
A header with a serif headline that settles in word by word and a pill that copies the install command on click, then a rounded pill tab list (pages, sections, components). Each tab pairs a title, a paragraph and a short list of example prompts in mono with a photo that blurs in and drifts on scroll.
feature288
An us-and-them comparison under a centred serif heading that settles in word by word: an ink column and a muted column list the same points with ringed checks and dashes that arrive one by one, and a sliding-marker pill closes it.
feature282
The classic zigzag: under a serif heading that settles in word by word and a pill action, rows alternate a photograph drifting inside its frame with an eyebrow, a serif title, a description and an arrow link, switching sides on every row.
feature276
A scroll-led feature: a serif heading settling in word by word beside a pill action, then numbered chapters that scroll past a pinned photograph, each one swapping the image with a soft blur and brightening its own title as it reaches the centre of the viewport.
feature299
A centred serif headline that settles in word by word, then an ink panel that cycles through short request and reply pairs: the request in serif, the reply in mono a beat later, with thin progress bars to jump between them and a pause on hover. A pill that copies the install command on click and a sliding-marker pill close the section.