The written note
I have every note from two years in a folder. On bad weeks I read the early ones and remember how far the road goes.
Adrianne Lenker
Individual therapy
A single feature explained beside proof: a serif heading that settles in word by word, an intro and a pill action on the left, a soft muted quote card with a portrait on the right, and three ruled points beneath.
A feature explained beside the proof of it: heading, paragraph and pill on one side, a client quote on a soft panel on the other, closed by three ruled facts across the foot.
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/feature289?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/feature289?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/feature289.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports feature289Demo alongside the block: the exact props behind the preview above. Spread it to get a working feature section in one line.
import { Feature289, feature289Demo } from "@/components/beste/block/feature289";
export default function Page() {
return <Feature289 {...feature289Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Feature289 } from "@/components/beste/block/feature289";
export default function Page() {
return (
<Feature289
eyebrow="The written note"
heading="A few lines from us, the day after every session."
description="Not a summary and not homework. A short note on what we heard."
button={{ label: "Read a sample note", href: "/notes", tone: "outline" }}
quote={{
text: "I have every note from two years in a folder.",
name: "Adrianne Lenker",
context: "Individual therapy",
avatar: { src: "/people/adrianne.jpg", alt: "Portrait of a client" },
}}
points={[
{ title: "Within a day", description: "Always before the next morning." },
{ title: "Yours to keep", description: "Read them back whenever you like." },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
description | string | – | Paragraph under the heading |
button | ActionButton | – | Pill action under the paragraph |
quote | Quote | – | Client quote on the panel beside the copy |
points | Point[] | [] | Ruled facts across the foot, three across from md |
className | string | – | Extra classes for the outer <section> |
type Quote = {
text: string;
name: string;
context: string;
avatar: { src: string; alt: string };
};
type Point = {
title: string;
description: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};figure with a blockquote and a figcaption, so the attribution is bound to the words rather than being a paragraph that merely follows them.flex with justify-between, so the attribution is pinned to the foot and a short quote does not leave the portrait floating in the middle of the card.bg-background circle inside the muted panel, so the empty ring reads as an inset rather than as a grey hole while the image loads.dl with dt/dd pairs under one border-t, so three short facts read as a ruled row rather than as three more cards.0.1s stagger by index, resolving left to right.quote the copy column keeps its seven columns rather than stretching, and without points the section ends after the panel.feature284
A long serif statement that settles in word by word with a pill action on the left, and on the right four numbered, ruled points with serif titles and short descriptions that arrive in turn.
feature71
3-column grid of feature cards with embedded testimonial quotes, author names, roles, and avatars. Perfect for pairing features with social proof from real customers.
feature281
The classic three-column feature: a centred serif heading that settles in word by word and an intro, three columns with a round muted icon, a serif title and a description that arrive in turn, and a sliding-marker pill beneath.
feature293
A split feature: on the left a serif headline that settles in word by word, an intro, a rounded pill that copies the install command on click and a sliding-marker pill; on the right a muted transcript panel where a short exchange with the agent appears message by message, one reply carrying a page preview that blurs in and drifts on scroll.