DESIGN SYSTEM | FIGMA | REACTJS | STORYBOOK

DESIGN SYSTEM | FIGMA | REACTJS | STORYBOOK

From Figma to GitHub: Building a Scalable Design System with Claude Code

From Figma to GitHub: Building a Scalable Design System with Claude Code

TL;DR – How I turned a 136-component Design System kit into a versioned, installable React library – with Claude doing the design-to-code translation. Airtight. Shipped.

Aug 24, 2026 | 10 min read

Say it with me

Say it with me

AI is as good as the data I feed into it.

It took me 8 months to build and adopt the NUU Design System on

but let's blow past it.

While the design system was built to ensure scalability and consistency on the designs as the team grew, there was a huge gap…

THE PROBLEM

Figma Dev-mode is good, but it still requires time from the devs to manually implement it. We didn't have a separate design-system repo on github; or Frontend Engineers. My tokens and components lived only in Figma, so translating a screen into code meant manual re-implementation every time - with no guarantee it matched.

At 136 components and growing across parallel branches, I knew that gap would only compound: the bigger the file got, the more expensive every hand-off would become.

GOALS

Why do I want to build this?

01 SSOT

I needed a single source of truth for tokens (Colors, Typography, Logos, Spacing) that every component reads from

I needed a single source of truth for tokens (Colors, Typography, Logos, Spacing) that every component reads from

02 Scalability

I wanted it installable like any real npm package, not a folder devs copy-paste from. The fixes flow two-way; Design & Code

03 AI-First

I didn't have a dedicated frontend team yet - I had to build this myself, using Claude as my technical multiplier

THE WORKFLOW ARCHITECTURE

Systems Thinking: How I Structured the Design System

ONE SHARED SYSTEM

Figma <-> code

01 / CONFIG

Colors, type & logos

shared primitives underneath everything - every branch and every component pulls from this layer rather than defining its own values.

02 / BRANCH

Branch 1

Branch 2

Branch 2

Parallel work, reviewed together

03 / MASTER

Master file + code vocabulary

I mapped Figma variant names directly to React prop names; never translating vocabulary between design and engineering.

I used Figma MCP to read design context directly off selected nodes instead of manually transcribing values myself.

  • I used Code Connect to map Figma component properties (variants, instance-swap slots, booleans) to real prop names in my codebase, so pulling a component gave me working props like <TextField icon={<SearchIcon />} /> instead of hardcoded, uneditable markup.

  • I used Claude Code to assemble the actual component files, keep Storybook stories current, and package the library (Vite build, dual ESM/CJS output, proper exports map) so it installs like any other npm dependency.

  • I built in a feedback loop - code fixes flowing back into the master file - which is the part most handoff pipelines skip. It turned this from a one-way export into an actual two-way system.

DECISIONS & TRADE-OFFS

It's not a perfect world…but we can get close :)

Decision

Why I made it

Tradeoff I accepted

Decision

Decision

Plain CSS custom properties

Why I made it

Why I made it

Matched my token-first mental model; framework-agnostic for whatever the eventual app team uses

Tradeoff I accepted

Tradeoff I accepted

More manual work per component than utility classes

Decision

Decision

Branch-based Figma structure over one flat file

Why I made it

Why I made it

Let me scale 136 components without a single unreviewable file

Tradeoff I accepted

Tradeoff I accepted

Added merge/reconciliation overhead between branches

Decision

Decision

Packaged as an installable npm module vs. a components folder to copy

Why I made it

Why I made it

Gave me a real versioned single source of truth, updatable via npm update

Tradeoff I accepted

Tradeoff I accepted

Requires the dev team to adopt a package workflow instead of copy-paste

Decision

Decision

Sampled key states over every variant × state combination

Why I made it

Why I made it

Got a usable v1 shipped faster

Tradeoff I accepted

Tradeoff I accepted

Left explicitly flagged gaps for me to close later

IT COMES TOGETHER

Same component; different boards

I found Claude fastest at the translation - token values, boilerplate component structure, packaging config. But anywhere I hadn't yet formalized a property in Figma (like icon slots on TextField), the pipeline could only guess; deciding whether to accept that guess or go back and define a real Figma property was still a call only I could make, not something the tooling could resolve for me.

Figma Component

The Code

Storybook UI

PeerConnect

Nuuvia

Threads & Beads

I hope I left you with some curiosity…

Have an Idea? Let's Collab!

Made with lots of

by Prachee

2026