Multi-Theme Design System

Designing for Scalability Before It Breaks

Overview

Goal

To prove that a token-based design system can support unlimited themes across brands, modes, and platforms without redesigning components or adding manual developer work.

Why this matters

Many teams discover months too late that their token structure doesn’t scale. This project was designed to avoid that failure upfront and serve as a repeatable blueprint for real-world teams.

The Core Question

This project answers that question through:

How do you build a multi-theme design system that remains flexible, scalable, and automated—without discovering structural flaws after months of work?

  • A tested token architecture

  • A real Figma → code pipeline

  • Custom tooling to remove human error

  • Clear rules for designers and developers

What “Multi-Theme” Means in This System

This system supports independent, combinable themes, allowing teams to mix options freely without breaking components.

Supported Theme Dimensions

  • Brand: Diamond, Amber, Opal

  • Color: Light, Dark

  • Language: English, Arabic

  • Typography: Serif, Sans-serif

  • Density: Comfortable, Compact

  • Radius: Square, Round, Pills

  • Shadow: Flat, Subtle, Default, Raised

  • ✅ Any combination works

  • ✅ New themes can be added

  • ✅ Components remain untouched

  • ✅ No extra developer work required

Brands Theme

Diamond

Amber

Opal

Colors Theme

Light

Dark

Language Theme

English

Arabic

Typography Theme

Serif

Sans Serif

Radius Theme

Square

Round

Pills

Density Theme

Comfortable

Compact

Shadow Theme

Flat

Subtle

Default

Raised

My Role

Leading the System

This project was built as part of a design tokens bootcamp, where I intentionally took on all roles to ensure the system could be taught, repeated, and validated end to end.

  • Led the design system strategy

  • Defined the token architecture

  • Owned naming, theming, and workflow

  • Designed the Figma → code pipeline

  • Built automation tools

  • Validated the system with developers

Step 1 — Understanding Components from a Front-End Perspective

Before defining tokens, I studied:
  • The existing component code library

  • How components consume values in code

  • Which values are hard dependencies vs configurable

Why this matters
  • If tokens don’t match how components are built in code, automation will always break.

  • Tokens were treated as API contracts, not visual variables.

Step 2 — Defining What Changes vs What Stays the Same

A critical early exercise

What changes between themes?

All colors change based on "Brand theme" and "Color Theme"

Font family, Font size, Font weight and Line height are change based on "Language theme" and "Typography theme"

Direction, Text content, Border width right and left are change based on "Language theme"

Density theme control all the spacing "Padding, Margin, Gap"

Radius theme only control "Border Radius"

Shadow theme control the shadow style "X, Y, Blur

What never changes?
  • Component structure

  • Layout logic

  • Interaction behavior

  • Size (Width, Height), and Opacity

This can be different for other projects
  • Maybe some colors stays same for all brands

  • Maybe some spaces stays same for all themes

  • Maybe some spaces change based on breakpoints

Step 3 — Naming Is Not Cosmetic (It’s Structural)

A consistent naming system was mandatory.

Naming principles:
  • Meaning over appearance

  • Shared language between design & dev

  • Predictable hierarchy

  • Theme-agnostic tokens

This ensured:
  • Tokens remain stable over time

  • Designers can change decisions safely

  • Developers never need manual overrides

Step 4 — Token Levels: Why Three Levels Won

We tested 2-level vs 3-level architectures.

The final structure:

Primitive tokens

  • Raw values (colors, numbers, strings)

Semantic tokens

  • Meaningful roles (background, text, border)

Component tokens

  • Component-specific mapping

Why not 2 levels?
  • Change Design decisions would force manual developer changes

  • Automation would break when designers reassign intent

Why 3 levels?
  • Clear separation of concerns

  • Safe design iteration

  • Full automation from Figma to code

Step 5 — Token Architecture Is the Most Important Decision

We evaluated multiple architectures using success criteria:

Success Criteria
  • Can add a new theme without touching components

  • Can change design decisions without breaking code

  • Can scale across platforms

  • Can be understood by new team members

We rejected architectures that:
  • Coupled themes to components

  • Mixed semantics and values

  • Required manual mapping in code

Step 6 — Pilot Test: Proving the System Early

Failure here would have stopped the system entirely.

Instead of building everything:
  • We chose one small component

  • Planned tokens

  • Assigned variables

  • Defined theme structure

  • Exported to code

  • Tested in the browser

This validated:
  • Flexibility

  • Scalability

  • Automation

  • Developer experience

Pilot test examples
  • Started with very small component first

  • Then we scale to other small component

Step 7 — Bridging Figma and Code (The Hard Part)

The Problem
  • Time consuming while planning, creating the tokens

  • Naming token is hard

  • Existing plugins generated unreliable CSS

  • Platform differences required manual fixes

  • Variable types weren’t handled correctly

  • No free tools to manage the themes in code

The Solution

I built custom tools:

Helping the community

Step 8 — Testing & Validation

The Problem
  • Tested in Figma

  • Tested in the browser

  • Added new brands and modes

  • Switched themes with zero refactoring

  • Verified automatic code updates

Testing on Figma
Testing on the browser

Results & Impact

  • Theme creation time reduced from days to hours

  • 100% automated code generation

  • Added 5 new brand themes without touching components

  • Designers work independently from developers

  • 80% faster design-dev handoff

  • Consistent UI across platforms

  • Reusable blueprint for future systems

Lessons Learned

  • Token architecture decisions compound over time

  • Naming is a system decision, not a preference

  • Pilot testing prevents months of wasted effort

  • Automation is the only way to scale themes

  • Design systems are infrastructure, not assets

Final Thought

This project isn’t just a design system.

It’s a tested process for building scalable, multi-theme systems that survive real-world complexity.

Deep Dive (Coming soooon)

For those who want full details about "Components, Tokens Planning, Theme Structure, and Documentation: