Meet the Team Gallery

Our Team

Meet the people behind the product

Our diverse team of talented individuals is dedicated to building exceptional experiences. Get to know the people who make it all happen.

Sarah Chen

Sarah Chen

CEO & Co-founder

Marcus Johnson

Marcus Johnson

CTO

Emily Rodriguez

Emily Rodriguez

VP of Design

James Kim

James Kim

Head of Engineering

Aisha Patel

Aisha Patel

Product Lead

David Müller

David Müller

VP of Sales

Lisa Tanaka

Lisa Tanaka

Head of People

Carlos Rivera

Carlos Rivera

Lead Designer

About this block

Meet the Team GalleryPRO

Team member photo grid with names and roles. Square portrait layout for showcasing leadership and team composition.

A centered header block (optional badge, heading with inline <strong>, and description) followed by a responsive grid of team members, each rendered as a square portrait image above a name and optional role.

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/careers14?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/careers14.tsx, plus the badge shadcn/ui primitive it uses for the section eyebrow.

Quick start

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

tsx
import { Careers14, careers14Demo } from "@/components/beste/block/careers14";

export default function TeamPage() {
  return <Careers14 {...careers14Demo} />;
}

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

tsx
import { Careers14 } from "@/components/beste/block/careers14";

export default function TeamPage() {
  return (
    <Careers14
      badge={{ label: "Our Team", variant: "secondary" }}
      heading="Meet the <strong>people behind the product</strong>"
      description="Get to know the people who make it all happen."
      items={[
        {
          name: "Sarah Chen",
          role: "CEO & Co-founder",
          image: { src: "/team/sarah.jpg", alt: "Sarah Chen" },
        },
        {
          name: "Marcus Johnson",
          role: "CTO",
          image: { src: "/team/marcus.jpg", alt: "Marcus Johnson" },
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Optional eyebrow badge above the heading
headingstringSection heading, supports inline <strong>
descriptionstringSupporting paragraph under the heading
itemsTeamMember[][]Members rendered in the portrait grid
classNamestringExtra classes for the outer <section>
ts
type TeamMember = {
  name: string;
  role?: string;
  image?: {
    src: string;
    alt: string;
  };
};

Behavior notes

  • The entire header block (badge, heading, description) is wrapped in a single (badge || heading || description) guard, so if none of the three is passed the grid renders with no header at all.
  • heading is injected with dangerouslySetInnerHTML, and only <strong> inside it is styled (text-primary, font-semibold) via a [&>strong] selector, so nested or other tags receive no special styling.
  • badge.variant falls back to "default" when omitted, even though the demo passes "secondary".
  • Each member's image is optional: when absent the portrait <div> is skipped entirely and only the name/role text is shown, which collapses that grid cell's height.
  • item.role is conditionally rendered, so a member with just a name shows a single line with no secondary text.
  • The grid is fixed at one column on mobile, two at sm, and four at lg (sm:grid-cols-2 lg:grid-cols-4); there is no prop to change the column count.
  • The block is purely presentational: images are plain <img> tags with a hover opacity transition (group-hover/careers14:opacity-90) and there are no click handlers, links, or callbacks on any member.
  • Grid cells use the array index as their React key, so reordering items will not preserve element identity.

More Careers blocks

View all Careers
PRO

careers29

Team Events Gallery

Photo gallery of company events, offsites, and team activities in masonry layout. Visual showcase of team culture and community.

PRO

careers18

Department Overview Grid

Department cards with team lead, headcount, open roles badge, and links. Helps candidates explore teams before applying.

PRO

careers31

Role Comparison Table

Side-by-side role comparison grid showing team, skills, experience, and salary for different positions. Responsive table-to-card layout.

PRO

careers2

Job Openings Grid

Job openings grid with department badges, location tags, and apply buttons. Card-based layout for career pages.

PRO

careers13

Office Locations Grid

Global office locations grid with city photos, team size, and role taglines. Showcases company presence worldwide.

PRO

careers36

Hiring Manager Profiles

Team lead profiles with photos, bios, and department badges. Introduces future managers to candidates with detailed backgrounds.