In 2020 the two of us spent a fortnight working reception at a practice in Bristol. We were bad at it. The receptionist, who had done the job for nine years, was not, and she was still losing an hour every morning to software that had been sold to somebody who had never sat where she sat.
That is the whole thesis. Clinical software is usually bought by one group of people and used by another, and the gap between those two groups is where the frustration lives. We decided the only defensible way to build was to keep the people who write the code close enough to the people doing the work that the gap never opens.
In practice that means a few unglamorous commitments. Everyone here takes support shifts, including us. Every practice speaks to an engineer before they buy, not a salesperson. And when something is our fault we write it down publicly, with the date on it, because the alternative is a company that learns to hide.
We are not going to tell you this is the last software your practice will ever need. We will tell you that if it stops being worth it, you can take everything you have and leave inside a month, and that nobody here will make that difficult.
The gap between who buys clinical software and who uses it is where the frustration lives.
Elena Rourke
Co-founder
Priya Nandan
Co-founder
A long-form company letter set in a wide reading column with an accent-ruled pull quote and signed off by avatar bylines, beside a narrower column of captioned portraits.
A long-form company letter set in a wide reading column with an accent-ruled pull quote and signed off by avatar bylines, beside a narrower column of captioned portraits.
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/about71?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/about71?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/about71.tsx plus the badge23 component it uses for the eyebrow.
The installed file exports about71Demo alongside the block: the exact props behind the preview above. Spread it to get a working letter in one line.
import { About71, about71Demo } from "@/components/beste/block/about71";
export default function AboutPage() {
return <About71 {...about71Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { About71 } from "@/components/beste/block/about71";
export default function AboutPage() {
return (
<About71
badge={{ label: "A letter" }}
heading="Why we built this instead of something easier"
paragraphs={[
"In 2020 the two of us spent a fortnight working reception at a practice in Bristol. We were bad at it.",
"Clinical software is usually bought by one group of people and used by another, and the gap between them is where the frustration lives.",
]}
pullQuote="The gap between who buys clinical software and who uses it is where the frustration lives."
signatories={[
{
name: "Elena Rourke",
role: "Co-founder",
avatar: { src: "/people/elena.jpg", alt: "Portrait of Elena Rourke" },
},
{
name: "Priya Nandan",
role: "Co-founder",
avatar: { src: "/people/priya.jpg", alt: "Portrait of Priya Nandan" },
},
]}
portraits={[
{
src: "/clinic/corridor.jpg",
alt: "Two colleagues in a clinic corridor",
caption: "Bristol, the fortnight that started it",
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow above the heading, rendered through Badge23 |
heading | string | – | Letter heading, capped at max-w-2xl |
paragraphs | string[] | [] | Body paragraphs in reading order |
pullQuote | string | – | Accent-ruled quote after the body |
signatories | Signatory[] | [] | Avatar bylines signing the letter off |
portraits | Portrait[] | [] | Captioned photographs in the side column |
className | string | – | Extra classes for the outer section |
type Signatory = {
name: string;
role: string;
avatar: { src: string; alt: string };
};
type Portrait = {
src: string;
alt: string;
caption: string;
};p elements. There is no markdown or HTML parsing, so links or emphasis inside a paragraph need the block edited rather than passed in.mb-6 with last:mb-0, so the spacing lives between them and the block never ends on a stray margin.max-w-2xl even though its grid track is wider. That is deliberate: long-form text needs a measure, and the extra track width becomes breathing room rather than longer lines.border-l-2 border-primary, which is the one place the accent appears in this block. It is a p, not a blockquote, since it repeats a line from the letter rather than quoting an outside source.lg:pt-24 so the first photograph starts level with the body text rather than with the eyebrow.figure and figcaption pairs, so the captions stay associated with their images for assistive technology.signatories array removes its rule cleanly.about79
An about section written as a letter: a portrait drifting inside its frame on the left, and on the right a serif opening line that settles in word by word, three paragraphs, a ruled signature with the founder's name and role, and a sliding-marker pill.
about67
Founder statement with a large blockquote followed by an avatar, name, role, and a monospace signature line.
about15
Editorial-style open letter with paragraphs, a personal signature with avatar, and a call-to-action. Great for founder stories.
about45
A founder-led pull-quote about with a portrait, signature and a facts strip.