jasmine chou
Kiwi Design System banner — the six-hue token palette standing as tonal columns on kraft paper, with UI components floating between them and cursors labelled eng, design, and prod.

Kiwi Design System

Timeline
Spring 2022 – Winter 2024
Role
UX Designer
Client
Risk and Safety Solutions
Tools
Figma, Storybook

The Brief

Rearchitecting the RSS UI infrastructure for long-term scalability

To build software that keeps people safe on the job, our internal product teams need to work quickly and stay aligned. However, as our suite of safety applications grew, keeping our design documentation in Zeroheight synced with actual production code became a major headache for both designers and engineers.

To fix this, I led the migration of the Kiwi Design System over to Storybook. Our goal was to move away from static guidelines and create a single, living source of truth. By auditing our library and building reusable, scalable components, we closed the gap between design and engineering — ultimately saving development time and ensuring a more consistent, reliable experience for our users.

Context

Discover & Define

I wanted to understand where things were breaking down, for both our internal teams and our customers. The designer before me had kept all the guidelines and best practices in Confluence, so a big part of this was going through that backlog piece by piece: keeping what still held up, and cutting what had gone stale as the components changed.

Understanding people and scope

In the 120-people company, I had the opportunity to conduct internal interviews, gathering data from developers, QA leads, and product owners to understand what their pain points were. I worked with the customer-facing teams to understand what were frequent issues our clients brought up.

“There’s always inconsistency across screens, across products. It’s not even just our legacy apps, it’s our current products. When our clients ask or point it out, I don’t know what to say at times.”
Customer success team member
“We are looking to the design team to provide clear guidelines on different states of any component, and to account for edge cases.
Full-stack developer
“I’m not sure which asset to use at times, so I often feel like I have to wait for a team meeting for me to float up my questions.”
UX designer from Product A

Process

How might we

create a sustainable design system that is applicable for all the products, both legacy and current?

How might we

deliver a clear guideline to developers so that we may limit misalignment and miscommunication between design and dev teams?

How might we

organize, structure, and publish the design system for easy visibility and readability?

The Solution

Foundations: one source of truth

The system starts with foundations that designers and engineers could pull from without guessing.

Color: a six-hue palette (blue, orange, green, red, purple, plus a true gray), each built as a full tonal ramp so every UI state has a defined step. Contrast was tuned at the token level — the darkest orange was pushed to 9E5A00 so it stays accessible against lighter tints.

Type: a modular scale named the way developers actually use it, each step with matched line-heights across regular, medium, and bold. Naming tokens the way engineers already think meant they could read a spec and know exactly what to write.

Structure: spacing, radius, and elevation each followed documented rules with a fixed max content width, so every surface felt part of the same system. That alignment was the whole point: closing the gap between design and code.

Kiwi Design Tokens sheet — colour primitives across six hues plus white, a typography scale, spacing steps, and radius values.
Tokens in practice — buttons, alerts, a focused form input, and status badges, each mapped back to the primitive palette.

A component library: built for reuse

With the foundations in place, I audited the existing UI and rebuilt it as a library of reusable, documented components: text fields, dropdowns, checkboxes and radios, toasts, tooltips, modals, status chips, navigation, and file upload.

Each was designed with its full range of states and edge cases, the exact gap engineers had flagged, so a component behaved predictably wherever it appeared. We built in Figma first to align on the visuals, then I worked with the front-end team to make sure the tokens and specs carried through into code.

Governance: a maturity scale to keep it alive

A design system only works if people trust which parts are safe to use. I introduced a component maturity scale so anyone, designer or engineer, could read a component’s status at a glance.

Each component moved through a defined lifecycle: Proposed, Candidate, Available, Deployed, Best Practice, and Sunset, with clear criteria for each stage. It turned Kiwi from a static library into something that could grow and retire pieces on purpose, without breaking the products that depended on it.

Component Maturity Scale — Use, Use with caution, and Don't use statuses across a six-stage lifecycle from Proposed to Sunset.

The Outcome

Release

The product was merging into one global platform, and Kiwi’s components went with it — with adoption ongoing. All eight development teams pull components from Storybook rather than rebuilding their own.

Legacy products were a deliberate non-goal. They were in upkeep mode, so we focused Kiwi on the current platform instead of retrofitting products that weren’t moving forward. Scoping legacy out wasn’t a compromise we settled for — it’s what let a small team ship a system the whole company could actually adopt.

Accessible from the start

We followed WCAG 2.1 while designing components, not after — contrast was tuned at the token level, and I worked alongside one of our QAs to run checks on colour contrast, screen reader compatibility, focus visibility, and readability before the rollout. The palette evolved with those checks: specific hex values were pushed darker so real pairings pass, with the reasoning written down.

Project Learnings

1. A design system is not a deliverable.

I used to think a design system was a deliverable, and that we’d be done when the components existed. We weren’t. Instead, a design system is a product, and the library needs a way to track what’s safe to use — otherwise it drifts right back into the inconsistency it was meant to fix. The governance work turned out to be as much a part of the system as the components themselves.

2. Documentation has to live where the work happens.

We watched beautiful guidelines rot in Zeroheight before we learned this. One living source of truth next to the code beats polished documentation nobody can rely on — it’s not close.

3. Name things for the people who use them.

Does it really matter what our customers call them if our internal teams aren’t sure themselves? Tokens named the way engineers already think meant alignment stopped being a meeting and started being automatic. I learned to design for the person consuming the system, not just the end user of the product.

Wanna see more?

Want to hear more about how I ended up enjoying working in occupational health and safety? Not your typical mid-20s passion, but I’m more than happy to chat more about how I got here and my process over a call. Reach out to me at jasminevc99@gmail.com.