Claude Code skill · Open source
kill-the-ai-slop
A Claude Code skill that reviews UI like a blunt design director: 20 tells, greppable evidence, and a 0-100 Slop Score with fixes you can execute without taste.
- Status
- Open source
- Stack
- Claude Code, Markdown rubric, Shell
- Links
- GitHub ↗
The problem
Teams argue about whether a UI “looks AI-generated” the way people argue about taste: loudly, and without evidence. Meanwhile the tells are sitting right there in the markup. The indigo-to-pink gradient, the sparkle pill announcing a launch that never happened, the testimonial from a person who does not exist. Generators do not make bad choices. They make no choices, and a non-choice is detectable.
So instead of arguing, I wrote the argument down.
What I built
kill-the-ai-slop is a Claude Code skill that critiques landing pages, dashboards, components, and screenshots in the voice of a design director with fifteen years of shipped product. The core is a 900-line rubric of 20 tells. Each tell has greppable detection signals, a point weight, and carve-outs, so a deliberate choice that happens to be unfashionable never gets punished. The output is a Slop Report: findings that quote exact classes and copy with file and line references, and a 0-100 Slop Score.
Slop is not ugliness. Slop is the absence of decisions.
Real output, not a mockup
Both pairs below are real files in the repo, rendered in a real browser. The “before” is exactly what a generator emits; the “after” is the same slot after every fix in the skill’s report was executed.
The report that produced that first pair reads like this, verbatim: “Every detection signal for this tell at once, plus one the rubric didn’t anticipate: the sparkle rendered twice, icon and emoji, on an announcement whose link goes to #. There is no v2.0; there is no v1.0.”
How it works
For code, the skill reads every UI file in scope plus the token layer: tailwind config, global CSS, and font registration. For a live URL it fetches the raw markup, because markdown-converting fetchers strip the class attributes that are the evidence.
Each tell documents its carve-outs. A purple gradient a brand owns, a centered hero on a manifesto page, or an emoji in a genuinely playful product may be a deliberate decision. The skill checks that context before it scores.
In screenshot mode, the skill scores only what an image can show. It skips code-only checks such as hrefs, focus states, and motion, then says so in the finding.
Why it exists
I kept giving the same design review to AI-generated UI, one comment at a time. This skill is that review, encoded once and executable by anyone, including people who do not trust their own taste yet. Writing taste down turns out to be a design problem, and that is the part I enjoyed most.