Who comes here
Each one has its own page, its own fee and its own practitioner. Pick the one that sounds closest and read it properly.
Four hairline cards, each a whole link opening with a round portrait, then a quiet label, a serif title, a line of who it is for and an arrow that lifts on hover.
Four hairline cards, each a whole link opening with a round portrait above a label, a serif title and a line of who it is for.
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/usecase57?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/usecase57?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/usecase57.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports usecase57Demo alongside the block: the exact props behind the preview above. Spread it to get a working linked Audience Cards in one line.
import { Usecase57, usecase57Demo } from "@/components/beste/block/usecase57";
export default function Page() {
return <Usecase57 {...usecase57Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Usecase57 } from "@/components/beste/block/usecase57";
export default function Page() {
return (
<Usecase57
eyebrow="Who comes here"
heading="Four rooms, four reasons to be in one."
description="Each one has its own page, fee and practitioner."
button={ label: "Not sure which", href: "/contact", tone: "outline" }
audiences={[
{
label: "On your own",
title: "Individuals",
description: "Weekly therapy with one steady practitioner.",
href: "/individuals",
portrait: { src: "/people/one.jpg", alt: "Portrait" },
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
description | string | – | Intro paragraph under the heading |
button | ActionButton | – | Pill action beside the heading |
audiences | Audience[] | [] | Linked cards, four across from lg |
className | string | – | Extra classes for the outer <section> |
type Audience = {
label: string;
title: string;
description: string;
href: string;
portrait: Image;
};
type Image = { src: string; alt: string };
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};Link, portrait included, so an audience is a single destination rather than a card with a link in it.size-16 frame with no parallax: faces are held still while landscape photographs elsewhere in the set drift.label is a sentence-case line rather than a second small-caps eyebrow, keeping one uppercase line in the section.h-full, with the arrow pushed down by the margin above it.blur(24px) on decode, with a complete check for cached files.0.1 per card, so four arrive in order across the row.