Sakani

Team Cards

Two ways to present a person: a compact profile card and a portrait-led team card.

Amara Chen

Head of Design

Amara Chen

Head of Design

Ten years turning messy component libraries into systems teams actually use.

Icon links still need names

socialLinks takes a label alongside the icon and it isn't optional — a row of unlabelled glyphs is unusable with a screen reader, and it's the same reason IconButton requires an aria-label.

Team card

Leads with a portrait and carries a location, rendered through LocationDot.

Amara Chen
Lagos, NG

Amara Chen

Head of Design

ProfileCard props

PropTypeDefaultDescription
name / rolestringWho they are and what they do.
avatarSrc / avatarAltstringAvatar image and alt text.
biostringIts presence switches the card to the centred detailed layout.
socialLinks{ icon: ReactNode; label: string; href?: string; onClick?: () => void }[]label is the accessible name — an icon alone doesn't have one.

TeamCard props

PropTypeDefaultDescription
image / imageAltstringPortrait and alt text.
name / rolestringWho they are and what they do.
locationstringRendered through LocationDot.
locationStatus'active' | 'remote'Colours that dot.
socialLinksTeamCardSocialLink[]Same shape as ProfileCard's.