Team Member Grid

(The people)

Small team, senior hands.

No layers of account managers, no junior pass-throughs. The names below are the ones who answer your Slack, sketch the first frame, and ship the last pixel.

Meet the studio
Portrait of Mara Vance

Mara Vance

Founder & Creative Director

Portrait of Idris Okonkwo

Idris Okonkwo

Principal Brand Designer

Portrait of Lena Sørensen

Lena Sørensen

Motion & Type Lead

Portrait of Caleb Moretti

Caleb Moretti

Engineering Partner

About this block

Team Member GridPRO

Team section with an eyebrow, big heading, description and CTA above a responsive grid of people cards (portrait image, name, role).

About60: Team Member Grid

Team section with an eyebrow, heading, description, and a right-aligned CTA above a responsive grid of people cards, each a portrait image with a name and role beneath it.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/about60?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/about60?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/about60.tsx, the badge7 component it uses for the eyebrow label, the button12 component it uses for the CTA, and its dependencies.

Quick start

The installed file exports about60Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.

tsx
import { About60, about60Demo } from "@/components/beste/block/about60";

export default function Page() {
  return <About60 {...about60Demo} />;
}

Then replace the demo with your own props. Written out, the same setup looks like this:

tsx
import { About60 } from "@/components/beste/block/about60";

export default function Page() {
  return (
    <About60
      badge={{ label: "The people" }}
      heading="Small team, <strong>senior hands.</strong>"
      description="No layers of account managers, no junior pass-throughs."
      button={{ label: "Meet the studio", href: "/team" }}
      people={[
        { name: "Mara Vance", role: "Founder & Creative Director", image: { src: "https://images.unsplash.com/photo-1648556873591-4b378146bd1c?w=900&fit=crop", alt: "Portrait of Mara Vance" } },
        { name: "Idris Okonkwo", role: "Principal Brand Designer", image: { src: "https://images.unsplash.com/photo-1637920448395-4173703a18c8?w=900&fit=crop", alt: "Portrait of Idris Okonkwo" } },
        { name: "Lena Sorensen", role: "Motion & Type Lead", image: { src: "https://images.unsplash.com/photo-1770896689034-770c5d284163?w=900&fit=crop", alt: "Portrait of Lena Sorensen" } },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow text rendered in a Badge7
headingstringSection heading; supports inline HTML (<strong>)
descriptionstringSupporting paragraph next to the heading
buttonActionButtonCTA rendered as an outline-tone Button12, right-aligned on desktop
peopleAbout60Person[][]Team member cards
classNamestringExtra classes for the outer <section>
ts
type ActionButton = { label: string; href: string };
type About60Person = { name: string; role: string; image: { src: string; alt: string } };

Behavior notes

  • The header row uses md:justify-between to put the badge/heading/description on the left and the button on the right from md up; on mobile everything stacks in document order.
  • The grid is fixed at grid-cols-1 sm:grid-cols-2 lg:grid-cols-4, independent of people.length.
  • There is no avatar-fallback handling: person.image.src is rendered directly in a plain <img> with no fallback for a missing or broken image, unlike shadcn Avatar-based team grids elsewhere in the registry.
  • Each card shows only a portrait, name, and role; there are no bios or social links per person.
  • The CTA uses Button12 with tone="outline", distinguishing it visually from the default-tone buttons used in most other about blocks in this set.

More About blocks

View all About
PRO

about68

Team Portrait Grid

A team section with an eyebrow over a hairline rule, a two-column heading, and a grid of portrait cards each with a name and role.

PRO

about7

Team Cards with Bios

Three-column grid of team member cards with avatars, roles, and short bios. Great for leadership and team pages.

PRO

about20

Team Photo & List

Wide team photo, member list with avatars, team stats grid, and a culture quote. A rich team showcase layout.

PRO

about1

Team & Mission

Two-column about section with mission statement, company stats, and team member grid. Perfect for company pages and landing sections.

PRO

about66

About with Stats Grid

Two-column about with a tall image on one side and an eyebrow, heading, description, and 2x2 stats grid on the other.

PRO

about29

Wide Banner & Product Cards

Centered header with wide panoramic image, product cards with layered attributes, and sourcing grid.