Home / Articles / Design Systems

Design Systems

Brand systems that scale: tokens, not screenshots

How to hand a client a brand that survives contact with real software — variables, not static mockups.

By Hagumi Lab· Jan 2026· 9 MIN READ ·Leer en español →
A systematic grid of cream paper type-specimen cards and color swatch chips, mostly neutral with exactly one teal chip standing out.

TL;DR — A brand delivered as a 60-page PDF and a folder of flat mockups is dead on arrival. Ship the brand as a token system instead — color, spacing, and type expressed as named variables that map 1:1 into code and Figma. Tokens are the contract between design and engineering. Everything else is a screenshot that drifts the moment real software touches it.

We’ve watched it happen too many times. A studio ships a gorgeous brand book. Six months later the live product looks nothing like it. The blue is three shades off, the headings use the wrong scale, the buttons have invented their own padding. Nobody was malicious — the guidelines simply had no enforceable connection to the code. A PDF can’t be imported. A screenshot can’t be a source of truth. The brand rotted because it was never systematized in the first place.

Why static brand guidelines rot

Static guidelines describe a brand the way a photograph describes a person: accurate the day it was taken, increasingly wrong afterward. The problem is structural, not cosmetic.

  • They’re prose, not data. “Use our primary blue generously” is a sentence a developer has to interpret. Interpretation is where drift begins.
  • They can’t be referenced. No build step reads a PDF. The values get re-typed by hand into CSS, into a component library, into someone’s memory — and each copy is a chance to diverge.
  • They have no single owner. When the brand updates, the PDF, the Figma file, and the codebase all change independently. Three sources of truth means zero sources of truth.

A brand that lives only in documents is a brand that exists everywhere except the place customers actually see it.

Design tokens as the contract

A design token is a named decision. Not #0F766E scattered across forty files, but color.brand.primary defined once and referenced everywhere. The name carries intent; the value is just an implementation detail that can change without anyone hunting through stylesheets.

A token isn’t a color. It’s a promise that this color means the same thing in Figma, in the marketing site, and in the production app — forever, until you deliberately change it in one place.

The win is that tokens are data. They can be exported, imported, validated, diffed, and versioned. When you express your color, spacing, and type scales as tokens, the brand stops being documentation and becomes infrastructure.

:root {
  /* Color — semantic names, not raw hex */
  --color-brand-primary: #0f766e;
  --color-text-default: #1c1917;
  --color-surface: #faf8f5;

  /* Space — one ratio-based scale, not magic numbers */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-4: 1rem;
  --space-8: 2rem;

  /* Type — a scale, not a pile of one-off sizes */
  --font-size-body: 1rem;
  --font-size-h2: 1.5rem;
  --font-size-h1: 2.25rem;
}

That’s the whole idea. A button reaches for --space-2 and --color-brand-primary. A heading reaches for --font-size-h1. Nobody types a hex code or a pixel value by hand, so nobody can quietly get it wrong.

Theming and modes come for free

Once the brand is a set of variables, light/dark modes and white-label theming stop being separate projects. You don’t rebuild components — you swap the values behind the same token names. Dark mode is one block of overrides:

[data-theme="dark"] {
  --color-text-default: #f5f5f4;
  --color-surface: #1c1917;
}

Every component that referenced --color-surface adapts instantly, because it never knew or cared what the actual color was. Same mechanism powers a client running two sub-brands off one codebase, or a seasonal refresh that ships in an afternoon instead of a sprint. The structure pays for itself the first time the brand needs to be in two states at once.

Handoff to code (and Figma) without a translation layer

Here’s the part that makes designers and engineers stop fighting: Figma Variables and CSS custom properties are the same shape. A token named color/brand/primary in Figma becomes --color-brand-primary in code. The mapping is mechanical, which means it can be automated — tools like Style Dictionary or Tokens Studio export one canonical token file to CSS, Tailwind config, iOS, Android, whatever the targets are.

The handoff stops being a translation and becomes a sync. When we deliver a brand this way:

  • Designers work in Figma against the same variables that ship to production.
  • Engineers consume tokens, not screenshots — there’s nothing to eyeball.
  • Updating the brand means editing the token source and letting it propagate. One change, every surface.

No more “make it match the mockup.” The mockup and the code read from the same well.

The takeaway

When we hand a client a brand, the deliverable isn’t a beautiful PDF — it’s a versioned token system, mirrored in Figma and ready to drop into code. The PDF still exists, but it’s a map of the system, not the system itself. The system is the variables.

If you’re commissioning a brand, ask one question before you accept delivery: “Can I import this?” If the answer is “it’s in the guidelines,” you’ve bought a screenshot that will rot. If the answer is “here’s the token file,” you’ve bought a brand that scales.

Written by Hagumi Lab

The engineering & R&D notebook of Hagumi Studio. We write what we learn building and self-hosting the tools behind our work.

HAGUMISTUDIO.COM · X · RSS

Stay in the loop

Get the Lab notes in your inbox.

One considered email a month — what we built, what broke, and what we’d do differently. No fluff.

No spam. Unsubscribe anytime · delivered by our self-hosted Listmonk.