AM ← Back to portfolio Product Designer · Design Systems
Horse Keeper

Design System & Color Tokens

The color foundation behind the Horse Keeper iOS app — a three-tier token library built in Figma Variables and synced to code, so a single source of truth drives both design and the shipped product.

41Color tokens
3Tiers
1Source of truth
View the live, interactive library
The approach

One palette, three layers of intent

Flat hex values don't scale. The moment a brand color shifts or a theme is added, every screen has to be hunted down by hand. Horse Keeper's tokens are structured so meaning lives in one place and everything downstream inherits it.

01 — Primitive

Raw values

The literal hex palette: teal, brown, neutral, ink, and support hues. Named by ramp position, never used directly in UI.

02 — Semantic

Meaning

Roles like brand/primary or text/muted that alias to primitives. This is the layer designers actually reach for.

03 — Component

Application

Button, card, and navigation tokens that reference semantics — so components stay consistent and never touch raw hex.

Tier 01 — Primitive · 14 tokens

The raw palette

teal
teal / 50
#E6F2F1
teal / 600
#2F6F6B
teal / 700
#255B58
brown
brown / 500
#8E7F6A
brown / accent
#8B4A2B
neutral
neutral / 0
#FFFFFF
neutral / 50
#F7F4EF
neutral / surface
#EDE7DF
neutral / border
#E3DBD2
ink
ink / 400
#9A9887
ink / 600
#6F655D
ink / 900
#2F2A26
support
support / blue
#4A99C2
support / orange
#E0662C
Tier 02 — Semantic · 16 tokens

Meaning, mapped to primitives

Each semantic token is an alias. Change a primitive once and every role pointing at it updates — across design and code.

brand
primaryteal/600
primaryPressedteal/700
primarySubtleteal/50
secondarybrown/500
accentbrown/accent
background
appneutral/50
surfaceneutral/surface
cardneutral/0
text
primaryink/900
secondaryink/600
mutedink/400
inverseneutral/0
border
subtleneutral/border
status
successteal/600
warningsupport/orange
infosupport/blue
Tier 03 — Component · 11 tokens

Applied to components

The outermost layer references semantics — never raw hex — so buttons, cards, and navigation stay in lockstep with the system.

button
primaryBackgroundbrand/primary
primaryTexttext/inverse
primaryPressedbrand/primaryPressed
secondaryBackgroundbackground/card
secondaryTexttext/primary
secondaryBorderborder/subtle
card
backgroundbackground/card
borderborder/subtle
navigation
backgroundbackground/app
tabActivebrand/primary
tabInactivetext/muted

Why it matters: because every component token traces back through a semantic role to a single primitive, rebranding or theming Horse Keeper is a handful of edits at the primitive tier — not a screen-by-screen rework. The library is authored in Figma Variables and exported to code, keeping design and the shipped iOS app on one source of truth.