Design system · Tokens

Vellumwire DS: A token system where each client changes one layer

System

Every new client started by rebuilding what already existed.

Each project began with a component library rebuilt from a blank file, even when the logic hadn't changed. The real cost showed up at handoff: new names to interpret, new spacing to check, undocumented edge cases. What was missing was a layer between component and brand.

Role
Product Designer
Type
Internal design system
Origin
Instivo, 2023; now the base of every Vellumwire build
Team
Afonso, implementation and hosting

Architecture

Core, Palette, Brand and Semantic

Structure stays fixed. Client decisions live in Brand, and components only read Semantic.

Core, Palette, Brand and Semantic layers, each referencing the one below
Open full size

Palette

Color ramps built ahead of any client

Every ramp follows the same 25 to 950 structure, so branding a client means mapping its colors onto ramps that already exist. Seven of the eight ramps, one per role:

Seven color ramps from 25 to 950, each mapped to a brand role
Open full size

Brand

The same components under three brands

A card, a button, an input and badges under three client brands. Ramp, typeface and radius change, and the component code stays the same.

The same components rendered under three fictional brands
Open full size
Three phones showing the same app in three different brands
Northwind, Clearwater and Saffron: three products, zero component changes.

Components

Component states

Buttons, form controls and feedback, each with its variants and states, rendered from the same code under three brand layers.

Seven button states in three brands
Open full size
Input states, checkbox and toggle in three brands
Open full size
Status badges, alert, tabs and avatars in three brands
Open full size

Semantic

Components use role names like border.error

border.error means the same thing whatever ramp a client picks. A partial view of the dark mode set:

Semantic color tokens in dark mode and the brand tokens they resolve to
Open full size

Responsive

Breakpoints were in the tokens from the start

Size and type tokens resolve per breakpoint from the start. When Instivo needed a mobile stock view mid-project, it consumed the same tokens.

The same layout resolved for desktop, tablet and mobile
Open full size

In production

In production since 2023

The architecture started on Instivo in 2023, where it absorbed a mobile view that was never in scope. It is now the base of every Vellumwire build, which Afonso implements and hosts.

  • 4layers: Core, Palette, Brand, Semantic
  • 8color ramps built before any client
  • 1layer touched to re-theme a project