Source: wiki synthesis: Anti-AI Slop Guide, Hallmark, unslop-ui

Three wiki articles independently solve the same problem — LLM-generated UI reading as obviously AI-made — with three different mechanisms, and none of them cite all three together. anti-ai-slop-guide.md is a hand-curated prescriptive reference. Hallmark is a generative refusal layer built into Claude Code and Cursor. unslop-ui is a data-mined detection scanner with an exit code CI can fail on. Read together, they aren’t redundant takes on the same list — they’re three layers of a defense-in-depth pipeline, and the fact that they converged independently on nearly the same “top offenders” is itself worth documenting.

Key Takeaways

  • Same target, three different points in the pipeline. The guide operates at review/reference time — a checklist consulted before or after building. Hallmark operates at generation time — structural decisions get made differently from the start. unslop-ui operates at verification time — a scanner with an exit code that can fail a CI build on high-severity findings.
  • Three unrelated methodologies named nearly the same offenders. The guide’s hand-curated table (drawn from 23 design skills), Hallmark’s five “refused AI tells,” and unslop-ui’s Reddit-frequency-ranked top tells (mined from ~3.2 million posts across 47 subreddits) all separately flag: purple-to-blue gradients, default/Inter-style fonts, centered symmetry, and the three-equal-card / generic-feature-card layout as top offenders. One is opinion-curated, one is a single skill author’s refusal rules, one is mined from what people actually complain about — three independent processes landing on the same four patterns is real corroboration that this taxonomy is not one person’s taste.
  • None of the three substitute for the other two. A prescriptive guide doesn’t stop a generation from producing the pattern in the first place. A generative refusal layer (Hallmark) doesn’t catch drift introduced by a different tool, a human edit, or a dependency update after the fact. A scanner (unslop-ui) tells you that something is wrong but not why it’s a bad choice for this project’s genre — that’s the guide’s job.
  • The natural stack order is prescribe → generate → detect. Internalize the taxonomy (guide), build with a tool that refuses the defaults by construction (Hallmark), gate the build with a scanner that catches what slipped through (unslop-ui, wired into CI).
  • Their blind spots differ, which is exactly why stacking beats using either alone. Hallmark’s rules are author-curated judgment calls about what counts as “AI-shaped.” unslop-ui’s weights are usage-frequency-curated and deliberately silent on patterns the data shows nobody minds — mesh/aurora backgrounds, bento grids, and glassmorphism are explicitly not flagged by unslop-ui “because the data does not show people minding them.”
  • This is a general software-quality shape applied to an aesthetic problem that doesn’t normally get one. Prescriptive-reference + generative-refusal + empirical-detection is the same three-layer pattern as style-guide docs + a linter’s default config + a CI gate — applied here to “does this look AI-generated” instead of “does this compile cleanly.”

The Convergence Table

PatternAnti-AI Slop Guide (hand-curated, 23 skills)Hallmark (5 refused tells)unslop-ui (Reddit-ranked, ~3.2M posts)
Purple / purple-to-blue gradientsBanned — “the #1 AI aesthetic fingerprint”Refused tell #1Top-weighted tell
Default sans font (Inter, Roboto, etc.)Banned — “default of defaults”Refused tell #2 (mandates display/body type pairing)Top-weighted tell
Centered symmetryBanned — “reads as timid, lacking confidence”Refused tell #3Rolled into layout tells
Generic feature-card grid / 3 equal-width cardsBanned — “the single most common AI layout”Refused tell #4 — “the universal template”Top-weighted tell (shadcn/Tailwind default + centered-hero-plus-three-cards)
Default top-nav (wordmark-left, 4-link-center, CTA-right)Not separately namedRefused tell #5Not separately named
GlassmorphismBanned — “AI uses glass as a default surface”Not addressedExplicitly not flagged — data shows no complaints

Where They Disagree

The one clean disagreement in the table above is worth naming rather than smoothing over: the guide bans glassmorphism outright (“reserve glass for one or two accent elements max”), while unslop-ui’s dataset says people don’t actually complain about it, so it stays unflagged. That’s a genuine empirical check on the guide’s priors — a hand-curated rule that a frequency-weighted dataset doesn’t corroborate. It doesn’t mean the guide is wrong (glassmorphism may still be poor practice for other reasons), but it’s a concrete case where the detection layer’s data and the prescriptive layer’s judgment point in different directions, and anyone stacking all three should know that going in. ^[inferred]

Try It

  1. Read the guide once, front to back. Internalize the “why” behind each banned pattern in the Do-This-Instead column, not just the pattern names — that’s what makes the other two layers useful instead of just restrictive.
  2. Install Hallmark (npx skills add nutlope/hallmark) into whatever you build UI with day to day, so the defaults you generate are already refusing the top tells before you ever get to review.
  3. Wire the scanner into CI: python3 devibe_scan.py ./src --severity high as a merge gate. This is the layer that catches drift from sources the first two don’t cover — a different tool, a human contributor, a dependency-driven redesign.
  4. When the scanner flags something, fix it with the guide’s logic, not just by deleting the flagged element. The guide’s “Do This Instead” column is what turns a scanner finding into an actual design decision.
  5. Re-check the glassmorphism disagreement periodically. If unslop-ui’s dataset shifts (more recent Reddit sentiment) or the guide gets refreshed, see whether the two converge or stay split — it’s a live signal, not a settled one.