3x
Revenue Growth
200K+
Active Users
72
NPS Score
99.9%
Uptime
15K+
Open Source Stars
120+
Enterprise Clients
A design infrastructure company on a mission to make the web more beautiful, one component at a time.
Founded in 2018, we set out to solve a simple problem: developers spend too much time rebuilding common UI patterns. Our component library gives teams a head start with production-ready blocks that are accessible, responsive, and endlessly customizable. Today we serve over 200,000 developers across 50 countries, and our open-source community contributes new components every week. We are backed by world-class investors and guided by a leadership team with decades of experience at companies like Stripe, Vercel, and Figma.
Horizontal stats row at the top followed by a centered story card with heading, body text, and CTAs.
A fixed six-column stats bar sits above a two-track layout: a portrait image on the left and, on the right, a muted story card holding the badge, heading, description, body copy, and CTAs. Suited for an about page that wants to lead with numbers before the narrative.
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/about14?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/about14?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/about14.tsx and the badge and button shadcn/ui primitives it depends on.
The installed file exports about14Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.
import { About14, about14Demo } from "@/components/beste/block/about14";
export default function Page() {
return <About14 {...about14Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { About14 } from "@/components/beste/block/about14";
export default function Page() {
return (
<About14
badge={{ label: "About", variant: "secondary" }}
heading="We help teams ship faster"
description="A design infrastructure company on a mission to make the web more beautiful."
body="Founded in 2020, we set out to give developers a head start on the interfaces they rebuild every project."
image={{ src: "https://images.unsplash.com/photo-1688024390346-3f6de72f3d45?w=800&h=1000&fit=crop", alt: "Our office" }}
stats={[
{ title: "Revenue Growth", value: "3x" },
{ title: "Active Users", value: "80K+" },
{ title: "Uptime", value: "99.9%" },
{ title: "Enterprise Clients", value: "40+" },
]}
buttons={[{ label: "Get Started", href: "https://beste.co" }]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Small label inside the story card |
heading | string | – | Heading inside the story card |
description | string | – | Intro text inside the story card |
body | string | – | Longer paragraph rendered under the description |
image | { src: string; alt: string } | – | Portrait photo in the left column |
stats | StatItem[] | [] | Numbers rendered in the bar above the two-column layout |
buttons | ButtonItem[] | [] | CTAs at the bottom of the story card |
className | string | – | Extra classes for the outer <section> |
type StatItem = { title: string; value: string };
type ButtonItem = {
label: string;
href?: string;
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "destructive";
};grid-cols-2 sm:grid-cols-3 lg:grid-cols-6, a fixed six-column track at desktop width regardless of how many stats entries are passed; six items line up evenly, other counts leave gaps or wrap into a second row.lg:grid-cols-[1fr_2fr], so the story card is twice as wide as the image column on desktop.aspect-[3/4] on mobile but switches to lg:aspect-auto at desktop width, which lets it stretch to match the story card's height via the grid's default row-stretch behavior instead of keeping a fixed ratio.bg-muted/50) in this block; the stats bar and image sit directly on the page background.about23
Two-column layout with company story, stats, and leadership quote on the left, team photo and avatar row on the right.
about5
Side-by-side layout with a tall image on the left and company story, inline stats, and CTAs on the right.
about66
Two-column about with a tall image on one side and an eyebrow, heading, description, and 2x2 stats grid on the other.
about24
Company story with image, border-accented feature highlights, and stats row. Great for craft, heritage, and product-focused brands.