Every one of these is a practising clinician, manager, or receptionist. None of them work here and none of them were paid.
118
practices in the feedback group
412
changes shipped from their reports
31
features we dropped after they said no
Elena Rourke
Bramble Health, Bristol
Designed the waiting list backfill after describing her Monday in detail
64 reports
Tom Ashby
Kingsway Clinic, Leeds
Argued us out of a settings page nobody needed, twice
48 reports
Dr Amelia Frost
Harbour Practice, Southampton
Rewrote the clinical note template in a shared document over one weekend
39 reports
Maya Coleman
Bramble Health, Bristol
Timed every reception task with a stopwatch so we could argue with data
27 reports
Idris Warren
Norwich Care Collective
Broke the multi-site rota in nine ways before anybody else saw it
22 reports
Sara Okonjo
Fenwick Group, Sheffield
Made the case for insurer reconciliation that changed the whole billing plan
18 reports
If you would rather shape the thing than wait for it, the feedback group meets fortnightly and has room.
Join the groupA community credit section opening on three hairline figures, then naming each contributor in a hairline matrix of cards with their practice, what they changed, and how many reports they filed.
A community credit section opening on three hairline figures, then naming each contributor in a hairline matrix of cards with their practice, what they changed and how many reports they filed.
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/social53?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/social53?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/social53.tsx plus the badge23 and button21 components it uses for the eyebrow and the closing action.
The installed file exports social53Demo alongside the block: the exact props behind the preview above. Spread it to get a working wall in one line.
import { Social53, social53Demo } from "@/components/beste/block/social53";
export default function ContributorsPage() {
return <Social53 {...social53Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Social53 } from "@/components/beste/block/social53";
export default function ContributorsPage() {
return (
<Social53
badge={{ label: "Built with them" }}
heading="The people who told us what to change"
description="None of them work here and none of them were paid."
stats={[
{ value: "118", label: "practices in the feedback group" },
{ value: "412", label: "changes shipped from their reports" },
{ value: "31", label: "features we dropped after they said no" },
]}
contributors={[
{
name: "Elena Rourke",
practice: "Bramble Health, Bristol",
avatar: { src: "/people/elena.jpg", alt: "Portrait of Elena Rourke" },
contribution: "Designed the waiting list backfill after describing her Monday in detail",
count: "64",
countLabel: "reports",
},
]}
closing="If you would rather shape the thing than wait for it, the group has room."
button={{ label: "Join the group", href: "/community" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow above the hairline rule, rendered through Badge23 |
heading | string | – | Section heading in the left column of the header |
description | string | – | Supporting paragraph, right-aligned from md up |
stats | Stat[] | [] | Programme figures on a hairline row |
contributors | Contributor[] | [] | Named people, three across from lg |
closing | string | – | Invitation beside the closing action |
button | { label: string; href: string } | – | Closing action |
className | string | – | Extra classes for the outer section |
type ActionLink = {
label: string;
href: string;
};
type Contributor = {
name: string;
practice: string;
avatar: { src: string; alt: string };
contribution: string;
count: string;
countLabel: string;
};
type Stat = {
value: string;
label: string;
};contribution is required and is written as a specific act rather than a role, for example "Argued us out of a settings page nobody needed". A wall of names with no attribution is the pattern this block exists to avoid.flex flex-col with the contribution marked flex-1, so the report counts align along the bottom across every card in a row.tabular-nums figure and a muted unit, so a column of two-digit and three-digit counts still lines up.gap-px over a bg-border container with bg-card cells, clipped by the container's overflow-hidden.min-w-0 with truncate on both lines, so a long practice name ellipsizes rather than pushing the portrait out of the row.