Kelvi · Case study 2 of 3

Built in, not written down

Built in, not written down

Keeping a product on its design system when most of the building is done by AI, and being honest about where that stops.

Design Systems

Design Systems

Design Ops

Design Ops

AI Workflow

AI Workflow

Front-end

Front-end

Edtech

Edtech

0 to 1

0 to 1

My Role

Founding Product Designer

Team

Gayatri

Design Head

Responsibilities

Design system architecture, workflow design, rules and enforcement, scoring the AI output

Built with

Claude Code, Cursor, Codex

Project Timeline

1 month

Aug - Sept 2026

When most of the building is done by AI tools that start fresh every time, the risk is no longer one bad screen. It is a product assembled from mismatched parts.

When most of the building is done by AI tools that start fresh every time, the risk is no longer one bad screen. It is a product assembled from mismatched parts.

Context

AI means a designer can now build and ship what they design. That moves the hard part.

Kelvi is an early-stage edtech product, built by two of us. One of us owns the design and the product. The other owns the teaching, how Kelvi responds when a child works through a problem. Most of the actual building is done by AI tools that neither of us is watching line by line.

This is the middle of three, between building the design system and the finished screens. It is about how the system stays followed once the building speeds up, and where it stops being able to help.

The Problem

A system drifts on its own

A system drifts on its own

The colour system had been thought through properly, with a reason behind every name in it. Inside three months it had two answers for the same colour.

The first name
The second name, written Tailwind's way
Two places in one file. One pink, two different shades, and a comment saying which one wins.

Every colour lived in one place, under one name. To put a colour on a screen you need a shortcut for it, and Tailwind only builds shortcuts for names written its own way. So every colour also got a second name, written the tool's way. Usually that second name points straight back at the first, so there is still one colour. In one place the colour had been typed out again instead, so when we changed the pink, only one of the two moved. This is an ordinary edit: you change a colour where you see it, with nothing to tell you a copy sits somewhere else. A comment said which one to use, but a comment does not do anything. Screens got whichever name they asked for.

Now nobody writes the second name. Each colour is written once, in one list, and a tool writes both names from it. There is no copy left to get wrong.

What was built

A rule nothing enforces is a preference

A rule nothing enforces is a preference

We moved the rules out of documents and into the step every change passes through: which colours, spacing sizes and components we have, and when not to use each one. So a dialog does not get rebuilt next to the one we already have. A change that uses a colour or size we do not have is stopped before it goes in.

A change with a bad colour, stopped. The check failed in 39 seconds, and the change could not go in.

When we first built the check, it looked finished. To test it, we sent in a bad colour on purpose. The check caught it in thirty-nine seconds, but the change could still go in. One setting had the wrong name, so the check could say no but could not stop anything. We fixed the name, and now the same colour cannot go in.

A check that runs and a check that stops you are not the same thing. The only way to tell is to try to break it.

A check that runs and a check that stops you are not the same thing. The only way to tell is to try to break it.

A check that runs and a check that stops you are not the same thing. The only way to tell is to try to break it.

Now every new check gets that test before we call it done.

Day to day, the change is quieter. My teammate has the rules without asking for them. Nobody argues about a colour again. A new screen starts from parts we already have, so we talk about whether it is the right screen, not whether the padding is ours.

175

real mistakes the checks caught on their own. Only 2 false alarms in the whole build.

real mistakes the checks caught on their own. Only 2 false alarms in the whole build.

The Limit

The checks are a floor

The checks are a floor

Green checks told us the work was on the system. They did not tell us the work was right. So we gave an AI tool twenty ordinary requests, the kind either of us would type on a normal day, one at a time, and marked every answer.

A later run of five requests, each marked on four things. Sixteen of the twenty marks are yes. All four of the misses sit in the one column no rule can check.

On the first run it invented nothing. It used our colours and our spacing. It passed every check on the first try. The rules can check those three. The fourth, whether it reached for the part we already had, is the one nothing can check, and it is the one it got wrong, five times out of seventeen. The later run, in the picture above, missed the same way. It made its own progress bar next to the one we already had. It fixed an old copy of a screen while the real one stayed wrong.

A check can promise the materials are ours. It cannot say the right component was used, in the right place, saying the right thing.

A check can promise the materials are ours. It cannot say the right component was used, in the right place, saying the right thing.

A check can promise the materials are ours. It cannot say the right component was used, in the right place, saying the right thing.

What it is not

None of this designs anything

None of this designs anything

This part needs saying plainly, because it is easy to read a piece like this and think the machine is doing the design.

It is not. The workflow stops us rebuilding what we already have and points at the right part. It says things like: use the dialog we already have, or this state already exists on another screen.

A sign-up step built through the workflow. Every part on it is ours, the spacing is on the scale, the focus ring is the one we decided on. It is also completely plain.

What comes out is a skeleton. Correct, consistent, and not yet a designed screen.

What comes out is a skeleton. Correct, consistent, and not yet a designed screen.

What comes out is a skeleton. Correct, consistent, and not yet a designed screen.

Spacing that is on the scale is not rhythm. Components that are all ours are not hierarchy. Deciding what a screen is for, what a child or a teacher should feel when it opens, and which one thing on it matters most, is not in any rule and never will be. The system exists so that the time goes there instead of into whether someone typed the right green.

Where this hands over

The checks keep the work on the system and make shipping faster, because nobody is holding rules in their head or reopening an argument about a colour. What they cannot do is judge, and they cannot design.

The third case study is the finished screens and flows. That is where the skeleton gets its shape, and that part is still entirely ours.

Get in touch

© 2026 Mehak Mahajan

Get in touch

© 2026 Mehak Mahajan

Get in touch

© 2026 Mehak Mahajan