04 Product Design·2025·lilaquadrat

Design System

A production design system where Figma and Vue share the same source of truth. No handoff. No drift.

Role
Product Designer
Domain
SaaS · Design Tooling
Tools
Figma · Vue · Claude Code · Figma MCP
Type
Shipped product
Source
Figma
Variable Collections
Light + Dark mode
32 semantic color tokens
Spacing · Radius · Typography
Bridge
Design Tokens
CSS custom properties
Token names match Figma variables
No hardcoded values, anywhere
Single source of truth
Output
Vue
16 component sets
Variant-bound in Figma
Generated by Claude Code via MCP
Audited on a schedule
01
Problem

Broken workflow

lilaquadrat builds content management tools for creative agencies. As the product scaled, the gap between Figma and the Vue codebase grew. Design decisions weren't reaching production accurately and there was no structured way to catch the drift.

01
No shared token layer
Colors and spacing were hardcoded across Vue files. Any brand change required manual updates in dozens of places – tedious and error-prone.
02
Design–code drift
Figma was used for handoff, not as a living reference. The codebase gradually diverged from design intent with no mechanism to detect it.
03
No governance
Updates traveled through Slack messages that got buried. There was no structured process to know how far things had drifted or who was responsible for keeping them aligned.
02
Foundations

Tokens first: everything follows

Before a single component was built, the token architecture was defined in Figma as four variable collections. Every color, spacing value, and radius in the system references a variable. No hardcoded values, anywhere. Change a token in Figma and the change propagates everywhere it is referenced in code.

Color 32 semantic tokens · Light + Dark mode support
Spacing 4px base unit · 22-step scale
Radius 7-step scale · radius-md (4px) applied universally
Typography Size scale + weight tokens · no hardcoded values
Four Figma variable collections forming the token architecture – Color, Spacing, Radius, and Typography
Figma variable collections · four collections · single source of truth
32 semantic color tokens with Light and Dark mode variants defined in Figma
Color tokens · 32 semantic tokens · Light and Dark mode
03
Components

A library, not a collection of frames

Every component is a Figma ComponentSet with named variant properties, variable-bound fills, and documented states. No loose frames, no static mockups. Each component in Figma has a direct counterpart in the Vue codebase, generated and kept in sync through Claude Code reading design intent directly from the file.

16 component sets, each in a labeled section frame with a full variant matrix. Every state documented. Every fill token-bound. No ambiguity in handoff – because there is no handoff.

Foundation tokens and base styles defined in Figma as the grounding layer for all components
Foundations · base tokens · grounding layer for all components
16 component sets in Figma with variant matrices and labeled section frames
Component library · 16 component sets · variant matrices · labeled sections
04
Workflow

Design and code, always in sync

A bidirectional workflow between Figma and Vue. Claude Code reads design intent directly from the Figma file via MCP, generates Vue components with CSS variables mapped to Figma token names, and syncs changes back. No handoff step. No redlines. No translation layer between design and code.

01
Design Tokens
Token architecture defined in Figma as variable collections
02
Claude Code
Reads Figma via MCP, generates Vue components from design spec
03
Real App
Components tested in context, edge cases surface, refinements happen
04
Figma MCP
Design updates pushed back to Figma, keeping documentation current
05
Governance Audit
Scheduled check: Figma tokens vs code, component coverage, drift report
Claude Code reading design intent directly from the Figma file via MCP
Claude Code · reading design intent · directly from Figma via MCP
Generated Vue component with CSS custom properties mapped directly to Figma token names
Generated Vue component · CSS vars mapped to Figma token names · no manual translation
05
Governance

A repeatable audit, not a Slack message

Building the system was one challenge. Keeping it accurate as the product evolved required a different approach. Instead of informal communication that gets buried, a structured audit runs on a schedule – three checks, each with a clear pass or fail.

01
Token alignment
Figma variable names checked against CSS custom properties in the codebase. Any mismatch is a drift warning.
02
Component coverage
Every Figma ComponentSet verified against a Vue file in /src/components/. Missing components surface immediately.
03
Naming drift
Variant property names in Figma checked against CSS conventions in code. Consistency enforced at the naming level, not just the visual.
Design system audit showing token alignment, component coverage, and naming drift checks
Governance audit · token alignment · component coverage · naming drift

A design system that doesn't drift. Token-bound in Figma, enforced in code, audited on a schedule.

32 tokens Semantic color tokens · Light + Dark
16 sets Component sets · variable-bound fills
0 steps Manual handoff · no redlines · no translation