Studio overview pairing facts, copy and highlight stats with a clean studio image.
Two-column studio overview: copy, a definition-list of quick facts, and a pair of highlight stats pinned to the bottom on the left, a full-bleed studio photo on the right.
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/agency16?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/agency16?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/agency16.tsx, the badge6 component it uses for the section eyebrow, and its dependencies.
The installed file exports agency16Demo alongside the block: the exact props behind the preview above. Spread it to get a working overview section in one line.
import { Agency16, agency16Demo } from "@/components/beste/block/agency16";
export default function AboutPage() {
return <Agency16 {...agency16Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Agency16 } from "@/components/beste/block/agency16";
export default function AboutPage() {
return (
<Agency16
label="Studio at a glance"
heading="A small studio with a long memory for craft."
description="We keep the roster deliberately small so the people you meet are the people who do the work."
facts={[
{ label: "Founded", value: "2016, Portland" },
{ label: "Location", value: "Remote-first" },
{ label: "Team", value: "11 makers" },
]}
image={{
src: "https://images.unsplash.com/photo-1497366216548-37526070297c?w=1600&h=1600&fit=crop",
alt: "Studio workspace with desks and natural light",
}}
highlights={[
{ value: "140+", label: "Projects shipped" },
{ value: "9 yrs", label: "Building together" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
label | string | – | Eyebrow text rendered in Badge6 |
heading | string | – | Section heading |
description | string | – | Body copy under the heading |
facts | Fact[] | [] | Definition-list rows (label/value pairs) |
image | StudioImage | – | Full-bleed photo on the right column; the panel stays an empty muted box if omitted |
highlights | Highlight[] | [] | Highlight stat pair pinned to the bottom of the left column |
className | string | – | Extra classes for the outer <section> |
type Fact = { label: string; value: string };
type Highlight = { value: string; label: string };
type StudioImage = { src: string; alt: string };mt-auto on the highlights block, so highlights always sinks to the bottom of the column regardless of how much facts/description content precedes it.facts render as a <dl> with a top border on the first row and a bottom border on every row, giving a ruled table effect without an actual <table>.group/agency16, scale-105, 500ms) and has no overlay chips or caption, unlike other agency image panels in this set.min-h-[420px]; from lg up it relies on items-stretch on the parent grid to match the left column's height instead.agency12
Studio values laid out with oversized ghost numerals, titles, descriptions and keywords.