top of page
ChatGPT Image Jun 20, 2026, 12_56_49 AM.png

vela.

Design Systems · Token Architecture · B2B SaaS · Self-Initiated · 2026

Role: UI UX Designer

22 Components · 600+ Variants · Desktop

Duration: 3 Days

Tools: Figma

01 — THE HOOK

Three days. 22 components. 600+ variants.

Built twice — once for when it works,
once for when it doesn't.

​​Most of what makes a design system look finished is the version that performs well in a walkthrough: the dropdown opens cleanly, the KPI card shows a confident upward line, the table is full of rows that all loaded on time. Vela has that version — a complete B2B revenue intelligence system, tokens through templates, light and dark, built end to end on Figma's free plan.It also has the version most systems skip: what the dropdown looks like when the data behind it has gone stale, what the KPI card says when the feed disconnects, what the table shows when a search dead-ends. The first is the baseline — most systems get that far. The second is what's actually being tested here.

Escalation Montage.png

The version most systems skip — designed with the same rigor as the happy path.

02 — THE BUILD

The constraint came first.

Figma's free Starter plan caps Variable collections at a single mode — real Light/Dark theming needs a Professional plan. Confirmed by testing directly: tried adding a second mode, watched it lock immediately. Vela's three-layer token system — primitive, alias, component — was built on ordinary Styles instead: identical alias names holding different values depending on which mode's Style page they're pulled from.

Light theme styles.png
Dark theme styles.png

bg/surface, text/primary, brand/primary — same names, different values, same logic underneath.

The same instinct — solve it properly, not quickly — showed up everywhere else in the build.

The Dropdown

Not one component with an open-and-closed state. Three: a Trigger, a Menu, and an Open variant that composes them together — the same pattern mature systems like Figma's own run on. The cost of the architecture showed up later, but it meant every fix updated downstream instead of needing a patch.

Dropdown - Light.png
Dropdown - Dark.png

Three components pretending to be one control.

The Modal

The first pass looked, by its own designer's word, like last decade. The rebuild borrowed from how Linear and Stripe handle the same problem. What stuck is the header tint — the colour registers before the title text does.

Modal - Light.png
Modal - Dark.png

Red for destructive. Amber for urgent. Blue for a neutral.

The Icon Button

First build had 192 variants on the assumption that instance-swap properties cascade to all variants. They don't. Rather than fixing 192 individually, the architecture changed: Icon Button defines size, padding, colour, and state. The icon is a separate instance placed on top, swapped independently.

Icon Buttons - Light.png
Icon Buttons - Dark.png

Out: 192 individual fixes. In: one contract change.

The Data Table

Most tables build states at the row level. Vela's are built at the cell level across all six cell types. One rule applied without exception: number cells are right-aligned — the same convention spreadsheets and financial tools have used for decades.

Data Table - Light.png
Data Table - Dark.png

Built at the cell, not the row. The table is just where the cells happen to be standing.

Components page.png

The same standard, applied 22 times — light and dark both.

03 — THE THESIS

The part most systems leave for later.

Calibrated Urgency.

Most design systems stop at error states — a red border, a generic "something went wrong," done. It's not enough once the product is something people check every day, where a number that hasn't updated in an hour and a feed disconnected for six hours aren't the same emergency and shouldn't look like one. Vela handles that with three tiers — Informational, Warning, Critical — built so each step up is a gear shift, not a louder version of the last alarm.

Banner - Light.png
Banner - Dark.png

Tier 1 notes. Tier 2 warns and offers a way out. Tier 3 states the fact and offers nothing — because there's nothing to click.

Three surfaces. One framework.

Failure in a product like this doesn't have one shape. It shows up at three different levels.

The input level

A required field left empty, an email that doesn't parse — caught inline the instant it's wrong.

Input - Light.png
Input - Dark.png

Caught at the source, the moment it's wrong.

The content level

A search that dead-ends. No deals added yet. No permission to view a section. Each handled as its own empty state with its own explanation — not a blank rectangle standing in for an apology.

Empty State - Light.png
Empty State - Dark.png

Every empty state has a reason. None of them are blank rectangles.

The system level

The feed itself — delayed or disconnected. Every KPI card built on top of it now carrying a number that stopped being current the moment the connection did.

KPI Card - Light.png
KPI Card - Dark.png

Same card. Three different things it might be telling you.

Toast vs Banner

The line between them isn't severity — it's whether the problem is in the way of what's happening right now.

15 — Dashboard, Closed Deal (Final screen)..png
09B — Add Deal - Step 4 (Save Failed).png

Toast is for problems outside what you're doing. Banner is for problems inside it.

04 — THE SYSTEM IN USE

Same system, three places to look.

Tokens

Every Light and Dark value in Vela answers to the same alias name — swap the mode, the meaning doesn't move.

Color Styles Reference.png
Light theme styles.png
Dark theme styles.png

Color, typography, spacing — every decision in the system traces back to here.

Escalation, in context

The montage showed the components. These are the same decisions caught inside an actual product flow.

09 — Add Deal - Step 4.png
09B — Add Deal - Step 4 (Save Failed).png

Same modal, same form, one save that didn't go through. The banner sits inside the flow it broke.

11 — Pipeline view, Data Table.png
11B — Data Table — empty search _ filter result.png

A table is only ever one filter away from looking like this.

15 — Dashboard, Closed Deal (Final screen)..png
15 — Dashboard, Closed Deal (Final screen) - Dark.png

The version every demo shows. It exists here too — it's just not the only thing that exists.

None of this is on screen to be admired. It's on screen because someone is going to glance at a number on a Tuesday afternoon and decide, in about two seconds, whether to trust it.

05 — WHAT THIS PROVES

What's actually on the line in Vela is small: a missed follow-up, a forecast a sales lead trusts before a renewal call, a number that reads wrong for an hour before anyone catches it. None of that is dramatic. But the system was built as if it had to hold up under the same question every interface eventually faces.

A complete system is the baseline. Designing for what breaks is the part most people skip.

The instinct itself doesn't care what's at stake. Whether the cost of being wrong is a missed follow-up or something heavier, the design question stays the same: what does an interface owe the person looking at it the moment it stops telling the truth.

Scope, stated plainly

Vela has 22 components and 600+ variants, light and dark, end to end from empty state to closed deal — and it doesn't have motion tokens, a mobile component set, a charting library beyond a single sparkline, developer handoff or code export, or a formal accessibility audit. None of that is hidden in the file; it's just not built yet. Getting from here to a production-ready system — roughly 47 more components, full token coverage for motion and elevation and focus states, real documentation, a real audit — is closer to 140 to 185 hours of work. Three to four weeks full-time. Six to eight at side-project pace.

Explore on Figma community

Cover.png

Vela is published on Figma Community — open to view, duplicate, and use. The full file includes every component with light and dark variants, the complete token architecture, and the 19-screen product flow from empty state to closed deal. Everything documented in this case study is in there, at full fidelity.

bottom of page