Deck
Browse the catalog

Deck Design System

Deck is MeetCard’s flagship atomic design system — a composable foundation of accessible, production-ready components for building card-centric experiences.

MeetCard is a digital business-card and networking platform. The product metaphor is a deck of cards: people, companies, and contacts are cards you view, share, exchange, and organize. Deck exists to make building those surfaces fast, consistent, and accessible by default.

Deck is currently under active development. It is not yet published. The package will be available publicly as:

npm install @meetcard/deck

Installation

Once published, install the package and import the stylesheet once at your app root, then use components anywhere:

import '@meetcard/deck/styles.css'
import { Button, Card, PersonCard } from '@meetcard/deck'

Deck ships the token layer in that stylesheet. Add the deck-root class to your app shell to adopt Deck’s page background, text color, and font stack:

export function App() {
  return <div className="deck-root">{/* … */}</div>
}

Deck expects Inter. It deliberately does not bundle or fetch the font — load it however your app loads fonts. The stack degrades to system UI.

What’s in the box

Layer Components
Typography Text, Heading
Layout Stack, Divider, Card (+ CardHeader, CardBody, CardFooter)
Actions Button, IconButton, Link
Data display Badge, Avatar, Tag, StatTile, UsageMeter, QRCode
Forms Field, Input, Textarea, Select, SearchField, Checkbox, Radio (+ RadioGroup), Switch
Feedback Banner, EmptyState, Spinner
Overlays Sheet
App shell AppBar, BottomNav
Navigation Stepper
MeetCard patterns PersonCard, CardPile, CompanyCard, ContactCard, EventCard

Building the two surfaces

The public networking layer (meetcard.io) is unauthenticated and recipient-first: PersonCard/CompanyCard/EventCard for the profile, company, and event pages, with CardPile for browsing a stack of saved cards; QRCode for the scannable card; Banner for the “create your own card” invite; and Stepper for the four-step booking wizard (purpose → availability → details → booked), where each step is its own route.

The application layer (app.meetcard.io) is the installed PWA: AppBar + BottomNav form the shell — four destinations plus the elevated Exchange action, which opens a Sheet offering “Show my card” and “Scan a card”. SearchField and Tag drive the Rolodex, StatTile the dashboard headline metrics, and UsageMeter the Solo connections cap.

Usage

Deck favours small primitives that compose, rather than large components with many options:

<Card as="article" interactive>
  <CardHeader divided>
    <Heading level={3} size="sm">Ada Lovelace</Heading>
    <Badge tone="success" dot>Connected</Badge>
  </CardHeader>
  <CardBody>
    <Text size="sm" tone="muted">Head of Partnerships · MeetCard</Text>
  </CardBody>
  <CardFooter divided>
    <Button size="sm">Share card</Button>
  </CardFooter>
</Card>

For common MeetCard surfaces, the pattern components already compose those primitives for you:

<PersonCard
  name="Ada Lovelace"
  title="Head of Partnerships"
  company="MeetCard"
  companyHref="/companies/meetcard"
  location="London, UK"
/>

Dark mode

Every component reads semantic tokens, so dark mode needs no per-component work. It follows prefers-color-scheme automatically, and a host app can force a theme:

<html data-deck-theme="dark">

Theme source

Color comes from the Figma Deck Design System → Brand guidelines → MeetCard - Brand Colors frame (July 2026); type, spacing, radius, and elevation come from the Foundations page. See Design System/Foundations for the resolved values.

Open in Storybookfor controls, the a11y panel and the interaction runner.