
01 — Problem
A single design system trying to serve both would over-engineer the tablet and under-engineer the admin. The solution was to separate what needs to be shared from what each product should own.
02 — Architecture
Shared: both products
Not shared: each product owns its own

WHY ONLY COLORS?
green700 means the same thing in both products — active, safe, confirmed. That meaning must be consistent. Typography, spacing, and components don't carry cross-product meaning. Forcing them to share adds constraint without adding value.
03 — Token examples
One flat file. Named by hue and weight — green700 not primaryButton. The file describes what a color is. Each product's own layer handles what it means.
Why greens from tablet, grays from admin?
04 — Typography
Both use Inter. That's the only shared typography decision. Below that, each system is built for its context.
Tablet — atomic scale
xs · sm · md · lg · xl · xxl
xs
12px
sm
14px
md
16px
lg
18px
xl
20px
xxl
24px
Admin — semantic names
36 semantic → 15 core styles
font-page-title
22px · 600
font-modal-title
18px · 600
font-section-title
18px · 600
font-rca-card-title
16px · 500
font-body-heading
16px · 400
font-body
14px · 400
05 — Key decisions
Tablet uses tokens directly, no semantic layer
Architecture
Context
The tablet has a small, fixed set of critical flows , take responsibility, confirm PIN, update machine state. There's no ambiguity about what a color means in context.
The solution
A semantic layer like primaryAction → green700 adds indirection that slows debugging in high-stakes moments. Writing colors.green700 directly means any developer can read exactly what a component does , no layer-tracing required.
Hex values, not HSL
Color format
Why not HSL
HSL scales better. One hue value, change it and the entire scale shifts. Ideal for white-labelling or programmatic generation.
Why hex
The scale already existed from Figma. Hex is paste-anywhere, readable in any tool. HSL is great for brand personalisation or dark mode needs.
Built flat now, designed to grow later
Scalability
What exists today
One flat colors.ts. No abstraction, no layers. Comments explain intent inline. Copy-paste to both projects, nothing to learn or migrate. Simple enough that any developer picks it up in minutes.
What it enables later
Dark mode or white-labelling? Add a semantic export at the bottom of the same file. The flat layer never changes , components migrate gradually. The architecture doesn't close any doors, it just doesn't build for them prematurely.
06 — Components in context
The token decisions above aren't abstract. They're visible in every component.


07 — My contribution
Token architecture
Designed the flat shared file, reconciled two independently-built color systems, chose hex over HSL with documented rationaleCross-product strategy
Defined what to share and why, and explicitly what not to share, including the reasoning for eachArchitectural divergence
Semantic layer for admin, direct token usage for tablet, based on context not convention

