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.
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.social56
A referral section walking through three numbered steps and the full terms as a hairline table, beside a column that sticks and floats a live credit card on an image tile.
social58
A masonry of what readers wrote back, disagreements included, filtered by platform pills whose counts come from the responses themselves, over a hairline row of accounts to follow.
social48
A community section listing four linked places to join as full-width hairline rows, each with an icon tile, a description, a light membership figure, and an arrow that shifts on hover.
social50
A social section that gives one post an image tile of its own, floating a live post card with its engagement counts, beside the replies it drew as linked hairline rows.