Update

Gradienty is now GradientDeck. New home: gradientdeck.com

Open
← Back to Blog
Anti-Slop2026-06-30·6 min

Anti-Slop Design: Making AI-Generated UI That Doesn't Look AI-Generated

The 58 gates, how they work, what they catch, and why your agent's output should pass them before you ship. A deep dive into the anti-AI-slop system built into GradientDeck MCP.

Every developer who's used an AI agent to generate UI knows the feeling: the output works, but it looks... generated. The purple-to-blue gradient hero. The centred-everything layout. The 3-column icon-tile feature grid. The transition-all hover. The invented '10x faster' metric. These are the tells — the patterns every LLM reaches for by default because they're what it was trained on.

GradientDeck MCP ships with a 58-gate anti-slop test adapted from Hallmark (the open-source design skill by Together AI). It's available as the slop_test tool, integrated into critique_design, and baked into every generator's output. Here's how it works and what it catches.

The five critical tells

These are the gates that produce a 'ships as slop' verdict. If any one of these fires, the output is immediately flagged as AI-generated:

1. The purple-to-blue gradient (gate 2)

A linear-gradient from purple to blue, purple to pink, or cyan to magenta — anywhere in the code, including background-clip: text gradient headlines. This is the single most-recognised AI aesthetic. The fix: pick a single anchor hue, one accent, no gradient backgrounds on heroes. If you need a gradient, use an analogous or single-hue lightness ramp.

GradientDeck's generate_gradient tool detects this automatically. If you ask for a purple-to-blue gradient, the tool returns the gradient but attaches a prominent warning with a non-slop alternative (solid surface + single accent).

2. Gradient text (gate 2)

A headline with background-clip: text set to a gradient fill. This signals 'AI generated' faster than almost anything else. No genre allows it. The fix: solid ink. Carry emphasis with weight, a display face, or a drawn underline.

generate_text_gradient always warns — even if the colors aren't purple-blue, gradient text itself is the tell.

3. The full-viewport centred hero (gate 6)

min-height: 100vh with everything centred — eyebrow, title, lede, and CTA all stacked on the same centred vertical axis. The default LLM landing page. The fix: let the hero be the height of its content. Bias left or right. Break alignment.

compose_ui_treatment templates use min-h-[70vh] with items-start (left-biased) instead of min-h-screen with justify-center.

4. Invented metrics (gate 46)

'10x faster', 'trusted by 50,000+ teams', '99.9% uptime', '+47% conversion' — quantitative claims the user didn't supply. The fix: replace with a placeholder (— and 'metric to confirm') or rebuild without the proof slot.

5. The aurora-blob background (gate 29)

Blurred multi-radial mesh blobs in purple-to-pink-to-cyan, layered behind hero text. The 2022-2023 generated-design default. The fix: solid surface, or a subtle two-stop gradient + SVG grain at <0.1 opacity.

The major tells

These don't produce a 'ships as slop' verdict on their own, but they compound. Two or more in the same view is a confirmation:

  • Inter/Roboto/Open Sans as display with no pairing face (gate 1) — a one-font page is a template page.
  • 3-equal-column icon-tile feature grid (gate 3) — the universal template every LLM emits.
  • transition-all (gate 10) — animates properties that should be instant.
  • Universal hover:scale-105 (gate 11) — every card lifts on hover with no purpose.
  • Bouncy overshoot easing on UI (gate 12) — tasteless throwback.
  • Missing interaction states (gate 26) — no :focus-visible, :active, or :disabled.
  • No prefers-reduced-motion (gate 27) — every animation needs a reduced-motion fallback.
  • Emoji as feature icon (gate 30) — ✨🚀⚡🔥🎯✅ standing in for an icon library.
  • Re-drawn UI chrome (gate 47) — fake browser bars, phone frames, code-block windows.

How GradientDeck's generators pass

Every compose_ui_treatment template (hero, cta, card, empty_state, section, pricing, login, navbar, footer, dashboard) passes the 58-gate test clean. Here's what's baked in:

  • Token block: :root { --gd-accent, --gd-bg, --gd-text, --gd-surface, --gd-border, --gd-shadow } — every color references a named token.
  • Interaction states: button:focus-visible { outline: 2px solid var(--gd-accent); }, button:active { transform: translateY(1px); }, button:disabled { opacity: 0.55; cursor: not-allowed; }.
  • Reduced-motion: @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }.
  • Overflow safety: overflow-x: clip on the root (not hidden — clip preserves sticky/fixed).
  • Display headers: h1-h4 { overflow-wrap: anywhere; min-width: 0; } — long words don't overflow viewport.
  • Button text: button { white-space: nowrap; } — clickable text never wraps to two lines.
  • Solid headline: no gradient text. Color comes from var(--gd-text).
  • Single accent: one subtle radial (not a multi-color mesh). CTA is solid var(--gd-accent).
  • No fabricated metrics: dashboard template uses — placeholders instead of '12.4k' or '98%'.

Running the slop test yourself

The slop_test tool accepts any HTML/CSS/JSX/Tailwind code and returns all 58 gates with their status:

Ask your agent: "Use GradientDeck to run a slop test on this code." and paste your component.

The response includes:

  • summary: total gates, pass count, fail count, review count, critical count.
  • findings: each failure with its gate number, severity, issue description, and fix.
  • gates: all 58 gates with pass/fail/review status.
  • verdict: 'ships as slop' (critical failures), 'reads as AI-generated' (3+ failures), 'close — fix the flagged gates' (1-2 failures), or 'clean'.

~30 of 58 gates are auto-checked with regex. The remaining ~28 are marked 'review' — they need rendering or file-system context (accent area %, hero fold fit, nav/footer fingerprints, sticky overlaps) that a stateless MCP can't provide. The gates are still present in the response with their fixes; they're just honestly marked as needing manual review.

The companion skill (coming soon)

The MCP's slop test is programmatic — it pattern-matches code strings. A companion skill (installable via npx skills add) will add the behavioral layer: a 7-step design flow (pre-flight scan → context gate → macrostructure pick → theme → rulesets → build → slop-test → stamp), a 6-axis pre-emit self-critique, automatic diversification tracking, and curated reference docs. The skill calls the MCP for assets and checks; the MCP provides the tools. Together, they match the depth of Hallmark.


The anti-slop system is what makes GradientDeck MCP different from every other design tool. It doesn't just generate — it refuses to ship slop. Connect at gradientdeck.com/mcp and try it.