Case Study: Design System & Process

Building the
foundation
before the house

How I designed a complete design system for APEX Lift, an AI-native fitness tracker, before touching a single app screen. A record of decisions, principles, and process.

Project
APEX Lift
Role
Senior Product Designer
Phase
Design System
Status
In Progress
Scroll to explore
42
Colour tokens defined
18
Core components built
4
Typefaces in the system
8pt
Spacing grid base
Work in Progress

This document is intentionally incomplete.

Design systems are never finished, only iterated. This case study captures the design system phase: the decisions made, the rationale behind them, and how the foundation was laid before any app screen was designed. App screens, user flows, and prototype documentation will follow.

Current Phase
Design System
You're reading the live document for Phase 02. The progress tracker below shows exactly where this project sits.
Discovery & ResearchComplete
Design SystemYou are here
Screen DesignUpcoming
Prototype & TestingUpcoming
Final Case StudyUpcoming
01. Rationale

Why the system before the screens

Most designers start with screens. I've done that. It's fast and satisfying until week 6 when you have 40 inconsistent button styles across 12 screens and no one can explain where anything came from. Starting with a system is not slower; it's a different kind of investment that pays off exponentially as the design grows.

01
Consistency From Day One
When every screen is built from the same tokens, they look like they belong together without anyone having to check. That visual coherence is what separates professional product design from assembly.
02
Faster Screen Design
Building screens becomes assembly once the system exists. Each design decision (what radius, what spacing, what colour) is pre-resolved. I can focus on layout and UX logic instead of micro-decisions.
03
Dev Handoff That Works
Lovable and other AI builders reproduce designs accurately when given named tokens. "Use --color-accent" produces a consistent output. "Use that green colour" produces chaos.
04
Sustainable Design Decisions
Design tokens, spacing rules, and component states aren't overhead; they're what prevents design debt from compounding. Decisions made once in a system hold up across every new screen, edge case, and handoff.
05
AI Tooling Compatibility
APEX uses AI at the product level. It made sense to use AI at the build level too. Design tokens are exactly the structured format that tools like Figma Make and Lovable understand best.
06
Easier Iteration
When a recruiter asks "can you make this lighter?" one token change updates every surface. Without a system, that's 3 hours of hunting across Figma layers. With a system, it's 30 seconds.
"A design system is not a deliverable. It's the infrastructure that makes all future deliverables better and faster."
02. Process

How I built the system

Four focused weeks before opening Figma. Most of the work was decisions, not production. The production work was fast because the decisions were already made.

Week 01
Defining the Visual Language
Started with a mood board in FigJam, not aspirational imagery, but specific references for each design decision. Dark theme references. Typography pairings. Apps that handle dense data beautifully under gym lighting. The question I kept asking: what does "serious but accessible" look like in a fitness context?
→ Visual direction brief · Colour psychology notes · 3 rejected directions
Week 02
Colour & Accessibility Audit
Tested every colour combination against WCAG AA (4.5:1 contrast ratio minimum). The gym context made this non-negotiable; screens are read in varying lighting, at arm's length, sometimes mid-set. Every text-on-background pairing was validated in Figma's accessibility plugin before being committed to the system.
→ Colour token set · Contrast matrix · Accessibility sign-off
Week 03
Typography System & Spacing Grid
Settled on four typefaces after testing six. The key constraint: Bebas Neue for display type renders beautifully at large sizes on OLED screens; the acid green on near-black produces an almost physical contrast. Space Mono was chosen deliberately for data/labels to create visual separation between "system information" and "human content."
→ Type scale · Letter-spacing map · 8pt spacing grid · Radius tokens
Week 04
Core Component Library
Built 18 components, each with full state coverage: default, hover, active, focused, disabled, loading, and empty. Started with the most-used component (the set log row) and worked outward. Every component was built from tokens, no hardcoded values anywhere. This was the week the system became real.
→ 18 components · State documentation · Component spec sheet
Tools Used
FigmaComponent library
FigJamMood board · IA
Figma VariablesToken management
Stark PluginAccessibility audit
NotionDecision log
42
Colour Tokens
4
Typefaces
18
Components
8pt
Grid Base
02b. Principles

Five principles that guided every decision

Before touching a single token, I wrote these down. They became the filter for every "should we or shouldn't we" conversation, with myself and eventually with the engineers.

🏋️
Gym First
Every decision is evaluated in the context of someone standing in a gym, one hand on their phone, between sets. If it doesn't work there, it doesn't make the cut.
Zero Decoration
Every visual element earns its place by communicating something. Acid green means "primary action or key data." Cyan means "AI-generated." Red means "attention required." Nothing is decorative.
🤖
AI Earns Trust
AI features have a distinct visual language (cyan, specific card treatment) so users always know when they're looking at AI-generated content versus their own logged data. Transparency is structural, not optional.
Contrast is Non-Negotiable
WCAG AA minimum everywhere, AAA for critical data like weights and reps. This isn't just compliance; gym lighting is brutal and accessibility under those conditions directly affects the core product experience.
🧱
Tokens Over Values
No hardcoded values anywhere in the system. Every colour, space, radius, and duration references a named token. This is the principle that makes the system maintainable and AI-tool-compatible.
+
More principles may emerge during screen design phase
03. The System

Colour, type, space, motion

The following documents the foundation layer of the APEX Lift design system. Each section shows the token, its value, its rationale, and how it renders in context.

03.1. Colour System
Background Layers
Base
#080A0F
App background
Surface
#0E1118
Cards, panels
Surface 2
#141820
Hover, nested
Surface 3
#1A2030
Modals, sheets
Brand & Semantic
Accent
#C8F135
Primary · protein
AI / Success
#3DFFC0
AI features only
Danger
#FF4D4D
Fatigue · errors
Warning
#FFB547
Recovery flags
Text Opacity Scale
Primary
100% · #F0EDE8
Headings, values
Secondary
60% opacity
Body copy
Tertiary
35% opacity
Labels, meta
Disabled
20% opacity
Inactive states
CSS Variables: Colour
--color-bg-base
#080A0F
--color-bg-surface
#0E1118
--color-bg-surface-2
#141820
--color-accent
#C8F135
--color-success
#3DFFC0
--color-danger
#FF4D4D
--color-warning
#FFB547
--color-text-primary
#F0EDE8
--color-text-secondary60% #F0EDE8
--color-text-tertiary35% #F0EDE8
--color-border-subtlergba(255,255,255,0.06)
--color-border-defaultrgba(255,255,255,0.10)
03.2. Typography System
Font
Bebas Neue · 400
Screen titles · Stats · Display
142g
UPPERCASE ONLY · NEVER USE FOR BODY COPY · IDEAL FOR OLED SCREENS AT LARGE SIZES
Font
DM Serif Display · 300/400/600
Section headings · Coach insights
Your strength is rising.
"Try 92.5kg on your next working set."
Font
DM Sans · 300–700
All body copy · Input text
Track your weights and protein in seconds. The AI learns your patterns so it can predict what you should lift next, based on your own history, not population averages.
Font
Space Mono · 400/700
Labels · Badges · Data values · Eyebrows
AI COACH · WEEKLY SUMMARY · JAN 13–19
SET 1 · 90KG × 8 REPS · RPE 7
03.3. Spacing (8pt Grid)
--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-5
20px
--space-6
24px
--space-8
32px
--space-10
40px
--space-12
48px
--space-16
64px
Border Radius
4px
Badges
8px
Buttons
12px
Cards
16px
Feature
24px
Sheets
Full
Pills
Motion Tokens
ease-out: cubic-bezier(0,0,0.2,1)
ease-spring: cubic-bezier(0.34,1.56,0.64,1)
ease-snap: cubic-bezier(0.25,0.46,0.45,0.94)
duration-fast: 120ms · duration-normal: 220ms · duration-slow: 380ms
03.4. Core Components
Buttons · All States5 Variants
Primary Actions
Secondary & Utility
SPEC
Font: Space Mono 700 13px uppercase
Padding: 13px/24px · Radius: 8px
Min height: 44px (Apple HIG)
Hover: translateY(-2px) + glow
Badges · Semantic System5 Types
Semantic Variants
Core Feature AI Powered High RPE Coming Soon
With Dot Indicator
Live Session AI Active
COLOUR RULE
Green → Primary / Progress
Cyan → AI-generated content only
Red → Fatigue / Error states
Neutral → Inactive / Future
Set Log Row: The Core Gym ComponentMost Used
All Three States · Completed · Active · Pending
1
Weight
85kg
Reps
8
= hold
2
Weight
90kg
Reps
↑ 92.5kg
3
Weight
Reps
↑ 92.5
INTERACTION NOTES
All primary actions in bottom 40% of screen (thumb zone)
Minimum tap target: 44×44pt across every interactive element
AI hint column: tapping accepts suggestion into weight field
Completed state persists, never auto-dismissed
AI Insight Cards4 Semantic States
Strength Trend
Bench press 1RM estimate up 4.2kg this month. You're in solid linear progression. Maintain the programme.
AI Protein Pattern
You hit your protein target 5/7 days. Missing on rest days. Try a shake reminder on Tue/Thu.
Fatigue Flag
RPE scores trending high (8.4 avg). Consider a deload week or reduce volume by 15%.
Inputs · All States5 States
Default
Focused
Error state
04. Decision Log

Five decisions that defined the system

Every significant design decision was logged with its rationale. This isn't just good practice; it's the difference between a portfolio piece and a portfolio story. Recruiters don't just want to see what you made. They want to know why.

01
The Decision
Acid green as the primary accent, not blue, not white
Chose #C8F135 as the single brand accent over more conventional choices like electric blue or pure white.
Why
Acid green hits maximum contrast on near-black backgrounds with far lower eye strain than white under gym lighting conditions. It also carries cultural associations with performance data, scoreboards, and biometric displays, all relevant to the fitness context. Tested against 6 alternatives across 3 lighting conditions.
02
The Decision
Cyan (#3DFFC0) reserved exclusively for AI content
A dedicated semantic colour for all AI-generated content, never used for any other purpose.
Why
User research showed that 67% of participants couldn't identify which recommendations were AI-generated versus user-logged data. A dedicated colour creates an instant, consistent visual signal without requiring users to read labels. Transparency baked into the design system at the token level, not added as a feature later.
03
The Decision
Four typefaces instead of the conventional two
Bebas Neue (display), DM Serif Display (headings), DM Sans (body), Space Mono (data/labels).
Why
Each typeface has a specific semantic role. Space Mono for all data creates an unconscious visual distinction between "numbers the user entered" and "copy the system generated." This matters most in the set log, where weight values (Mono) need to feel different from exercise names (Sans). Four fonts sounds like too many until you see what trying to do this with two fonts looks like.
04
The Decision
Dark-mode only in v1, no light theme
Ship with one theme. Not a toggle. Not "coming soon." One dark theme, done perfectly.
Why
A light theme would require re-validating every single colour combination and rebuilding many components. The gym-use context makes dark mode the overwhelmingly preferred choice for the primary persona. Maintaining two theme systems would dilute focus at exactly the stage where focus matters most. v2 can add a light theme when we have evidence users want it.
05
The Decision
Minimum tap target 44×44pt enforced at token level
Every interactive element in the system has a minimum height token that enforces the Apple HIG 44pt standard.
Why
In gym conditions (sweaty hands, distracted, standing) an interactive element smaller than 44×44pt has a significantly higher miss rate. I observed this directly in Round 1 testing: 6 of 8 participants accidentally tapped adjacent elements when buttons were 36pt. This isn't a nice-to-have. It's a core product quality metric.
05. Roadmap

What comes after the system

The design system is the foundation. Here's what I'm building on top of it, and in what order. Each phase depends on the previous one being solid.

Phase 01 · Complete
Discovery
User interviews, competitive audit, persona synthesis, HMW questions, design principles.
Phase 02 · Now
Design System
Colour tokens, typography scale, spacing grid, component library, motion tokens, accessibility audit.
Phase 03 · Next
Screen Design
9 core screens built from the design system. Today, Log, Nutrition, Progress, AI Coach, and flows between them.
Phase 04
Prototype & Test
Interactive Figma prototype. 5 moderated usability sessions. Iteration round on top findings.
Phase 05
Final Case Study
Complete portfolio documentation with research, screens, testing findings, metrics, and reflection.
The screen designs will be better because this system exists. That's the point of doing it in this order.
Following Up Soon
9 App Screens
Today dashboard, active session, nutrition log, progress charts, AI coach panel, exercise detail, food log sheet, onboarding, settings, all built from this system.
Following Up Soon
User Testing
5 moderated sessions with gym-goers, not general usability panellists. Testing the active session flow and protein logging feature as primary tasks.
Following Up Soon
Lovable Build
A working prototype built in Lovable using these design tokens, with real Supabase data storage and OpenAI API integration for the NL food logging feature.
Systems thinking.
Screens coming soon.

Currently open to senior product design roles focused on AI, systems design, and complex product challenges.

Business Workspace Smart Forms × CRM APEX Lift
Get in touch →
← Smart Forms × CRM All Projects →