SKY DESIGN SYSTEM · YAPPESDESIGN SYSTEM · MANTINE● IN USE ACROSS 2 PRODUCTS

Building Sky, the design system for the Yappes API platform

I built Sky, the Yappes design system, on top of Mantine with one frontend engineer, starting from the most-used components.

Yappes screens were designed with little shared guidance, so every feature looked a bit different and engineers rebuilt the same parts again and again. Together with one frontend engineer, I built Sky on top of Mantine, the library the product already used, with tokens, components and patterns for both Yappes products.

IMPACT● IN USE
~89%of the platform UI built from system components
2products on one system: API Manager and Admin Console
28components, built most-used first
100%of core component colours linked to tokens: buttons, inputs, badges, tables, dropdowns
ROLE
Senior Product Designer, the only designer at Yappes. I started Sky, named it and designed it
TEAM
Me and Chandan, frontend engineer, who built the components in Mantine
TIMELINE
Feb 2025 to May 2025
BUILT ON
Vanilla Mantine, the React library the product already used
PRODUCTS
API Manager and Admin Console
TOOLS
Figma variables, component properties
PROBLEM

One product, many visual languages

Before the system, Yappes had a one-page style guide and a lot of guessing. Each new feature made its own small choices, and they added up.

AREABEFOREAFTER
COLOURBright orange and blue, with no scales or rules for use21 colour scales from 25 to 900, plus semantic tokens per component
TYPESource Sans Pro and Open Sans, no shared scalePoppins, one type scale from 10px to 76px, 131 text styles
ICONSMixed outlined and filled icons from Material, React Icons and othersMaterial Symbols Rounded only, weight 400, grade 0
SPACINGPicked by eyeA 4px scale, 12-column grid, 4 breakpoints
COMPONENTSRebuilt per feature28 shared components with documented states

The cost was real: inconsistent screens for users, slow handoff for engineers, and design time spent redrawing parts instead of solving product problems.

Before: the old API Manager login, from the one-page style guide
After: the same login rebuilt with Sky
WORTH IT

Was a design system worth it for a small team?

Yes for the core, and no for parts of it.

✓ WHY IT WAS NEEDEDOne designer, two products and 30+ features to design. Without shared parts, every feature would be drawn and built from scratch. With them, later features like CORS took 4 screens and two days.
✓ HOW I KEPT IT SMALLWe built on Mantine instead of a new library, and started with the components the product used most.
✕ WHERE I OVERBUILTThe colour palette. I made 21 colour scales (328 colours), but the product uses only 82 of them, and two scales (Pink and Lime) are never used. Next time I would start with brand, grey and status colours, and add a scale only when a screen needs it.
HOW IT IS BUILT

How the system is built

Change one primitive, and every component and screen that uses it updates. This is what made the platform consistent.

Components never use a raw colour: they go through a semantic token
DECISION 01 OF 03

Redesign on top of Mantine, most-used components first

The product was already built on vanilla Mantine, and the team was not ready to replace it. So the job was not a new library. It was a redesign of the look and feel on top of the one we had: same components, restyled with Yappes tokens, with fixed behaviour where Mantine didn't fit.

HOW WE WORKED · Chandan, the frontend engineer, and I went through the product to find the most-used components and did those first. I designed and documented each one in Figma, and he built it in Mantine and checked it against real screens.

✓ WHY IT MATTERED
Each Figma component maps to a component engineers already use, so handoff became "use this, with these props" instead of "build this".
The Sky button in Figma, with its component properties
The same button in Mantine, with each Figma property mapped to a prop
DECISION 02 OF 03

Two token layers, so colour changes in one place

Components never use a raw colour. They use a semantic token, which points to a primitive.

  • Primitives (328 colour tokens): 21 colour scales, including Yappes orange and Yappes blue, each from 25 to 900.
  • Semantic tokens (228): named by job and grouped by component: button, text, input field, icon, badges, avatar, data table and more.
  • Spacing and layout (48): a 4px spacing scale, radius steps and 4 breakpoints (768, 1280, 1440, 1920).
✕ WHAT WE DROPPED
One flat palette, which is what the old style guide had. With a flat palette, changing the button colour means hunting through every screen.
The Figma variables: 328 primitives on the left, the 228 semantic tokens that point to them on the right
DECISION 03 OF 03

Accessibility from a real audit, not a checklist

I audited the live API Listing page against WCAG and found 13 issues: 1 critical (controls not readable by screen readers) and 12 colour contrast failures.

ELEMENTNOWPROPOSED FIX
White text on Mock API buttonBrand orange #F16827, fails AADarker orange #C94F14
Tag filter labelLight grey #D1D5DBGrey #757575
"+X more" labels in tables#BFBFBF on near-white#757575

WHAT HAPPENED · The plan was to keep brand orange for highlights but never under white text. We finished one audit round, then the team moved to shipping platform features, so most fixes were not built. The audit is ready as the starting point for the next round.

Now: white text on brand orange #F16827, 3.1 to 1, fails AA
Proposed: white text on darker orange #C94F14, 4.6 to 1, passes AA
THE SYSTEM

The final system

The system has four layers, each built on the one before it.

LAYERWHAT IS IN IT
FOUNDATIONSColour, type, icons, 4px spacing, 12-column grid, 4 breakpoints
COMPONENTS28 components: buttons, inputs, checkbox and radio, toggle, badges, data table, action bar, filters, dropdowns, tabs, stepper, toast and more
PATTERNSLogin and signup, marketplace listing, API list tables, filter drawers
PRODUCT THEMESSame components, two products: API Manager in blue, Admin Console in orange
Sky foundations
01 · Foundations: colour scales, Poppins, the 4px spacing scale, radius and icons
The Sky data table
02 · Components: the data table with selection and its action bar
Two Yappes screens
03 · Patterns: the marketplace listing and the API list table
Two product logins
04 · Product themes: API Manager in blue, Admin Console in orange

The data table and the filter drawer are the strongest components to feature. They carry the most states (loading, empty, error, selectable, filtered), and they are what most Yappes screens are built around.

OUTCOME

The system became the base for the whole platform.

Across the two product Figma files, about 89% of the UI (out of roughly 108,000 component uses) comes from shared components.

● FASTER FEATURESLater gateway policies like Caching, Circuit breaker and CORS needed only 4 to 6 screens each, because the parts already existed. CORS was designed in two days.
● EASIER HANDOFFComponents map to Mantine, so engineers worked from known names and props instead of redlines.
● TWO PRODUCTS, ONE SYSTEMAPI Manager and Admin Console share every component and differ only in their brand colour.
● DESIGN AND CODE IN SYNCEvery component was built in Mantine alongside the Figma work, so what engineers shipped matched the file.
GAPS

What I missed, and what I'd fix

I built Sky as the only designer, so it has gaps another designer would spot quickly. I audited my own Figma file to find them.

GAPWHAT THE FILE SHOWSWHAT I'D DO
Accessibility fixes not shipped13 issues found in one audit; work paused for feature deadlinesFix contrast in the semantic tokens first, since one token change fixes every component using it
Overbuilt palette82 of 328 primitive colours are used; Pink and Lime scales are never usedStart with brand, grey and status colours; add scales only when needed
Not every component uses tokens88% of component colours are tokens. Core components are 100%, but loaders (10%), side menu (53%) and cards (73%) still use raw coloursFinish tokens on these before adding new components
Thin documentationOnly 2 of 142 components have a usage description, and several pages share the same copied guidance textAdd short do and don't notes to the 10 most-used components
Messy file66 components with generic names like "Component 340", 6 empty or test token collections, two spacing scales, two semantic colour collections, a Trash pageClean up and merge before handing the file to another designer
No way to measureNo usage tracking or changelogTrack component usage with Figma library analytics and keep a short changelog
THE BIGGEST MISS

No second designer ever reviewed the system. Every decision was mine. Next time I would set up a regular review with engineers and at least one designer from outside the project.

Each gap is small on its own. Together they are the difference between a system that works for its maker and one that works for a team.

WHAT I LEARNED

Building on the library the team already uses gets a system adopted faster than a perfect custom one.

Starting with the most-used components gave the biggest win for the least work.

A design system is a product. Without time set aside after launch, work like accessibility gets pushed back by features.

A DESIGNER BY CRAFT, A BUILDER BY HABIT.© 2026 KAILAS PARAMESWARAN
Hello