Team block
BlockPeople introduced by what they own and how to reach them, with initials when there is no photo.
pnpm dlx shadcn@latest add https://caliperui.site/r/team-block.jsonTeam
The people behind your close
Write to any of us directly. A person answers.
Priya Raman
Co-founder · owns the matching enginepriya@halden.appRafael Abreu
Head of support · answers in under 2hhelp@halden.appKiara Murayama
Security · SOC 2, DPAs, pen testssecurity@halden.appTomás Ferreira
Accountant in residence · CPAtomas@halden.app
14 people in Lisbon and London. We are hiring a second support lead.
When to use #
Use it for
- About, security or support pages where buyers want a named contact.
- A small team that is part of the pitch.
Skip it when
- A grid of headshots with job titles only.
- Large organisations; link to a directory.
Installation #
pnpm dlx shadcn@latest add https://caliperui.site/r/team-block.json
Adds its 4 files to components/ui/, each with its own stylesheet, and installs their packages. No account needed. The first part also adds Caliper UI’s tokens; import them once as in Installation.
Usage #
This is the code behind the preview above.
import { type ReactNode } from "react" import { TeamBlock } from "@/components/ui/team-block" function Frame({ children }: { children: ReactNode }) { return <div className="w-full overflow-hidden rounded-[14px] shadow-[0_0_0_1px_var(--border)]">{children}</div>; } const team: Parameters<typeof TeamBlock>[0] = { eyebrow: "Team", title: "The people behind your close", lead: "Write to any of us directly. A person answers.", footnote: "14 people in Lisbon and London. We are hiring a second support lead.", people: [ { name: "Priya Raman", role: "Co-founder", owns: "owns the matching engine", contact: { label: "priya@halden.app", href: "mailto:priya@halden.app" } }, { name: "Rafael Abreu", role: "Head of support", owns: "answers in under 2h", contact: { label: "help@halden.app", href: "mailto:help@halden.app" } }, { name: "Kiara Murayama", role: "Security", owns: "SOC 2, DPAs, pen tests", contact: { label: "security@halden.app", href: "mailto:security@halden.app" } }, { name: "Tomás Ferreira", role: "Accountant in residence", owns: "CPA", contact: { label: "tomas@halden.app", href: "mailto:tomas@halden.app" } }, ] }; export function TeamBlockDemo() { return <Frame><TeamBlock {...team} /></Frame>; }
API reference #
TeamBlock
component
Accessibility #
It is built on native elements, so roles and focus come from the browser.
No custom key handling; Tab and the native activation keys do the work.
Motion #
It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.