Outcome: 308 primitives → 234 semantic tokens · dark mode is a token swap, not a redesign
A system built from tokens up
A token-first design system — Primitives → Semantic → Component
Foundation
Spacing, typography, radius, shadow, opacity, and stroke weight live as raw variables first — no component touches a hard-coded value
Atoms → Molecules → Organisms
Buttons, inputs, toggles, checkboxes, avatars and badges build up into an accordion and a data-dense table row, then into cards and a sidebar with pinned/unpinned states — each inheriting from the layer below it.
- 308 — Primitives — Raw values — color, font, spacing, radius, opacity, shadow
- 234 — Semantic — Purpose-named tokens referencing primitives, per light/dark
- 130 — Typography — Type variables covering the full text system
- 10 — Component pages — 982 typography bindings, zero partial — full QA pass across every page
Every value in this system traces back to a three-tier chain: Primitives → Semantic → Component. Nothing is hard-coded past the primitive layer, which means retheming or shipping a dark mode is a token swap, not a redesign. Light and dark were both first-class from the first file, not bolted on later.
Primitives — the raw variable layer, in Figma Variables
Semantic — purpose-named tokens mapped to light and dark
Structured like atomic design, checked like production code
Structure
- Foundation: spacing, typography, radius, shadow, opacity, and stroke weight tokens
- Atoms: buttons, checkbox & radio, avatar & badge, input, textarea (six variant states), toggle, icon library (stroke-based, Vuesax Linear)
- Molecules: accordion, table row (dedicated data-density typography roles)
- Organisms: card, sidebar (expanded/collapsed × pinned/unpinned, five usage patterns), data table — each with dedicated size and type variable collections
- A self-generated audit layer that re-documents primitives, semantics, typography, and components on every pass
- A unified color/surface/ namespace (page, subtle, element, elevated, overlay, inverse) and dedicated focus-ring tokens carry every surface and focus state across both themes
Nine components, one audit page
- Buttons — primary, secondary, ghost, danger, and icon-only, each with hover, focus-visible, active, disabled, and loading states
- Input & TextArea — TextArea shipped as a separate component with six variant states, including resize and character-counter slots
- Checkbox & Radio, Toggle — Error and Disabled as full variable modes, Hover and Focus as dedicated token slots
- Avatar & Badge
- Table Row — its own data-density typography roles, tuned for tabular contexts at small sizes
- Card
- Sidebar — isPinned, four variants across expanded/collapsed × pinned/unpinned, five usage patterns
- Accordion
- Audit — a self-generated page that re-documents every primitive, semantic, typography, and component token on each pass
v1.1