About the practice
Altair began as two rooms above a bakery and one conviction: that most people already know what they need, and lack only the time, the quiet and the company to hear it.
Seven years later there are three practitioners, one address, an evening practice and a Friday walk. There is still no slogan, and nobody is rushed.
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.
A story split down the middle: heading, two paragraphs and a pill action on one side above a ruled row of figures that count up when they reach the viewport, a portrait photograph drifting inside its frame on the other.
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/about80?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/about80?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/about80.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports about80Demo alongside the block: the exact props behind the preview above. Spread it to get a working about section in one line.
import { About80, about80Demo } from "@/components/beste/block/about80";
export default function Page() {
return <About80 {...about80Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { About80 } from "@/components/beste/block/about80";
export default function Page() {
return (
<About80
eyebrow="About the practice"
heading="Small on purpose, since 2019."
paragraphs={[
"We began as two rooms above a bakery and one conviction about what people already know.",
"Seven years later there are three practitioners, one address and nobody in a hurry.",
]}
button={{ label: "Meet the three of us", href: "/team", tone: "dark" }}
image={{ src: "/rooms/table.jpg", alt: "A calm room with a long stone table and linen chairs" }}
figures={[
{ value: 3, label: "Practitioners" },
{ value: 2019, label: "Founded" },
{ value: 140, suffix: "+", label: "People this year" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
paragraphs | string[] | [] | Body copy, one <p> per entry |
button | ActionButton | – | Pill action under the paragraphs |
image | { src: string; alt: string } | – | Photograph in the right column |
figures | Figure[] | [] | Counting figures in the ruled row, always three across |
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";
};2100, which is what keeps a founding year rendering as 2019 rather than 2,019 while a real count of 2,400 still gets its separator.tabular-nums, so the figures do not jitter in width while they climb.useInView is set to once, so scrolling back up does not replay it.dl with the dd before its dt, which is deliberate: the figure is the value and the label describes it, and the pairing survives being read out of order by a screen reader.grid-cols-3, so three figures is the intended count; a fourth wraps to a new row rather than compressing the first three.about63
Image-led about split with a tall portrait, an offset statement heading, supporting copy, mono studio facts, and a seal CTA.
about5
Side-by-side layout with a tall image on the left and company story, inline stats, and CTAs on the right.
about82
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.
about47
A hard light/dark split about panel: dark statement side and a light image-and-facts side.