The practice in numbers
An about section built around a wide photograph that drifts inside its frame: a serif heading that settles in word by word above it, then an intro with a sliding-marker pill beside four ruled serif figures that count up as they arrive.
A wide photographic band under the heading, then a set of figures that count up as they arrive, each on its own rule, beside a short paragraph explaining what the practice counts and what it refuses to.
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/about82?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/about82?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/about82.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports about82Demo alongside the block: the exact props behind the preview above. Spread it to get a working figures section in one line.
import { About82, about82Demo } from "@/components/beste/block/about82";
export default function Page() {
return <About82 {...about82Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { About82 } from "@/components/beste/block/about82";
export default function Page() {
return (
<About82
eyebrow="The practice in numbers"
heading="Small, and measured by the right things."
image={{ src: "/photos/field.jpg", alt: "Tall grass in a sunlit field" }}
description="We do not count sessions sold. We count the people who came back."
button={{ label: "Read the yearly letter", href: "/letter", tone: "outline" }}
figures={[
{ value: 82, suffix: "%", label: "Ended on purpose, not by drifting away" },
{ value: 41, suffix: "%", label: "Arrived because a friend sent them" },
{ value: 19, label: "Months, the average stay" },
{ value: 0, label: "Sessions cut short for the next appointment" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
image | { src: string; alt: string } | – | Wide band between the heading and the figures |
description | string | – | Short paragraph in the narrow left column |
button | ActionButton | – | Pill action under the paragraph |
figures | Figure[] | [] | Counting figures, two across from sm |
className | string | – | Extra classes for the outer <section> |
type Figure = {
value: number;
suffix?: string;
label: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};21/9 frame with the photograph scaled to 1.3 and drifting -14% to 14%, the widest travel in the set. A letterbox crop can carry that much movement without ever showing an edge, which a portrait frame cannot.useInView is set to once, so scrolling back up does not restart it.tabular-nums, so nothing shifts sideways while the number climbs. Unlike the sibling figure blocks, this one prints the raw number with no thousands grouping, which suits percentages and small counts.value of 0 is honest here: it animates from zero to zero and simply reads 0, so a deliberate "none" is not mistaken for a figure that failed to load.dd before dt inside a dl, so the number is the value and the sentence under it is the term describing it.border-t, so the rules come from the items themselves and a two-column grid produces an even ruled field at any count.image the figures follow straight after the heading, and without figures the section is a heading, a paragraph and an action.about75
A team section: a serif heading that settles in word by word beside the intro and a pill action, then three portrait photographs that drift inside their frames as the page scrolls, each with a serif name, a small-caps role and a short bio.
about33
About section with an eyebrow label and read-more action on the left, a bold heading with two side-by-side images on the right, and a four-column stats band below.
about80
The classic about split: a serif heading that settles in word by word, two paragraphs, a sliding-marker pill and three ruled figures that count up on the left, and a portrait photograph drifting inside its frame on the right.
about38
About where a large heading overlaps a portrait, with a paragraph, CTA and a bottom stat ribbon.