Editorial-style open letter with paragraphs, a personal signature with avatar, and a call-to-action. Great for founder stories.
Editorial open letter centered in a narrow column: a badge and heading sit above a multi-paragraph letter, followed by a signature row with an avatar, name, and role, and an optional set of CTA buttons. Built for founder stories that read like an actual letter rather than a bulleted pitch.
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/about15?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/about15?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/about15.tsx and the badge, button, and avatar shadcn/ui primitives it depends on.
The installed file exports about15Demo alongside the block: the exact props behind the preview above. Spread it to get a working letter section in one line.
import { About15, about15Demo } from "@/components/beste/block/about15";
export default function Page() {
return <About15 {...about15Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { About15 } from "@/components/beste/block/about15";
export default function Page() {
return (
<About15
badge={{ label: "A Note from Our CEO", variant: "secondary" }}
heading="Why we started this company"
letter={
"When we left our jobs, people thought we were crazy.\n\n" +
"We had both felt the same frustration: rebuilding the same interfaces over and over.\n\n" +
"So we built the tool we wished existed."
}
signature={{
name: "Sarah Chen",
role: "CEO & Co-Founder",
avatar: { src: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&h=100&fit=crop", alt: "Sarah Chen" },
}}
buttons={[{ label: "Join Our Mission", href: "https://beste.co" }]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Small label above the heading |
heading | string | – | Section heading, centered |
letter | string | – | Full letter text; paragraphs are separated by a blank line (\n\n) |
signature | { name: string; role: string; avatar?: { src: string; alt: string } } | – | Sign-off row under the letter |
buttons | ButtonItem[] | [] | CTAs centered under the signature |
className | string | – | Extra classes for the outer <section> |
type ButtonItem = {
label: string;
href?: string;
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive";
};letter is a single string, not an array: the component calls letter.split("\n\n") and renders one <p> per resulting chunk, so paragraph breaks must be authored as literal double newlines in the prop value, not as separate array items.signature.name.split(" ").map((n) => n[0]).join("") whenever signature.avatar is omitted or fails to load.max-w-3xl column; there is no left-aligned or two-column variant.signature still renders the paragraphs, and a letter with no buttons simply omits the CTA row.about67
Founder statement with a large blockquote followed by an avatar, name, role, and a monospace signature line.
about4
Founder blockquote with avatar, followed by a horizontal team member row. Ideal for leadership pages and company introductions.
about65
Centered manifesto with a very large multi-line statement heading, muted emphasis phrases, a closing line, and a single CTA.
about45
A founder-led pull-quote about with a portrait, signature and a facts strip.
about49
About built around a dark founder portrait card with a pull-quote, signature, and supporting stats.
about7
Three-column grid of team member cards with avatars, roles, and short bios. Great for leadership and team pages.