Skip to main content

Design system components

ProjectCard

Basic portfolio project card for the work grid: a clickable thumbnail with title, optional category eyebrow and up to three tags.

Status: stable. Group: content. Markdown version: /design-system/components/project-card.md

When to use

The basic work-grid project card (image, title, tags). EnhancedProjectCard is the richer variant; pick one per surface.

When not to use

The contract records no forbidden uses.

Look-alikes

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

Props

ProjectCard props
PropTypeDefaultDescriptionRequired
titlestringnoneProject title.Yes
slugstringnoneURL slug for the project detail page; the card links to /work/{slug}.Yes
thumbnailstringnoneThumbnail image URL.Yes
categorystringnoneProject category.No
tagsstring[]noneProject tags.No
aspectRatio"video" | "square" | "portrait" | "landscape"videoImage aspect ratio. Defaults to video.No
titlePosition"overlay" | "below"overlayTitle position: over the image (overlay) or beneath it (below). Defaults to overlay.No
comingSoonbooleanfalseRender as a non-interactive teaser with a "coming soon" badge over the media. Defaults to false.No
comingSoonLabelstringComing soonVisible badge label for the coming-soon overlay (pass a translated string). Defaults to the untranslated English "Coming soon".No
classNamestringnoneCustom className.No

Variants

  • Available aspect ratios: video, square, portrait, landscape (default video).
  • Allowed titlePosition values: overlay, below (default overlay).

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.

ProjectCard rules
LevelRuleHow it is checked
MUSTARIA: Whole card is a single link to /work/{slug}; the thumbnail is decorative (alt="") and the link's accessible name comes from the title text.Not yet verified: no evidence record. WCAG 4.1.2.
MUSTARIA: The title is always an h3; place the card where an h3 fits the page outline.Not yet verified: no evidence record. WCAG 4.1.2.
MUSTARIA: With comingSoon the root is a non-interactive div (no link role); the badge label is plain visible text.Not yet verified: no evidence record. WCAG 4.1.2.
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.
MUSTPositional, scale, and opacity motion is suppressed under prefers-reduced-motion.Manual review, last on 2026-11-04. WCAG 2.2.2, 2.3.3.
MUSTA human completed an end-to-end accessibility review of this component.Manual review, last on 2026-11-04.
MUST NOTMaintainers: Do not invent parallel primitives inside this folder.Release review; not machine-checked.
MUST NOTMaintainers: Do not promote to stable without production consumer evidence.Release review; not machine-checked.

Install and import

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