I spent months trying to make one design system fit everything I make.
All of it obeying the same rules so it would all feel like it came from one person. Great intentions, but it never got anywhere. And for a long time I thought that was a completeness problem: not enough tokens, not enough rules, not enough rationale written down. So I kept adding.
Then I looked at what it was actually producing. The website came out flat. Underpersonalized, no pulse. The apps came out the other way, too much personality, loud where they should have been quiet. The rules weren’t wrong; they were fine both times. A one-size-fits-all system was the wrong idea.
What it couldn’t hold was intent, the part around the spec that makes it mean something. Who’s using this, what they’re doing when they hit the screen, what the thing is for. My website and my apps share a spec but do not share an intent. The website is me thinking out loud. The apps are tools that have to get out of the way.
So I split it. The website got its own design system, website-only, built to capture my brand intent and not just my colors. The old system goes back to being what it’s good at: my app system, where personality is a liability and the tool needs to disappear.
That helped. It also didn’t fix the thing underneath, which has nothing to do with how many systems you run.
This isn’t a niche problem with my niche setup. Google Stitch introduced the DESIGN.md format earlier this year, and Claude Design pushed it the rest of the way: one markdown file describing your system, readable by any AI tool, dropped into the prompt as truth. There’s a GitHub repo collecting 68 of them, scraped from top brands. The pitch is “drop one in, scaffold a full UI in one shot.” Point the model at the file, get the brand.
The scraped files don’t carry the intent, and the obvious fix is to write it in. Writing it down beats leaving it out. But the website that came out flat and the apps that came out loud weren’t short a few tokens. They were short the thousands of small decisions behind every token, most of them never written down even on the human side, each one a tiny piece of why this and not that.
Say you got every last one of them into the file. You still hand the model that same file twice and get two readings of the same constraint.
