← BACK
Case Study · Design Systems · EdTech

A full design system for Knowunity, built with AI from the ground up.

152 tokens, 118 components, 3 hero screens. Built in one focused session using a chat-first, build-second workflow that I wanted to see actually work.

Type
Passion project
Timeline
Single session
Tools
Figma + Claude AI
Output
152 tokens · 118 components
KNOWUNITY DESIGN SYSTEM · TOKEN REFERENCE
PURPLE SCALE — 11 STEPS
BUTTONS · CLICK TO SWITCH STATE
🔥7 day streak
PRO
Got it!
DISPLAY · 48PX · 800W
Learn anything.
RADIUS TOKENS · 5 STEPS
Where it came from

A real brief. A real product. An open-ended challenge.

I attended a community design call where the Head of Design at Knowunity gave attendees a brief: product overview, user personas, design principles, and a style tile. The challenge was open-ended — take these starting ingredients and build your own design system.

📱
The product

Knowunity is an AI-powered study companion for students aged 12 to 20+. 30M+ users, 15+ countries, mobile-first. It combines student-created content with conversational AI for flashcards, quizzes, and AI chat. Built in Berlin by students, for students.

30M+ users15+ countriesAges 12–20+
⚖️
The constraint

The dual-audience tension was the hardest thing to hold. A 16-year-old will reject anything that feels designed for a 10-year-old. A 20-year-old college student will bounce from anything that feels like a kids' app. The system had to feel warm and capable without ever being patronizing.

Dual audienceWarm + capableNever patronizing
🎨
The starting point

The style tile gave us a mid-range purple, a deep navy, four scattered accent colors, Inter as the current typeface, and a ghost mascot. I treated these as ingredients, not constraints. Some I kept, some I edited, one I replaced entirely.

Style tileIngredients, not constraints
The original Knowunity style tile — the starting ingredients for the design system
The experiment

What if you worked through every decision in conversation before touching Figma?

I wanted to see if AI-assisted design could be genuinely rigorous. Not prompting for output, but using conversation to think through decisions before building anything. Chat-first ideation, then execute in Figma via MCP.

01
Ideate in chat

Every token category, naming convention, and design decision proposed and refined in conversation, before any Figma.

02
Approve in chat

Designer reviews and signs off on direction explicitly. "Yes, Noto Sans." "Happy with the color direction." Clear checkpoints.

03
Build via MCP

Claude executes Figma Plugin API scripts through the Console MCP, creating variables, styles, components, and docs directly on canvas.

04
Validate immediately

Screenshot verification after each batch. Fix issues before moving on. No design-by-accident moments.

0
design tokens
0
components
0
type roles
0
hero screens
Key decisions

What changed and why.

The interesting part of design system work isn't the output. It's the reasoning behind each call. Here are the four that shaped this system most.

01Typography
Aa
INTER
Aa
NOTO SANS ✓

Switched Inter to Noto Sans

Before
Inter: default, clean, slightly cold
After
Noto Sans: warmer, wider, globally optimized

Noto Sans has a larger x-height than Inter, so 15px reads closer to Inter's 16px at mobile sizes. More practically: Knowunity is live in 15+ countries and German text runs 30–40% longer than English. Noto Sans was designed for global language coverage. Inter wasn't.

02Color
BEFORE
random
AFTER
intentional ✓

Four accent colors, narrowed to one

Before
Lime, sky blue, mint, bubblegum pink: unrelated
After
Lime only. Other hues reassigned to semantic roles.

Four scattered accent hues reads as random. Lime and purple create a striking, memorable pairing — complementary energy without chaos. The retired colors weren't removed; they were promoted to semantic feedback roles where they earn their place through meaning rather than decoration.

03Emotional design
Incorrect
SATURATED · STRESSFUL
Try again
SOFT · FIXABLE ✓

Error states are deliberately soft

Before
Saturated red errors: standard but stressful
After
#FEE2E2: pastel, calming, fixable-feeling

Knowunity's design principle 4: never amplify stress. Students come to the app feeling anxious about exams. Wrong answer feedback should say 'try again', not 'you failed'. The difference between a saturated red and a soft blush communicates that distinction without any words.

04Architecture
purple/500
#9170EA
bg/action
alias →
Button fill
var(bg/action)

Primitive to Semantic alias chain

Before
Hardcoded hex values in components
After
Primitives to semantic tokens to components, no raw values

Following Shopify Polaris and IBM Carbon's model: 38 primitive raw values that no component ever references directly. 48 semantic tokens alias to primitives. Change purple/500 and every surface, text, and border updates automatically. Ready for dark mode by adding a single mode column.

The token system

152 tokens, rendered live.

This section is rendered directly from the token data — no screenshots. Every value here is the actual value in the system.

Primitive color scales
Purple / Brand
50
100
200
300
400
500
600
700
800
900
950
Neutral / Purple-tinted
0
50
100
200
300
400
500
600
700
800
900
950
Lime
200
400
600
Green
100
500
700
Amber
100
500
700
Red
100
500
700
Blue
100
500
700
Semantic tokens
background/page
Default screen bg
#F7F6FB
background/card
Cards and modals
#FFFFFF
background/action
Primary button
#9170EA
background/action-pressed
Button pressed
#6040BE
background/inverse
Dark surfaces
#1E1560
background/premium
Pro features
#36278B
background/ai
AI chat bubbles
#F4F0FD
background/success
Correct answer
#E6FBE5
background/error
Wrong: "try again"
#FEE2E2
Type specimen — Noto Sans, 11 roles
display
48px · 800w · 56px lh · -0.3px ls
Learn anything, anytime.
heading-1
32px · 700w · 40px lh · -0.2px ls
Biology, Chapter 4
heading-2
24px · 700w · 32px lh · -0.1px ls
Flashcard Review
heading-3
20px · 600w · 28px lh · -0.1px ls
Cell Division
body
16px · 400w · 26px lh
Students share their notes and study together across 15 countries.
body-strong
16px · 600w · 26px lh
Mitosis is the process of cell division.
body-small
14px · 400w · 22px lh
Published 3 days ago · 42 saves
caption
12px · 400w · 18px lh · +0.1px ls
Last studied 2 hours ago
label
15px · 600w · 22px lh
Start studying
label-small
11px · 600w · 14px lh · +0.2px ls
PRO
overline
11px · 700w · 14px lh · +1.2px ls
SCIENCE · BIOLOGY
Spacing — 4px base unit
page-margin
16px · web: 32px
Outer screen margin
section-gap
24px · web: 32px
Between major sections
card-padding
16px · web: 24px
Internal card padding
content-gap
12px · web: 16px
Between related elements
component-padding
12px · web: 16px
Chips, inputs
inline-gap
8px · web: 8px
Icon + label
micro
4px · web: 4px
Tightest gap
Corner radius
radius/small: 4px
Tags, inline badges
radius/medium: 8px
Inputs, compact cards
radius/large: 16px
Cards, answer options
radius/xl: 24px
Bottom sheets, modals
radius/pill: 999px
Buttons, chips, badges
Component library

118 components. No hardcoded values in any of them.

Every fill, stroke, radius, spacing, and text style references a token variable. Change a primitive and the whole library updates.

Button components

Buttons: 4 types × 3 sizes × 3 states = 18 variants. Pill radius by default. Destructive uses radius/large for a slightly more contained feel.

Input field components

Input fields: default, focused, filled, error, disabled states. Error borders use border/error; soft red bg communicates fixable, not broken.

Badge and tag components

Badges and tags: dot badges, count badges, label badges, filter chips, removable tags. Pill radius throughout.

Avatar components

Avatars: 5 sizes × 3 types × 4 status states = 34 variants. All sized for 44pt minimum touch targets.

Full component library overview

Full component library — Card, List Item, Bottom Nav, Toast, AI Chat Bubble, and Progress Bar. All built token-bound from the start.

Figma variable panel

Figma's variable panel showing the alias chain. Semantic tokens reference primitives via VARIABLE_ALIAS, no raw hex values in the semantic layer.

Figma foreground variable panel

Foreground tokens scoped to TEXT_FILL and SHAPE_FILL. They only appear in the right Figma pickers so designers can't accidentally apply a background color to text.

The screens

The system in use.

Three hero screens at 375×812px, built entirely from token references. Every color, spacing, and radius value traces back to a named token.

Home screen

Status bar, greeting, progress card with accent/lime streak, subject cards at radius/large, bottom nav with brand accent.

AI Chat screen

Suggested chips at radius/pill, user and AI bubbles, key term highlight card, pill input bar.

Flashcard Study screen

Progress bar in accent/brand, correct-state card in background/success with border/success, action buttons at radius/pill.

What I learned

Honest reflection.

The interesting part wasn't the output. It was the workflow. Separating ideation from execution completely meant no design-by-accident moments. When you've already agreed on a direction in conversation, the build step becomes fast and precise rather than explorative and wasteful.

What worked

The chat-first model meant every decision was documented before it was built. No backtracking through Figma to figure out why something is the way it is. The MCP's component-to-instance pattern was also genuinely fast: 48 component instances built in 156ms.

What was harder than expected

The Console MCP cloud relay drops after a few minutes of inactivity; sessions need frequent re-pairing. For longer builds, Claude Desktop with a local bridge would be significantly more reliable. Figma's API also requires FILL sizing to be set after appending a node to its parent, which isn't documented anywhere obvious.

What this changes

I came into this thinking AI would speed up the execution. What I didn't expect: it mostly improved the reasoning. The decisions I made here are more considered than ones I'd have made at 2am trying things in Figma. That feels like the actually interesting thing to explore further.

Want to talk through the workflow?

This was a personal experiment but the process behind it is something I think about a lot. Happy to walk through it.

Get in touch →
NEXTAugmenta →