Giulia Bins

Work / Tradeverifyd

One design system, and the review that keeps it

The product had two design systems growing side by side and rules nobody checked. I organized them into one, set the foundations, and built DS Police, a design review that runs on every pull request so the system stays one.

Role
Staff Product Designer
When
June to October 2026
Product
Supply chain intelligence platform, B2B
Made with
Claude Code, Storybook, automated checks, an AI design reviewer

Note.The screens on this page are redrawn and simplified because of an NDA. Names, labels and data are fictional. The decisions and the reasoning are mine.

  • 39 of 41steps of the design system cleanup owned by me
  • 139 → 0design system violations, kept at zero
  • ~2,950pull requests reviewed by DS Police in five months
  • 3 → 1country selectors, now one family that works on Windows

Context

Tradeverifyd runs two products on one platform: the customer portal and an internal admin tool. The team worked with AI as an essential part of its process.

Each product had its own Button, Badge, Card, Table, Modal and empty state. Every pair came from a real moment where someone needed a piece and the existing one lived in the wrong place. The design rules lived in documents and in people's heads, so every screen drifted a little: a new shade here, a hand-made button there.

The team didn't use Figma. The platform changed so fast that any Figma file fell behind what was actually live, and a designer working there becomes the bottleneck. So I designed straight in the product with Claude Code, which also meant I could fix the system where it actually lives.

Part 1

Make it one

The problem

On October 15 we walked through the published Storybook, the team's catalog of components, and wrote down everything that was wrong: 26 separate cleanup issues, three different country selectors (two broken on Windows), and a catalog where the biggest group, 23%, was a demo app sitting next to real product components.

See real usage first

I mapped both systems by where each component was actually used. The customer portal's own Button had 29 uses, the shared one 24. Numbers like these turned a vague "let's consolidate" into a list we could put in order.

The customer portal's component wins. The admin tool adopts it. The duplicate is deleted.

One rule, 41 steps

That was the rule the team settled on, and I wrote the cleanup around it, 41 steps, 39 of them mine. When the admin version could do something the customer one couldn't, that ability moved over first, so nobody lost anything.

I restructured the catalog around what a component is, not which product it ships from: Brand Book, Foundations, Components. The demo app went behind a switch, hidden but not deleted. The Colors page reads the live styles, so it can't fall out of date.

Before
  • Components
  • Badge
  • Badge (shared)
  • Button
  • Button (shared)
  • Card
  • Country flag
  • Country scope select
  • Country select
  • Demo: chat page
  • Demo: report page
  • Demo: settings
After
  • Brand Book
  • Logo, voice, typography roles
  • Foundations
  • Colors, live from the styles
  • Type scale
  • Icons
  • Components
  • Pill
  • Button
  • Card
  • Country select
Redrawn. The catalog before (duplicates in red, demo pages in gray) and after, grouped by what a component is.

Merge, piece by piece

The admin tool now uses the customer theme. Three country selectors became one family. Admin lists got the shared empty state, checked in light, dark and on narrow screens. Button states and icons match across both products.

Every change went to me first as a before and after with real screens, before anyone else saw it.

Before

No teams yet

After

No teams yet

Teams show up here once someone in the account signs in.

Invite a teammate
Redrawn with fake data. An empty admin list before and after adopting the shared empty state.

Part 2

Foundations, decided on evidence

Type and color

I moved the product to Inter and shipped a nine-step type scale as tokens, each step carrying size, line height, weight and spacing, so every screen inherits it.

For color, I brought measured contrast instead of taste, and filed what was failing: a warning pairing at 1.85:1, an action blue below AA on the dark theme, nine controls with no hover at all. With that in front of us, the team decided: blue became the action color, so an action can never be mistaken for risk; the brand orange became identity only; warning yellow got brighter, with dark text instead of white.

ButtonRestHoverPressedDisabled
PrimarySearchSearchSearchSearch
SecondaryExportExportExportExport
GhostCancelCancelCancelCancel
DestructiveDeleteDeleteDeleteDelete
Redrawn. One button family with every state defined, action in blue.

Part 3

Keep it one: DS Police

Rules that check themselves

A design system only holds if something keeps checking it. So I put the rules where every change already gets reviewed: the pull request. DS Police started with 7 automatic checks: use the color tokens, use the real components, no one-off values. Before turning them on, I fixed every place that already broke them, 139 across 56 files, so the team started clean.

  1. A changeSomeone on the team proposes a change
  2. Design rulesColors, components and type, checked automatically
  3. AI design reviewReads the change against what the team decided
  4. Comment, then blockA note on the change. From October 6, it stops the merge.

Find what it wasn't checking

The color count stayed at zero, but only because color was all the rules looked at. So I audited 13 live screens the way a person sees them, not the code:

ScreenOff-palette colorsHand-made buttons
Assistant, search, monitoring, profile and help pages00
Supplier map03
Alerts020 of 48
Help docs, about 30 sub-pages012 to 15 per page

Zero violations didn't mean consistent. It meant unchecked.

Teach the reviewer the real system

The AI reviewer compared each change to a hand-written list of components. The list was out of date.

21components the reviewer knew about
123components that actually existed

I made the list build itself from the product. Then I added the checks for what the team had decided but nothing enforced: the type scale, where 408 one-off font sizes had piled up, and colors with different names but the same value, which is how 58 hover states showed no change at all. Each new rule started as a warning, with the condition to become an error written next to it.

Put design decisions in the review

The reviewer's instructions went from 9 rules to 19, carrying what our design meetings decided:

  • "Pill" is the only word for a status indicator. Badge, tag and chip are retired.
  • A pill is flat and never clickable.
  • Navigation is a link. An action on the same screen is a button.
  • A new component needs a story in the catalog.
Before
StatusSanctionsForced laborCustomsCleared
After
StatusSanctionsForced laborCustomsCleared
Redrawn with fake labels. Status pills before and after: flat, never clickable, readable contrast.

Make it count

For four months the checks only commented, and people could merge anyway. On October 6, 2026, at the product owner's request, breaking the design system started stopping the merge.

Not imported isn't the same as unused

A usage count said four components had no callers. One of them had zero imports and two hand-made copies around the product. Deleting it would have removed the only reusable version.

Warn first, then enforce

A rule that breaks everyone's work on day one gets turned off. So every rule started as a warning, and the reviewer stays quiet when a change only moves existing code.

Result

Two design systems mapped into 41 steps, 39 of them mine, most merged or in review by the end of October. Three duplicates already merged into one. A catalog organized by what things are, with its gaps visible: 48 of 123 components documented.

And a review that keeps it that way: about 2,950 pull requests went through DS Police in five months, 12 engineers cited it in their own work, and violations went from 139 to 0 and stayed there.

A design system is a set of decisions about who owns what, and it's only as consistent as what keeps checking it.

What I took with me: the hardest sentence was "the customer portal wins." The second hardest was admitting a green check only means something if you know what it looks at.