Each tell reads as "generated" because the measured top sites don't do it. Numbers are from the 24-site teardown (2026-09-15). Run this list against screenshots at 1440 and 390.
Color
1. Purple→blue gradients. 0 of 24 sites put a gradient on a CTA or headline at the fold; Stripe's gradient is an art-directed WebGL ribbon.
// before
<a className="bg-gradient-to-r from-indigo-500 to-purple-600 text-white shadow-lg">Get started</a>
// after
<Button href="/signup" size="lg">Start free trial</Button> // bg-brand, flat, inset highlight2. Gradient headline text. (design/gradient-text)
// before
<h1 className="bg-gradient-to-r from-sky-400 to-fuchsia-500 bg-clip-text text-transparent">The future of work</h1>
// after
<h1 className="max-w-[16ch] text-display-lg text-fg">Standups in 4 minutes. <span className="text-fg-muted">Written by the tickets.</span></h1>3. Rainbow accents. Measured accent use ≤ 5% of elements, one hue. (design/multiple-accents)
// before: <Zap className="text-yellow-500"/> <Shield className="text-green-500"/> <Globe className="text-purple-500"/>
// after: every icon className="size-4 text-fg-muted"; brand only on the CTA and links4. Pure black on white + gray-500. Foregrounds measured: #171717, #141413, #26251e; backgrounds #fafafa, #faf9f5.
// before <body className="bg-white text-black"> <p className="text-gray-500">
// after (nothing on body: base sets bg-bg text-fg) <p className="text-fg-muted">5. Solid gray borders everywhere. Measured hairlines are 1px at 5–12% alpha.
// before <div className="border border-gray-200 rounded-2xl shadow-md p-6">
// after <div className="rounded-xl border border-line-subtle p-6"> // or surface-card6. Glass cards. Blur measured only on headers (Linear 20px, Mercury 10px) and overlays.
// before <div className="backdrop-blur-xl bg-white/10 border border-white/20 rounded-3xl">
// after <div className="rounded-xl bg-surface border border-line-subtle">7. Blob/orb hero.
// before <div className="absolute -top-40 left-1/2 size-[600px] rounded-full bg-purple-500/30 blur-3xl" />
// after one edge light at 12% brand, or none, plus a real product frame or a typographic hero
<div aria-hidden className="pointer-events-none absolute inset-x-0 top-0 -z-10 h-144 bg-[radial-gradient(60%_70%_at_20%_0%,color-mix(in_oklch,var(--brand)_12%,transparent),transparent_70%)]" />8. Default selection and focus. 20/24 sites brand the selection. Fix: don't override base (::selection, :focus-visible); delete any outline-none.
Typography
9. Default tracking on big headings. 14/18 sites with ≥ 40px display text use negative tracking. (design/heading-tracking)
// before <h1 className="text-6xl font-bold tracking-normal leading-tight">
// after <h1 className="text-display-lg"> // size, lh 0.96, −0.04em×knob, weight from direction10. Bold display. 18/23 measured H1s ≤ 600. Remove font-bold/font-extrabold from headings.
11. Loose display leading. Measured 0.85–1.15. Never leading-normal/leading-relaxed on text-display*.
12. No small-type texture. Workhorse is 14px; mono labels add technical texture.
// before <p className="text-base">Pipelines</p>
// after <p className="label-mono text-fg-muted">01 · Pipelines</p>13. Wide grey hero sub. Measured max-width 480–672px.
// before <p className="mx-auto max-w-4xl text-xl text-gray-500">
// after <p className="mt-6 max-w-[44ch] text-lg text-fg-muted">14. Orphans. Base sets text-wrap: balance on h1–h4; also cap width: max-w-[16ch].
15. Too many fonts. ≤ 2 families + mono (design/too-many-font-families, lint/google-fonts-link). Delete ; use the direction's next/font loaders.
Layout
16. Everything centered. Interior headings centered: Linear 1/14, Stripe 1/32.
// before <div className="text-center"><h2>…</h2><p className="mx-auto">…</p></div>
// after <div className="grid gap-6 lg:grid-cols-12"><h2 className="lg:col-span-5">…</h2><p className="lg:col-span-6 lg:col-start-7">…</p></div>17. The template page (badge → centered H1 → 2 buttons → glow screenshot → 3 icon cards → logos → testimonials → pricing → FAQ → CTA). Fix: plan sections from the brief with archetypes (website/references/section-archetypes.md); each section must have a job.
18. Three identical icon cards. None of the top sites uses it as the primary feature explainer.
// before
<div className="grid grid-cols-3 gap-8">{features.map(f => <div className="rounded-2xl p-8 shadow"><div className="size-12 rounded-full bg-indigo-100"><f.icon/></div><h3>{f.title}</h3><p>{f.body}</p></div>)}</div>
// after: feature rows with real UI, or an editorial divided list
<ul className="divide-y divide-line-subtle border-y border-line-subtle">
{features.map((f, i) => (
<li key={f.title} className="grid gap-3 py-6 lg:grid-cols-12">
<span className="label-mono text-fg-subtle lg:col-span-2">{String(i + 1).padStart(2, "0")}</span>
<h3 className="text-xl text-fg lg:col-span-4">{f.title}</h3>
<p className="text-md text-fg-muted lg:col-span-6">{f.body}</p>
</li>
))}
</ul>19. Random bento. Spans must follow importance; each tile shows something real (UI, data, code). If tiles would hold only icon + title + text, use tell 18's list instead.
20. Uniform section padding. Measured 96–160px with variation. Replace every py-20 with the rhythm table in layout.md.
21. Unreadable line length. max-w-7xl paragraphs → max-w-prose or max-w-[60ch] (design/line-length-long).
22. Generic navbar (80px, 5 centered links, gradient button). Measured headers 56–72px, CTA solid neutral or brand, small.
// after: template SiteHeader — sticky h-(--header-h), text-sm links text-fg-muted, Button size="sm"Components and details
23. rounded-2xl shadow-xl everywhere. shadow-xl doesn't exist in void (emits nothing) and cards cap at rounded-xl.
// before <div className="rounded-3xl shadow-2xl p-10">
// after <Card className="p-6"> // surface-card: radius-xl + hairline + shadow-124. Border + shadow + bg change on hover.
// before <a className="border shadow hover:shadow-xl hover:bg-gray-50 hover:border-indigo-500 hover:-translate-y-2">
// after <a className="press rounded-xl border border-line-subtle p-6 transition-colors duration-(--duration-fast) hover:border-line-strong">25. Non-concentric corners. rounded-2xl parent with p-2 and rounded-2xl child → radius-nested on the parent.
26. Emoji or circled icons. (design/emoji-icons)
// before <h3>🚀 Fast deploys</h3> <div className="grid size-12 place-items-center rounded-full bg-blue-100"><Rocket/></div>
// after <h3 className="flex items-center gap-2 text-xl"><Rocket aria-hidden className="size-4 text-fg-muted" strokeWidth={1.5}/>Fast deploys</h3>27. Hover scale-up and glowing buttons. Measured press is scale down 0.96–0.98; hover is a color step in 100–200ms.
// before <button className="transition-all duration-300 hover:scale-105 shadow-lg shadow-indigo-500/50">
// after <Button>Deploy</Button> // press utility + bg-brand → hover:bg-brand-hover28. Fake proof. Invented logos, "10K+ users", 5-star carousels with stock avatars. Fix: real proof or omit. Placeholder protocol in website §3. A single long, specific, attributed quote beats a carousel.
Motion and copy
29. Fade-up on every section; transition-all duration-300. (lint/transition-all, smooth/transition-all)
// before <motion.section initial={{opacity:0,y:50}} whileInView={{opacity:1,y:0}} transition={{duration:1}}>
// after <section className="section-y"> … <figure className="reveal">…</figure> // 1–3 reveals per page, CSS only30. Buzzword copy.
before Unlock the power of AI to supercharge your workflow seamlessly.
after Turns a 40-minute incident review into a 3-paragraph summary with links to every log line.Banned list and headline formulas: website/references/copy-and-content.md.
Omissions that also betray generation
No :focus-visible style · no dark color-scheme / flash of wrong theme · lorem ipsum or "John Doe" · no empty/error/loading states · arbitrary values (p-[18px], text-[#a1a1aa], lint/tw-arbitrary-sprawl) · mixed icon sets · missing favicon · "Create Next App" · 12px tap targets · horizontal scroll at 390px.