skip to content
lab

0044 min read

AI with taste

Why AI-generated websites all look the same, and what happens when you move the taste into the repo.

Most AI-generated websites look the same. Purple gradients, rounded cards inside rounded cards, the same “Modern SaaS” stack. It's not that the agents can't do anything. They all reach for the statistical mean of their training set, and the mean is dull.

impeccable.style tries to fix that systematically. An open-source agent skill with 23 commands, anti-pattern detection (purple gradients, nested cards, low contrast, the usual gallery of sins), and above all a vocabulary: PRODUCT.md, DESIGN.md, design tokens, explicit anti-patterns. The agent gets the same context before every decision and converges not to the default but to your brand.

What's right about it.The problem with AI designs isn't that the models can't do anything. They can do plenty. It's that they have to guess what you want, because the taste is written down nowhere. impeccable moves the taste into the repo. Then the agent doesn't have to guess.

What I did today. This very site, cg-labs.dev, runs on the setup. .impeccable/design.json and DESIGN.mdsit directly in the repo. Before any hero, any card, any animation existed, there were tokens. Cathode Cyan, Studio Black, Bone, Phosphor Blue. Every architecture decision ran through the same question: does this belong to “dark-tech terminal”, or is it generic SaaS? The difference in output isn't subtle.

What it isn't.No magic wand. If you don't have taste, impeccable won't give you any. It's a tool that makes your taste decisions legible to the agent. Garbage in is still garbage out, just more structured.

Where I haven't gone yet.The live mode (browser-based iteration with the audit as feedback) is where the concept gets really interesting, and I haven't played it through. The CLI audit for CI is on the list too, not yet wired in.

It's like designing with a junior: you have to tell the junior what looks good and what looks bad, otherwise the junior makes both kinds of decisions. With coding agents it's identical, except “telling” now means writing into a markdown file that the agent reads before every action.