Guhwoo ·
Why every AI-generated website looks the same
The indigo gradient, Inter, the three feature cards. AI landing pages converge because of how the models were trained, and the convergence is measurable. Here is the mechanism, and what to change first.
The convergence is real, and it has a cause
Generate a landing page with any current model and you will get a recognisable object: a dark slate background, a headline in Inter, an indigo-to-violet gradient somewhere near the hero, a blurred glow behind it, three feature cards in a row, and a button that says "Get Started". Different tool, different prompt, same page.
This is not laziness on the model's part. A language model trained on public web code emits the statistical average of that code, and the average is dominated by a few enormously replicated sources. Tailwind UI shipped its component examples with indigo-500 as the placeholder accent. Thousands of tutorials, starter kits and open-source projects copied those components verbatim. That volume of near-identical markup is what the model learned "a button" looks like.
The same story explains the rest of the set. Inter became the default UI typeface of the 2020s, so it dominates the training data. background-clip: text gradients were the visual signature of a wave of well-linked launch pages. A blurred radial glow behind the hero is cheap to describe in CSS and appears in every "modern SaaS template" repository. None of these were chosen by the model. They were inherited.
Why the defaults are so narrow
It is worth being precise about why the convergence is this tight, because the usual explanation — "AI is unoriginal" — predicts the wrong fix.
A model is not sampling uniformly from everything it has seen. It is sampling from a distribution sharpened by training toward outputs that were rewarded, and, on a task as underspecified as "make me a landing page", the safest output is the modal one. Every generation step compounds this. Once the page is dark-slate, an indigo accent is the highest-probability continuation, because that pairing is what the training data contains. Once the accent is indigo, a violet gradient is the highest-probability decoration. The tells arrive as a bundle because they co-occurred as a bundle.
This is also why prompt-level fixes only half-work. Asking for "no purple" moves one variable and leaves the rest of the bundle intact: you get the same page in teal. The structure — hero, glow, three cards, empowerment verb, footer — is untouched, because nothing in the prompt gave the model a reason to depart from the mode.
The convergence is measurable
We maintain a registry of 39 programmatically detectable fingerprints across colour, typography, layout, shape, components, iconography, effects, motion and copy. Each is judged against real rendered DOM and computed styles rather than by asking a model for an opinion, and each hit is weighted — high signal 3, medium 2, low 1 — into an index:
index = hit weight / total active rule weight × 100
The distribution is not subtle. Freshly generated pages routinely land above 50. Pages that someone has actually worked on land in the teens. The gap is wide enough that the score is boring to compute and useful to track, which is the property you want in a metric.
What the score is not: a detector of whether AI touched the page. A hand-written page built from a starter template will score high, correctly, because nobody made those decisions either. A generated page that somebody then edited with care will score low, correctly. It measures how much of the page nobody decided.
The tells, in the order worth fixing
The full list with a fix for each is on the AI slop tells page. The short version, ordered by change-per-edit:
- The indigo-to-violet gradient (
color-indigo-violet-gradient). Almost every generated page lands in the 230–290° hue band. Replacing it with an accent pulled from something real — your logo, a product screenshot, a photograph — changes the read of the page more than any other single edit. - The radial glow behind the hero (
color-radial-glow-blob). It carries no information. It exists to fill space that nobody decided what to do with. Delete it and either put real content there or leave it empty on purpose. - Gradient-clipped headlines (
color-gradient-text). Human typographers rarely run a whole heading through a gradient. Return it to a solid colour and build hierarchy with size, weight and spacing. - Palette lock (
color-tailwind-palette-lock). When most sampled colours are untouched scale values, nobody opened the colour picker. Define three or four real tokens instead. - The default typeface. Inter, Geist, Poppins, Manrope, Space Grotesk. Any of them is fine; all of them signal that the choice was not made. Pick something with a reason attached.
- Three feature cards. The rule-of-three grid is the layout a model reaches for when it has no information about what matters. If two of your features matter and one does not, do not give them equal boxes.
- Empowerment copy. "Elevate your workflow." "Unlock the power of." "Seamlessly." Hollow verbs survive because they are safe. Say the specific thing your product does instead.
The ordering is deliberate. Colour and effects sit at the top not because they matter most in the abstract but because they are the cheapest edits with the largest perceptual payoff — a viewer processes palette before layout and layout before copy. Fixing the copy on a page that still has the glow behind it changes almost nothing you can see.
"Isn't this just taste policing?"
A fair objection: gradients are not illegal, Inter is a genuinely good typeface, and three columns is sometimes the right number of columns. If the same list is used as a set of prohibitions, you get a different monoculture — everything beige, serif and asymmetric — and nothing has been gained.
The distinction that matters is not gradient-versus-no-gradient. It is decided-versus-inherited. A gradient chosen because the product has two brand colours and the transition between them means something is not a tell. The same gradient present because it arrived with the scaffold is. This is why the registry pairs every rule with a reason and a fix rather than a verdict: the fix is always "make a decision here", never "use this other value instead".
The practical test is simple. Point at the five most prominent visual choices on your page and give the reason for each. Any answer that comes out as "it came like that" marks a spot that is still unowned.
What this changes commercially
A generated page is not usually wrong. It is legible, responsive, and accessible enough. The cost is different: it reads as unowned. A visitor who has seen forty pages built from the same defaults recognises the forty-first instantly, and reads it as a product nobody has spent attention on. For anything where trust is the conversion — developer tools, financial services, anything with a signup — that reading is expensive.
It is also becoming a competitive problem rather than an aesthetic one. When everyone's draft comes from the same place, the draft is worth approximately nothing, and whatever differentiation exists has to come from what happens afterwards. That is a strange inversion of how design work used to be valued, and it is worth internalising: the scarce step is no longer production, it is judgement.
Don't reject the draft, take it apart
The wrong conclusion is to stop generating. The draft is genuinely useful — it gets structure, copy scaffolding and working responsive behaviour onto the screen in a minute. The problem is that most people ship it as-is, because taking it apart by hand means dropping back into code and losing the speed that made generation attractive in the first place. Each individual fix is small; there are thirty of them; nobody finishes.
That gap is what we built Guhwoo for: import the generated page, get the tells annotated directly on the canvas with the evidence for each one, then adjust by direct manipulation while the source stays in sync so your agent can pick up from what you changed. AI drafts it. You are the one who signs it.
If you want a number before you change anything, the free slop checker takes a URL and returns the specific rules your page trips, with no signup.