WorkKUBRA Design System

KUBRA Design System From static library to dynamic, variable-driven system

How I made KUBRA’s enterprise design system dynamic and variable-driven for 8 products, 12 designers and 30+ engineers, cutting 128 banner variations down to one component along the way.

Client
KUBRA
Role
Co-founder
Type
Design system
Scope
Variables & tokens, Component architecture, Interactive prototyping, DesignOps, Team training
Year
2021–2026

Screens come from FusionDS, a rebranded copy of the system with sample data, to respect client confidentiality.

128 → 1
Banner variations replaced by one dynamic component
10 sec
To build a data table. It used to take 5–10 minutes.
40%+
Less prototyping time with interactive components
25%+
Faster handoff after the new UI QA process
Design system variable collections in Figma, overlapped by the single Info Banner component and its property toggles

01 · The challenge

One system, many products, many brands

In 2021 I co-founded KUBRA’s desktop design system, and later founded its mobile counterpart. It grew to serve 8 core billing and payment products, 12 designers and 30+ engineers, for utilities and enterprise clients across North America, each with its own brand.

Building components was the easy part. The hard part was keeping hundreds of them flexible, consistent and fast to use as the products, the brands and the team kept growing. My focus was to make the system dynamic: fewer parts, more options, and less manual work for every designer who used it.

02 · Foundations

Variables as the single source of truth

I introduced and orchestrated variables for colour, typography, corner radius, spacing and margins, organised into clear collections: primitive colours, semantic tokens, typography, UI elements, and a client configuration layer.

Modes switch the same design between light, dark and wireframe, and between client brands. In wireframe mode, radius and borders drop to zero and colours turn neutral, so one file serves both early UX and final UI.

Design system variables: the Colors-Primitive collection with light, dark and wireframe modes, alongside Client Configuration, semantic tokens, typography and UI element collections
Colour primitives with light, dark and wireframe modes, next to the other collections.
Client Configuration collection: brand colours switched per client, with mockup and wireframe modes
Client Configuration: the brand layer that switches per client.
UI Elements collection: corner radius and border tokens, set to zero in wireframe mode
UI Elements: radius and border tokens, zeroed in wireframe mode.

03 · Headline result

128 banners, one component

The system had 128 banner variations, many of them hidden inside variant sets, one for every mix of status, icon and content. I rebuilt them as a single component driven by advanced variables and component properties.

Designers choose a status, then switch the icon, title, extra content, hyperlink and close button on or off. The same approach now runs through badges, tabs and other components, and I trained the team to build this way.

128 banner variations became one component. There’s nothing to hunt for and nothing to keep in sync.

One Info Banner component showing error, neutral, success and warning states, with toggles for icon, title, extra content, hyperlink and close button
One Info Banner component: status, icon, content, link and close button are all properties.
The Info Banner in the design system file, annotated: 128 banner variations replaced by one component
The note in the system file: 128 variations into just one.

04 · Components

Fewer components, more flexibility

  • Variants with toggles. One master component shows or hides elements with boolean properties, instead of a separate component for every variation.
  • Responsive components. Components reflow to fit their container, so the same instance works from mobile to wide desktop layouts.
  • Interactive by default. Buttons and other controls ship with hover, click and mouse-out states already connected. Drop one into a prototype and it already behaves like the real thing. This cut prototyping time by at least 40%.
  • Prototyping with variables. Advanced prototyping with variables replaced duplicate screens for every state, saving screens and time.
Badge component with a Show icon toggle, icon swap and text property
The same pattern on a badge: one component, with a toggle for the icon and a swap for which icon.
The same address form component at two widths, with fields that reflow to fit
The same address form component at two widths.
Filter panel prototyped with variables: the product dropdown and each checkbox option use conditional click interactions
A filter panel prototyped with variables. Each option runs a conditional click interaction, so one frame covers every selection instead of a screen per state.

05 · Tables

From columns to rows: a table in 10 seconds

Tables used to be built column by column. Hover and selected states were painful, and each table took 5–10 minutes to build.

I rebuilt tables as rows with variants: header, row and cell variations with default, hover, selected and loading states built in. Then I built a Figma plugin that generates a table from the existing UX design. Once the header, row and cell variants exist, a complete table takes about 10 seconds.

Tables built from row variants: default, hover, selected and loading rows assembled into full tables
Row variants (default, hover, selected, loading) assembled into full tables.

06 · How the team works

Structure, status and quality

  • Templates and guides. I defined how pages and screens are laid out and organised, with page and section templates and a how-to guide. A plugin creates a new page with every section in place, and the spacing between status cards, screens, flows and sections already set.
  • Progress cards. Every flow carries a status card: Design in progress, In design review, Ready for approval, Done by design, In production. Anyone opening the file can see where the work stands.
  • UI QA, end to end. I designed the design inspection process from A to Z and the team adopted it. Each issue it caught led to a new step or an update to the process, which reduced defects and made handoff at least 25% faster.

See FusionX, the plugin suite I built to maintain the system

Five flow status cards: Design in progress, In design review, Ready for approval, Done by design, In production
The five status cards that sit at the top of every flow.

07 · AI in the workflow

Bringing AI into the design team

  • Prompted variations. I came up with a way to use the AI agent in Figma with specific prompts to generate component variations, instead of duplicating and editing by hand.
  • Figma Make skill libraries. I introduced the team to Figma Make and built libraries of skills for different uses, producing realistic, presentation-ready prototypes to replace the old prototyping method.
  • Claude MCP with Figma. I connected Claude to Figma through MCP and showed the team what it can and can’t do.
  • Teaching it. In the past year I ran 8 workshops for 22 people across UI, UX, UX writing, UX research and team leads, plus tutorials and 1:1 sessions with designers.
A prompt to Figma’s AI agent updates a date picker using its existing date variants: before and after
One prompt to Figma’s AI agent updates a date picker from its existing variants: dates 1 and 31 selected, 2–30 set to range, layout untouched.

08 · Impact

What changed

AreaBeforeAfter
Banner variations to maintain1281
Build a data table5–10 minutes~10 seconds
PrototypingA screen for every state40%+ less time with interactive components
Design-to-development handoffBaselineAt least 25% faster with UI QA
Rebrand a full project (with FusionX)Weeks~20 minutes
Team enablement—8 workshops, 22 people trained

Prototyping and handoff gains are conservative estimates.

Hiring a senior product designer? Let’s talk.