02 · The Library · Design Systems

Design
System.

A design system built at the right moment, shaped by real constraints, and deliberately compromised in ways that made it stronger. Not a Figma file that lived separately from the product — a shared foundation that two people actually shipped with.

Company
OneID®
Role
UX Designer
Timeline
2022 – Ongoing
Old Figma library vs new library
The
window

When I joined OneID, the product was one year old. The previous designer had built something functional — a basic Figma library covering colour, type, and a handful of components — but the product itself was fragile. One verification flow, hard-coded, embedded in an iframe inside customers' pages. No front-end developer. Every copy change was an engineering task that took weeks.

Two things changed when I arrived. The company had commissioned a rebrand from an external agency. And a front-end developer was being hired.

That combination created a narrow, specific opportunity: rebuild the design foundation properly, before the new brand landed and before an engineer arrived who would need something to build from. I moved on it immediately.
Tokens
first.

The foundation wasn't components — it was a decision about language.

I structured the token system in two layers. Primitive values first: the raw numbers and hex codes. Semantic aliases on top: names that described intent rather than appearance. action-primary rather than indigo-600. feedback-error rather than red-400. Typography followed the same logic — a size scale at the primitive level, named styles built on top so that heading-2 could change its underlying size without anything breaking downstream.

The reason for this wasn't aesthetic tidiness. It was anticipating a rebrand that was already coming, and a product I knew would grow.

Figma variables panel — primitive values and semantic aliases
Typography scale — size primitives and named styles

Spacing, border radius, and breakpoints followed the same pattern — defined as variables rather than magic numbers, so that when the front-end arrived, there was already a handoff layer waiting.

Spacing tokens
Shape tokens
The
iframe
call

The old product lived inside customers' iframes. They had no consistent way to embed it — mismatched fonts, broken responsiveness, accessibility unconsidered. Moving to a controlled environment (modal or new tab, configurable by the customer) was a backend request I immediately agreed with.

It gave us back control. It also unlocked something we hadn't planned for: standalone URLs that could be triggered by email or QR code, opening distribution channels that hadn't existed before. A structural decision with a longer tail than anyone anticipated.

Old — iframe embedded in customer page
New — modal / controlled environment
Layout
system

The verification journey runs on a single layout component with three states. Not three separate templates — one component that knows where it is.

Mobile is content-only. Tablet introduces a hero panel stacked above — the brand has room to breathe without competing with the task. Desktop splits them into columns: hero anchored left, content in a right-hand panel with adjusted padding.

The content section was designed to behave identically on mobile and desktop — same component, padding as the only variable — so anything built for one worked on the other without redesign.

Under the hood, this is three layout components spanning five breakpoints. Mobile (XS) is content-only — no hero, no chrome. Compact (S, M) introduces a small hero stacked vertically above the content. Expanded (L, XL) shifts to a two-column system: full hero pinned to the left, content wrapper to the right. The body content itself never changes — only the container around it does.

Components,
icons &
illustrations

Each screen component had defined properties — text content, show/hide toggles, variants for state — so that spacing and layout were decisions made once, not renegotiated per ticket.

I collected and rationalised an icon set, mapping it to MUI's library ahead of time. A small set of custom illustrations were built from scratch for the key moments in the verification journey.

Icon sheet — organised by category
Custom illustrations — set overview
The
MUI
moment

When the front-end developer joined, she wanted to build in Storybook using MUI — a library she knew well and could move fast with. My first instinct was to push back. My second instinct was to ask what the product actually needed.

The answer was speed. A system I owned alone and designed in isolation was worth less than a shared system we could both ship with.

So I adapted. I reconciled the colour tokens to MUI's theming system. I swapped some custom icons for MUI equivalents where they matched closely enough. In return, I gained something useful: mature table components, form patterns, interaction states — things I could apply our visual layer to rather than build from zero.

It wasn't what I'd originally intended. But it was the right call. The system became something two people actually used, not a Figma file that lived separately from the product being built.

Colour token mapping — semantic tokens to MUI theming system
Adapted MUI component — OneID visual layer
What it
enabled
Before
A copy change took weeks — it was an engineering task, not a design iteration. No loop, no measurement, no fast feedback.
After
Design. Ship in days. Measure for two weeks. Accept, revert, or keep iterating. The same calendar time that once produced a single header change now produces a full hypothesis cycle.
Process diagram — old vs new design loop

The system also became the foundation for everything built afterwards — the Self-Service Portal, the Management Console. New components were added as the product grew. Some were refined. None of it required a rebuild.

What I'd
do
differently

Visual accessibility was part of the process from the start — colour contrast checked at every design decision. Rigorous WCAG AA and ARIA auditing came later, as the product matured and compliance requirements sharpened.

If I were doing it again, I'd push for structured accessibility testing earlier — not as a retrofit when it becomes a requirement, but as a design constraint from the first component.

Get in touch
a.galvao@outlook.com
Next project
Self-Service Portal →