Repo-Aware AI Design Systems Built Solo

Proffer

I built the repo-aware AI the industry just validated, as a designer, not an engineer. Here's what I learned.

Started mid-June 2026Vercel shipped the same idea 25 JunePublished 9 July 3 weeks115 commits31 features~7,800 lines111 repos tested
Change Request Proffer · repo-aware
Requested
.
AppliedValidated & staged

01 // The Gap

Premise

Most designers, PMs, marketers, and other non-technical people know the feeling: you can see the change, but you can't ship it, it waits on someone else.

I spent a few weeks building an AI that closes that gap: you describe the change, it edits the real codebase, your developer approves it, and it goes live. Then, on 25 June, Vercel shipped Design Systems 2.0, the same idea. I'd started mine mid-June, so mostly it told me the idea was a good one.

02 // Watch

Demo

Here is the demo:

The demo

03 // The Start

Origin

For years, we've lived in a world built around the handover from design to engineering. You could tweak a button, tighten a layout, or fix a bug, another 5-minute idea, and still it could take days for any of it to go live.

It waits for a sprint, for an engineer to have a free hour (or for you to bribe them with a coffee), for a ticket to climb a backlog. The change isn't hard but the permission to touch the code is. And it can go even more complicated with quarterly releases, code freezes, and so on, subject to your workplace, of course.

Anyway, I'd watched this handover loop from both sides for years, so I decided to go build the thing that could make life easier for designers and PMs. The reckless question: "What if a designer could make a real change, and the developer could just… approve it?" Not a Figma handoff that gets rebuilt from scratch. Not a Lovable prototype that needs a full rebuild, or any other code prototype that's just too much to compete with engineering priorities. An actual edit to the actual product code (yes, code in the repository), safe enough that the engineer's job shrinks to a thumbs-up on PR. I called it Proffer (like a PR offer).

Proffer's GitHub project board with the roadmap, dated release notes, and architecture notes

I ran Proffer like a product, not a prompt: a GitHub board for the roadmap, dated release notes, and architecture notes, so I could resume exactly where I left off each time I hit an AI context limit and opened a fresh session.

04 // Thesis

Thesis

When I worked on my first Design System (DS) in 2013, the idea was to get it as close as possible to the code, so the scrum teams could iterate within two week windows, so we could plan user research sessions, and ultimately iterate better and faster.

Now we are moving to "prompt-driven design" (disclaimer: not everywhere, and not every industry), and having AI be able to put designs together using the DS the way an experience designer (who knows how to apply that custom DS) would, is the ultimate desired goal, and maybe a north star.

Ideally, AI knows and encodes what "correct" looks like for your product: the real components, the real tokens, the real rules your company has. And here is where the complication starts, because that's when the codebase kicks in (forget Figma files and Figma MCP).

So if you can get an AI to genuinely know your actual codebase, then what it produces comes out on brand and mergeable by "construction" (and yes, it simply cannot make things up, because that would break the codebase).

The output a designer or PM produces stops being a rough guess that a human (some poor engineer) has to repair, and starts being something already written in your engineering team's language. So, that was the whole thesis, and everything I built after it existed to make those few paragraphs true.

System map of Proffer: onboarding, repo grounding, the edit loop, and shipping a pull request

The system map: the full loop from onboarding and repo grounding to the edit loop and the shipped PR. Green shipped, amber partial, grey stayed on the roadmap.

05 // What I Built

Capability

Proffer is a loop with three moves. You describe a change in plain English. It edits your real repository. Then your developer approves a pull request, and it goes live.

I designed the whole experience around three moments, and I deliberately kept the engineering vocabulary out of every one of them (even though, to be honest, I still had to upskill and learn plenty of that vocabulary and procedure myself along the way: GitHub, connecting a repo, pushing from the terminal, and so on):

01 / WORKBuild

You make the change and watch it apply on the live preview page.

02 / ACTIONSend for approval

One button. No "branch," no "commit," no "diff." Just: "Send for approval." and notification banner with link to Github repository.

03 / RESULTIt's live

The dev merges, and the person who made the change gets a notification that it shipped.

Fun glitch · behind the scenes
A funny moment: I loved the gently human, exaggerated "panic state" Claude would slip into. :D
"The API is down again (000), it's crashing repeatedly, which is the real blocker. Two problems to fix: (1) my git fetch blocks the event loop, and (2) something is crashing the server outright (Node 26 exits on unhandled rejections)."

I felt that this type of experience mattered most, because the people who need it most are exactly the ones Git pushes away. So Git is there underneath, doing everything correctly, and completely invisible on top.

The notifications a designer sees at step 2 and step 3, sent for approval, then shipped

Step 2 and 3 notifications.

To be concrete about what "I built it" means: this was about 115 commits and 31 shipped features, roughly 7,800 lines of working code, done solo by directing AI (rather than writing the code myself, obviously). PM, Design, Engineer, and Tester hats all on. Three weeks from idea to the version I'm showing you here.

06 // Hard Parts

Craft

This is the real story. Every problem below started as a design decision, what should happen and what should never happen, and turned into an engineering one underneath.

A. Teaching the AI your real design system, and meeting people where they already are

The first real challenge wasn't a line of code, it was a need. People arrive in two completely different states: some want to start fresh, and some already have a repository they can't abandon (or rather a desperate need for how they can use their DS with AI). Those became Path A and Path B, and they forked quickly into new problems.

Path A is the clean start. Proffer connects to GitHub (authentication), creates the repository, and scaffolds a first design system. That meant I had to make the foundational stack choices myself, as product decisions: React, because it covers something like 90% of the front end world. Next.js on top of it, because it covers roughly half the market. And for the component layer, shadcn/ui, because, well, it is bloody shadcn/ui and it gives people a genuinely great starting point: a registry, full accessibility (a11y) built in, and real theming, so they can make it their own. Those choices are why the output looks and behaves like a real product from minute one, not a toy, and they also give it long term viability.

Path B is the harder and more valuable one: work inside a repo that already exists. The moment you do that, the codebase is in charge, not Figma files, Figma MCP, Lovable, and so on. So before Proffer writes anything, it inspects the repo and sorts it into one of a few buckets. If it finds shadcn, easy, that's home turf. If it finds another known system (Material UI, Chakra, Ant, Mantine, and so on), it can still work by compiling a library-anchored skill that captures that system's identity, the repo's own theme, and real in-repo usage examples. If it finds a repo with no design system at all, applying a fresh one means touching foundational config and styling files, which is exactly where a wrong move makes a mess, so I parked that case deliberately for later. And if the repo simply isn't compatible, an unusual stack or a hostile monorepo layout, Proffer is honest and says so, rather than pretending and shipping something broken. Here is a list of the design systems I analysed, and you can see the winners and losers. It's funny and scary to see how many well known, 5 to 10 year old companies land in the incompatible bucket, and how much work they will need to do to use AI on their design systems. Anyway ...

The engine that makes any of this possible is the "skill," and this was the big thing. A compiler reads the actual repository and produces a machine-usable brief for each component: its real prop signature, a usage example pulled from the repo's own source, and a rules banner naming the underlying primitive library. The breakthrough was almost funny. An Accordion prompt failed the build gate three times in a row when the model had only prop signatures, because it kept reverting to its strongest prior. It passed clean the moment I added a one line banner that said, in effect, "these components are Base UI, NOT Radix." On system output isn't luck, it's grounding.

I tested this against 111 real design system repositories, and the most useful thing I learned was what NOT to trust: you cannot predict success from the stack alone. Some repos are perfectly compatible on paper and still structurally hostile to work in. So the honest judge isn't a pre-flight score, it's the repo's own build running after the change. If it builds, it ships. If it doesn't, Proffer says so out loud.

Analysis table of 111 real design system repositories, compatible winners and incompatible losers

Real design system repositories.

And the direction I was most excited about built on the same mechanism. The design system skill is just one skill file. But nothing stops you from adding more. So alongside the main skill that teaches the AI your components, a team could pull in a separate copywriting skill that makes it write correct, on-brand text, and others after that. One skill file to get the components right (call it the internal skill), and others (a SKILLS.md in the traditional sense) to get other things right (a custom campaign, tone of voice, you get it), each owned by the people who actually own that knowledge.

B. Safe autonomy, knowing what NOT to automate

The most important thing Proffer does is refuse. Before it writes a single line, it checks whether the change touches a protected surface, login, routing and the app shell, the server API, config and dependencies, and if it does, it stops and escalates to a human instead of half doing something dangerous. As a design leader, this is the insight I'm proudest of: "good automation isn't the automation that does the most, it's the automation that knows its own edges."

The pull request on the engineer side, ready to merge

Step 3 on the engineer side - Merge.

Preview of the code changes in the pull request

Preview of code changes.

C. Never ship something broken

The AI checks its own work before a human ever sees it: lint, typecheck, and a real build. If the gate goes red, it doesn't shrug and hand you the mess, it reads the exact error, feeds it back to itself with the offending file, and retries, up to three times. Self healing before review is what makes the approval step honest, because the developer is approving something that already stands up.

Proffer refusing a change that touches a protected surface and escalating to a human

Proffer won't make changes which would make life of the engineer hard.

D. Human directs, AI executes

The last feature I built says it best: when you add a component, Proffer asks one small, human question: where does this go, top, bottom, or should I decide? The person owns intent and placement, the what and the where; the machine owns the how. Getting that division of labor right is the difference between a collaborator and a slot machine.

E. Making a slow AI operation feel alive, not broken

Some edits take 60 to 100 seconds of real model work, and at one point a dying stream left the interface looking crashed when it wasn't. The fix was equal parts engineering and UX craft: a silent fallback to polling, a live "working, 20s" indicator, and a hard rule that the system can never trap the user in a dead state. The gap between "looks broken" and "clearly working" is often just one honest status line.

F. Measure, then cut

One edit was taking about 60 seconds and I didn't know why, so I instrumented a single run. The data was blunt: 92% of the time was the model writing files, across two full passes, it was rewriting an entire file in the first pass just to throw it away. So I changed the first pass to return only the path it needed, not a rewritten file. 60.4 seconds became 26.0, about 2.3x faster, and roughly half the cost. Performance is UX, and you measure before you cut. I could push it harder and make it 4x faster, but there was a danger it would start breaking things, so yes, know the limits.

It was fun, and it felt alive for sure, especially when decisions and choices started to pile up. I could write more and go into the nuances, but these days you won't have time to read it anyway. Design decisions, direction, engineering decisions, the need for rapid upskilling to understand them and make the right calls, and ironically, because it was all happening in a relatively compressed amount of time, I really felt the pressure that Product Managers normally deal with: "so many roads to take, so little time."

07 // The Honest Ending

Position

Here's the twist that makes the whole thing matter.

While I was building Proffer, Vercel shipped it on 25 June 2026. Their v0 "Design Systems 2.0" learns your design system, connects to your real GitHub repo, treats it as the source of truth, works on a branch, and opens a pull request to main instead of ever pushing directly, almost exactly the loop I'd been building alone. So I'll say it plainly: I lost. I can't out-build a company with hundreds of engineers and the distribution to put this in front of millions of developers on a Monday morning. That race is over.

But here's why I also won. It was Vercel (hats off to Guillermo Rauch and the team of Sahaj Jain, you nailed it) one of the most credible companies in modern web development, that decided this exact loop was worth building and putting their name on. That is the clearest signal I could possibly get that I was pointed the right way. I saw what was needed and what comes next on the roadmap of modern development, well ... only weeks before it arrived, but I built a working version of it solo.

So I'm wrapping up Proffer development, sadly and obviously, it was so right that the best company in the space validated it for me. I'll take losing that race every time, because of what the loss proves.

08 // Under The Hood

Stack
React/Next.js/TypeScript/shadcn/ui/GitHub API/Skill compiler/Claude Code