
A practice that treats slowness as a clinical tool rather than a marketing line.
Feature, spring 2026
Read the pieceIn their words

A practice that treats slowness as a clinical tool rather than a marketing line.
Feature, spring 2026
Read the piece
The waiting room is quieter than most people's living rooms. That is the point.
City guide, 2025
Read the piece
Walking sessions along the river are the most sensible idea in therapy this decade.
Weekend supplement, 2025
Read the pieceThree press mentions under a centred serif heading that settles in word by word: each ruled column carries a greyscale logo, a serif pull quote, a small-caps source line and a link to the piece, with a pill action beneath.
Press coverage as three ruled notes: each one carries a greyscale publication logo above a serif pull quote, the source line, and an underlined link to the piece.
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/logos18?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/logos18?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/logos18.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports logos18Demo alongside the block: the exact props behind the preview above. Spread it to get a working press section in one line.
import { Logos18, logos18Demo } from "@/components/beste/block/logos18";
export default function Page() {
return <Logos18 {...logos18Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Logos18 } from "@/components/beste/block/logos18";
export default function Page() {
return (
<Logos18
eyebrow="In their words"
heading="What the papers found when they came to sit in."
notes={[
{
logo: { src: "/logos/one.png", alt: "Publication logo" },
quote: "A practice that treats slowness as a clinical tool rather than a marketing line.",
source: "Feature, spring 2026",
href: "/press/feature",
},
]}
button={{ label: "Read all coverage", href: "/press", tone: "outline" }}
labels={{ readPiece: "Read the piece" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
notes | PressNote[] | [] | Press notes, three across from md |
button | ActionButton | – | Pill centred under the notes |
labels | { readPiece?: string } | {} | Link wording; the link is dropped when unset |
className | string | – | Extra classes for the outer <section> |
type PressNote = {
logo: { src: string; alt: string };
quote: string;
source: string;
href: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};md:border-l on every note with md:first:border-l-0 unsetting the first, so a three-up row is separated without an outer line on either edge.md, so on a phone the notes stack with spacing rather than carrying a stray vertical rule down the left.mt-auto, so it is pushed to the foot of its column and the three links sit on one line however uneven the quotes above them are.blockquote elements inside article wrappers, so the coverage is marked up as quoted material rather than as styled paragraphs.0.12s stagger by index, resolving left to right.decoration-border rule that goes solid on hover, which is quieter than a colour change and keeps the pill below as the primary action.logos17
A press row: a serif heading that settles in word by word beside a pill action, then six greyscale logos in a ruled strip that blur in one after another and regain their colour on hover.