Build engine
One token JSON, exported from the Figma kit, compiled into every platform's snapshot. Each output is stamped with the SHA-256 of the source it came from.
One source
docs/jeevy_full_tokens.json is the single source of truth. scripts/build_tokens.py reads it and writes the snapshots below. Nobody edits a snapshot by hand; a change starts in the JSON (or in Figma, then exported).
What it writes
| File | Platform | Holds |
|---|---|---|
frontend/src/styles/themes/tokens.generated.css | Web | Primitives on :root, semantic tokens inside [data-ds="v1"] |
docs/tokens/JeevyTokens.swift | SwiftUI | JeevyTokens.Color.bgElevated, JeevyTokens.Radius.control |
docs/tokens/JeevyTokens.kt | Jetpack Compose | JeevyTokens.Colors.BgElevated, Radius in Dp |
mobile/src/themeTokens.json | React Native | Normalised colours, radius and spacing for the kiosk app |
landing/src/content/design-system/tokens.json | These docs | Every colour with L*, luminance and WCAG contrast |
landing/src/content/design-system/components.json | These docs | The component catalog: purpose, rules and touch notes |
frontend/src/styles/design-system-docs.json | Playground | The token registry the live stages generate code from |
Commands
Check mode is the default and exits 1 when any snapshot has drifted from the source, so it can run in CI.
Check every snapshot
npm --prefix frontend run tokens:checkRegenerate after a token change
npm --prefix frontend run tokens:buildWhat it does not touch
- The hand-written
tokens.css, which holds the light theme, legacy aliases and type tokens the JSON does not. - Anything across the app seam by import: the portal and these docs are separate deployments, so each gets its own checked copy.