I’ve been refining lightweight design systems for years, and one recurring truth keeps surfacing: when a single designer owns the UI library, simplicity wins. You don’t need a sprawling token platform or a dedicated engineering team to get consistent, flexible components. What you do need is a small, well-documented set of tokens that live in both Figma and CSS — easy to update, easy to understand, and easy to ship. In this piece I’ll walk through a practical approach I use to build a component token system that a single designer can maintain.
Why a minimal token system?
Design tokens are powerful, but they can also become an overhead. When I start a new product or refactor an existing one, I ask: what’s the smallest set of tokens that solves most consistency problems without becoming a chore to update? The answer usually includes color, spacing, typography, and a few component-specific tokens (like radius and elevation). Keep tokens focused on decisions you reuse — not every micro-variation.
Principles that guide my approach
Core token categories I use
Naming tokens for a single maintainer
Names should communicate intent. I prefer semantic names like bg-surface over gray-100. Why? When you’re the only person touching the library, you’ll thank yourself later when a color role changes — you can change bg-surface without hunting down every usage of gray-100.
Examples I commonly use:
How I structure tokens in Figma
Figma’s styles are excellent for storing tokens. I create a single “Tokens” page in my file and group styles by category: Colors, Text, Effects, and Grid/Spacing. For maintainability:
Translating Figma tokens to CSS
The process I follow is straightforward and script-light. I prefer a workflow that scales manually without heavy toolchains, but also lets me script exports when needed.
/* CSS variables */
--color-bg-surface: #ffffff; --color-text-primary: #111827; --type-md: 16px;
Store this CSS in a single file (e.g., tokens.css) that gets imported into your component styles. This makes updates atomic.
Practical CSS patterns I rely on
I use CSS custom properties and a utility layer. Here are patterns that help keep the system minimal and easy to maintain:
Example mapping: Figma -> CSS -> Component
| Figma | CSS Variable | Usage |
| Color / Primary / Base | --color-primary | button background, link color |
| Type / md | --type-md | body, small headlines |
| Spacing / 8 | --spacing-8 | component gap, padding |
Keeping Figma and CSS in sync
Two practical approaches work depending on how much automation you want:
Versioning and backward compatibility
When you’re the only maintainer, it’s tempting to refactor tokens frequently. I recommend a simple versioning policy:
When to add component-specific tokens
Only add them when two or more components share the same tweak. For example, if buttons, chips, and badges all need a specific small radius, promote that radius to --radius-sm. If just one component uses it, keep it local to the component CSS until a pattern emerges.
Documentation that actually gets read
Long READMEs are tempting but rarely consumed. I keep documentation practical and short:
Maintenance routine for a single designer
My weekly routine is simple and sustainable:
Building a lightweight component token system isn’t about exhausting coverage — it’s about creating a dependable backbone that reduces decision fatigue and speeds up delivery. Keep tokens semantic, minimal, and well-documented in both Figma and CSS. With the right habits, a single designer can maintain a robust system that scales with the product without turning into a full-time job.