Skip to main content

Design system components

PersonCard

Profile card for a person with avatar, name, role, and links, plus a skeleton loading state for rosters.

Status: beta. Group: structure. Markdown version: /design-system/components/person-card.md

When to use

Profile card for people: avatar, name, role, and links, with a skeleton state for loading rosters. Team and about-page module.

When not to use

The contract records no forbidden uses.

Look-alikes

The contract names no look-alike with a deciding condition.

Props

PersonCard props
PropTypeDefaultDescriptionRequired
imageSrcstringnoneNo description in the contract.Yes
imageAltstringnoneNo description in the contract.Yes
imageSrcSetstringnoneNo description in the contract.No
imageSizesstringnoneNo description in the contract.No
namestringnoneNo description in the contract.Yes
titlestringnoneNo description in the contract.Yes
emailstringnoneNo description in the contract.Yes
linkedinUrlstringnoneNo description in the contract.No
linkedinLabelstringnoneNo description in the contract.No
githubUrlstringnoneNo description in the contract.No
githubLabelstringnoneNo description in the contract.No
facebookUrlstringnoneNo description in the contract.No
facebookLabelstringnoneNo description in the contract.No
twitterUrlstringnoneNo description in the contract.No
twitterLabelstringnoneNo description in the contract.No
dribbbleUrlstringnoneNo description in the contract.No
dribbbleLabelstringnoneNo description in the contract.No
mediumUrlstringnoneNo description in the contract.No
mediumLabelstringnoneNo description in the contract.No
instagramUrlstringnoneNo description in the contract.No
instagramLabelstringnoneNo description in the contract.No
substackUrlstringnoneNo description in the contract.No
substackLabelstringnoneNo description in the contract.No
classNamestringnoneNo description in the contract.No
imageLoading"lazy" | "eager"lazyNo description in the contract.No
imageDecoding"auto" | "sync" | "async"asyncNo description in the contract.No
loadingbooleanfalseShow skeleton placeholders while content is loading.No

Variants

  • Allowed imageLoading values: lazy, eager (default lazy).
  • Allowed imageDecoding values: auto, sync, async (default async).

Invalid combinations

The contract records no invalid combinations.

Keyboard

The contract records no keyboard interaction.

Rules

Every item under When not to use is a MUST NOT. MUST and SHOULD follow RFC 2119.

PersonCard rules
LevelRuleHow it is checked
MUSTRequired stories produce no axe violations at the configured severity.Automated by npm run test:stories:matrix:ci. WCAG 2.5.8.
MUSTThe accessibility tree (role, name, state) matches the committed snapshot for every required story.Automated by npm run test:stories:matrix:ci. WCAG 1.3.1, 4.1.2.
MUSTThe component remains legible and operable under a real browser forced-colors: active pass.Automated by npm run test:stories:hc.
MUSTA human completed an end-to-end accessibility review of this component.Manual review, last on 2026-05-28.
MUST NOTMaintainers: Do not bypass design tokens or skip forced-colors verification at beta.Release review; not machine-checked.

Install and import

  • In-repo only. PersonCard is not exported from @digitaltableteur/react, so there is no public import path.