You can spot it instantly. Gradient somewhere between violet and indigo. Cards with a 16-pixel radius and a soft shadow. Three columns of features with a small icon on top. A hero that says “Build faster. Ship smarter.”
People call this the model having bad taste. It isn't. Ask a model for a page with no constraints and it does what anyone does with no brief. It produces the statistical middle of everything it has seen. The output is average because the request was.
What a designer would have given it
When a real designer hands work to a developer, they don't send vibes. They send a system: this many type sizes, these exact colours, spacing on a scale, one accent used sparingly. The constraints are the design. The model never gets those, so it invents mediocre ones every time.
A DESIGN.md is not a style guide for humans. It's the brief the model was missing, narrow enough that the average answer is no longer available to it.
The file
Mine is deliberately restrictive. Every line removes options, which is the entire point:
# Design constraints
## Type
One family. Two weights: 400 and 600, never 500, never 700.
Sizes, and nothing between them: 12 / 14 / 16 / 20 / 28 / 44.
Headings get negative tracking. Body does not.
## Colour
Background #F6F5F3. Foreground #111111.
Everything else is #111 at an opacity: 0.6 for secondary, 0.4 for
tertiary, 0.06 for borders. No greys, no slate palette.
Exactly one accent, used on no more than two elements per screen.
## Space
Multiples of 4 only. Section padding 64 mobile / 96 desktop.
When unsure, use more space, not less.
## Surfaces
Radius: 8 for small, 16 for cards, 20 for modals. Nothing else.
One shadow, and it is barely visible. No glassmorphism.
No gradient on anything that holds text.
## Banned
Purple-to-blue gradients. Emoji as icons. Three-column feature grids.
Centred body text longer than two lines. "Powerful", "seamless",
"effortless", "supercharge".Why the banned list does most of the work
The positive constraints steer. The banned list is what actually breaks the default, because it names the specific things the model reaches for when it has nothing else to go on. Every item on mine earned its place by showing up uninvited three times.
Add to it as you go. When you see something in the output that makes you think “that's the AI look”, name it precisely and put it on the list. Precision matters. “No ugly gradients” does nothing, “no gradient on anything that holds text” is enforceable.
How to actually use it
Reference it in your project instructions so it's loaded on every task, not pasted when you remember:
## Design
All UI work follows DESIGN.md. If a request conflicts with it,
say so before writing the code.That last clause matters more than it looks. It turns the file from a suggestion the model weighs against your request into something it has to raise a conflict about, which is exactly how a good developer would treat a brief.
The honest limitation
This gets you to “clearly not generated.” It does not get you to a great design. A constraints file removes the tells; taste, hierarchy, and knowing which two elements on the page actually matter is still your job.
But removing the tells is most of the commercial value. Nobody is paying for a website anymore. They're paying for it to not look like AI made it.