Design taste
A de-sloppification gate, run against one standard: taste is a design where a real decision was
made; slop is a design where every unforced choice took the machine default. This skill is
subtractive — it finds default choices and replaces them. It does not manufacture taste; if a
design is clean but forgettable, that is design-bolder's job, not this one.
It reads tells from the code (fonts, color values, layout primitives, copy strings), so it needs no
live render. Ground it in .design-context.md.
Run me last
This is the closing check of a design sequence. After building (design-frontend), amplifying
(design-bolder), animating (design-animate), or polishing (design-polish), run this before
shipping to confirm none of that work introduced slop. Any skill that generates or edits UI should
hand off here as its final step. On its own, run it whenever a design "looks AI-made."
Procedure
- Run the detector.
python3 scripts/detect-slop.py <target-paths> (from the skill directory;
pass the project or component dir). It returns a deterministic candidate list for every
machine-detectable tell — fonts, pure #000/#fff, the AI gradient, glassmorphism, animated
layout props, bounce easing, slop emoji, and the copy phrases. Do not eyeball these; the regex
already found them. Exit code 1 = hits.
- Triage the hits. Each is a candidate, not a verdict — some are legitimate in context (an
"unlock" feature, a mandated system font). Keep the real tells; drop false positives with a
one-line reason.
- Run the judgment checks by hand — the ones a regex cannot see (below): contrast spread,
centered/symmetric layout, card-nesting, spacing rhythm, three-of-everything, section order,
hero-art, one-direction coherence, and the friction test (was ANY choice argued for?).
- Fast exit. IF the detector returned nothing real AND one choice was argued for → record PASS
in one line and stop. Do not over-audit clean work; a no-op is the right result on a design that
already made decisions.
- Apply the move for each surviving tell — the fix from the detector hit or the judgment check,
not "make it more unique."
- Coherence pass. Confirm the screen sits inside one direction (editorial, brutalist, luxury,
industrial, soft…). IF two or more aesthetics are averaged together → pick one, remove the rest.
- Report in the format below.
Not this skill's job
IF the design is clean of tells but nothing was argued for (correct, competent, forgettable) → do
NOT invent a bold move here. Report it as "slop-free but timid" and route to design-bolder. This
gate removes defaults; it does not generate the one decision that makes a design memorable.
The standard the checks enforce
"Not slop" means, in priority order:
- One decision pushed well past the default, with everything else deferring to it — not ten
timid flourishes.
- Deliberate contrast — the primary element reads many times louder than the secondary, not
1.2×. Flat contrast is the signature of "generated."
- One coherent direction — not several aesthetics averaged together.
- Anchored to a specific reference, not to adjectives ("modern / clean / premium" is the absence
of a brief).
The checks
The fix lookup. detect-slop.py (step 1) already flags the mechanical categories — Type, Color,
Depth, Motion, Decoration, and Copy — so triage its hits against these entries rather than re-scanning
by hand. Layout & depth (alignment/cards/grid/spacing), hero-art, and Page structure are judgment
checks a regex can't see — run those yourself (they are also listed in procedure step 3). The
exhaustive per-tell list is in references/slop-taxonomy.md. Format: Check X. IF <condition> →
DO <fix>.
Type
- Check the primary font. IF Inter, Roboto, Open Sans, Helvetica Neue, or system-ui → replace with
a distinctive display+body pairing (
design-frontend Font Requirements); remove from fallbacks too.
- Check the ramp. IF one weight carries hierarchy, or steps are ~1.2× → rebuild a modular scale
with real weight contrast.
- Check headings. IF gradient text → make solid.
Color
- Check for a purple→blue / indigo→violet / teal→cyan gradient. IF present → remove; one hue + one
sharp accent.
- Check neutrals. IF
#000 or #fff → near-black/near-white tinted toward the brand hue.
- Check distribution. IF five evenly-weighted colors, none dominant → one color owns the majority,
one accent.
- Check text on color. IF gray body text on a saturated panel → fix contrast; never gray-on-color.
Layout & depth
- Check alignment. IF everything centered → strong left edge; center only for effect.
- Check cards. IF every block is a card, or cards nest → let content sit on the page; group with
space and type.
- Check the feature grid. IF symmetric equal-column three-across → asymmetric, or one item breaks
out.
- Check spacing. IF uniform everywhere → tight within groups, generous between.
- Check surfaces. IF glassmorphism, identical drop shadows, or one border-radius on everything →
decide depth per surface; most need none.
Decoration
- Check for emoji as icons/bullets, or ✨/🚀/🔥 as "delight" → remove; one real icon set with
intent, or nothing.
- Check headings. IF a large rounded icon sits above every heading → drop most.
- Check hero art. IF blob shapes / gradient mesh / floating abstract SVG stand in for content →
real UI, real imagery, or type.
Motion
- Check entrances. IF every element fades-and-rises, or every hover micro-bounces → one
orchestrated load; motion only for state changes.
- Check properties. IF width/height/margin/padding animate, or easing is bounce/elastic →
transform+opacity only, ease-out quart/quint/expo.
Copy (highest-signal — text betrays the model fastest)
- Check for adjective triads ("powerful, simple, and beautiful") → one specific claim.
- Check for empty verbs/adverbs ("elevate, unlock, supercharge, seamlessly, effortlessly") → the
concrete action.
- Check for template openers ("In today's fast-paced world…", "Say goodbye to…") → open on the
reader's specific problem.
- Check for hedged claims ("powerful yet simple") → choose the one true emphasis.
- Check for emoji headers and Title Case On Everything → sentence case; headings as claims.
- Hand the rewrite to
design-clarify.
Page structure
- Check section order. IF hero → three feature cards → 3 steps → testimonial → pricing → CTA at
equal width → reorder to the real argument; let one section break format.
- Check cardinality. IF everything comes in threes → use the real number.
Report format
Output exactly:
- Verdict — one line: PASS (no slop) / slop-free but timid / slop found. Include a count of
distinct tells (weight type, color, and copy heaviest).
- Tells — ranked list; each is
location — tell → fix. Empty on PASS.
- Next — the single skill to hand to, if any (
design-bolder if timid, design-clarify for copy).
Do NOT flag these
- A convention chosen for a stated reason (regulated flow, accessibility-first, a mandated design
system). Conventional-on-purpose is a decision. Confirm intent before "fixing" it.
- A restrained interface precise in its few choices — earned minimalism, not slop.
When NOT to use this skill
- Generating new UI →
design-frontend. Making a timid design bold → design-bolder. This
skill only removes slop.
- UX/usability problems →
design-critique / design-audit. Technical quality →
design-check. Brand identity / logos / illustration → out of scope.
Sequence & cross-family edges
- Runs AFTER (as their final gate):
design-frontend, design-bolder, design-animate,
design-polish, design-distill, design-colorize.
- Routes TO:
design-bolder (slop-free but timid), design-clarify (copy rewrite),
design-distill (when the fix is restraint).
- Pairs WITH:
design-critique (UX quality) and design-check (technical) — this skill owns the
aesthetic-defaultness axis only.
- Run first:
design-context — "slop" is undefined without an audience and a feeling.
1---2name: design-taste3description: De-sloppification gate for UI — detect and remove generic "AI slop", the machine-default tells across type, color, layout, depth, decoration, motion, copy, and page structure, with an imperative check-and-fix for each. Ships a deterministic detector (scripts/detect-slop.py) that greps the code for the mechanical tells so the model only judges what a regex can't. Run it as the FINAL step after other design skills (design-frontend, design-bolder, design-polish, design-animate) to confirm no slop was introduced, or standalone when a design "looks AI-made", generic, templated, or safe. It removes slop; it does not manufacture taste — route clean-but-timid results to design-bolder.4---56# Design taste78A **de-sloppification gate**, run against one standard: taste is a design where a real decision was9made; slop is a design where every unforced choice took the machine default. This skill is10**subtractive** — it finds default choices and replaces them. It does not manufacture taste; if a11design is clean but forgettable, that is `design-bolder`'s job, not this one.1213It reads tells from the code (fonts, color values, layout primitives, copy strings), so it needs no14live render. Ground it in `.design-context.md`.1516## Run me last1718This is the closing check of a design sequence. After building (`design-frontend`), amplifying19(`design-bolder`), animating (`design-animate`), or polishing (`design-polish`), run this before20shipping to confirm none of that work introduced slop. Any skill that generates or edits UI should21hand off here as its final step. On its own, run it whenever a design "looks AI-made."2223## Procedure24251. **Run the detector.** `python3 scripts/detect-slop.py <target-paths>` (from the skill directory;26 pass the project or component dir). It returns a deterministic candidate list for every27 machine-detectable tell — fonts, pure `#000`/`#fff`, the AI gradient, glassmorphism, animated28 layout props, bounce easing, slop emoji, and the copy phrases. Do not eyeball these; the regex29 already found them. Exit code 1 = hits.302. **Triage the hits.** Each is a candidate, not a verdict — some are legitimate in context (an31 "unlock" feature, a mandated system font). Keep the real tells; drop false positives with a32 one-line reason.333. **Run the judgment checks by hand** — the ones a regex cannot see (below): contrast spread,34 centered/symmetric layout, card-nesting, spacing rhythm, three-of-everything, section order,35 hero-art, one-direction coherence, and the friction test (*was ANY choice argued for?*).364. **Fast exit.** IF the detector returned nothing real AND one choice was argued for → record PASS37 in one line and stop. Do not over-audit clean work; a no-op is the right result on a design that38 already made decisions.395. **Apply the move** for each surviving tell — the fix from the detector hit or the judgment check,40 not "make it more unique."416. **Coherence pass.** Confirm the screen sits inside one direction (editorial, brutalist, luxury,42 industrial, soft…). IF two or more aesthetics are averaged together → pick one, remove the rest.437. **Report** in the format below.4445## Not this skill's job4647IF the design is clean of tells but nothing was argued for (correct, competent, forgettable) → do48NOT invent a bold move here. Report it as "slop-free but timid" and route to `design-bolder`. This49gate removes defaults; it does not generate the one decision that makes a design memorable.5051## The standard the checks enforce5253"Not slop" means, in priority order:54551. **One decision pushed well past the default, with everything else deferring to it** — not ten56 timid flourishes.572. **Deliberate contrast** — the primary element reads many times louder than the secondary, not58 1.2×. Flat contrast is the signature of "generated."593. **One coherent direction** — not several aesthetics averaged together.604. **Anchored to a specific reference**, not to adjectives ("modern / clean / premium" is the absence61 of a brief).6263## The checks6465The **fix lookup**. `detect-slop.py` (step 1) already flags the mechanical categories — Type, Color,66Depth, Motion, Decoration, and Copy — so triage its hits against these entries rather than re-scanning67by hand. **Layout & depth (alignment/cards/grid/spacing), hero-art, and Page structure are judgment68checks** a regex can't see — run those yourself (they are also listed in procedure step 3). The69exhaustive per-tell list is in `references/slop-taxonomy.md`. Format: **Check X.** IF `<condition>` →70DO `<fix>`.7172### Type7374- **Check the primary font.** IF Inter, Roboto, Open Sans, Helvetica Neue, or system-ui → replace with75 a distinctive display+body pairing (`design-frontend` Font Requirements); remove from fallbacks too.76- **Check the ramp.** IF one weight carries hierarchy, or steps are ~1.2× → rebuild a modular scale77 with real weight contrast.78- **Check headings.** IF gradient text → make solid.7980### Color8182- **Check for a purple→blue / indigo→violet / teal→cyan gradient.** IF present → remove; one hue + one83 sharp accent.84- **Check neutrals.** IF `#000` or `#fff` → near-black/near-white tinted toward the brand hue.85- **Check distribution.** IF five evenly-weighted colors, none dominant → one color owns the majority,86 one accent.87- **Check text on color.** IF gray body text on a saturated panel → fix contrast; never gray-on-color.8889### Layout & depth9091- **Check alignment.** IF everything centered → strong left edge; center only for effect.92- **Check cards.** IF every block is a card, or cards nest → let content sit on the page; group with93 space and type.94- **Check the feature grid.** IF symmetric equal-column three-across → asymmetric, or one item breaks95 out.96- **Check spacing.** IF uniform everywhere → tight within groups, generous between.97- **Check surfaces.** IF glassmorphism, identical drop shadows, or one border-radius on everything →98 decide depth per surface; most need none.99100### Decoration101102- **Check for emoji** as icons/bullets, or ✨/🚀/🔥 as "delight" → remove; one real icon set with103 intent, or nothing.104- **Check headings.** IF a large rounded icon sits above every heading → drop most.105- **Check hero art.** IF blob shapes / gradient mesh / floating abstract SVG stand in for content →106 real UI, real imagery, or type.107108### Motion109110- **Check entrances.** IF every element fades-and-rises, or every hover micro-bounces → one111 orchestrated load; motion only for state changes.112- **Check properties.** IF width/height/margin/padding animate, or easing is bounce/elastic →113 transform+opacity only, ease-out quart/quint/expo.114115### Copy (highest-signal — text betrays the model fastest)116117- **Check for adjective triads** ("powerful, simple, and beautiful") → one specific claim.118- **Check for empty verbs/adverbs** ("elevate, unlock, supercharge, seamlessly, effortlessly") → the119 concrete action.120- **Check for template openers** ("In today's fast-paced world…", "Say goodbye to…") → open on the121 reader's specific problem.122- **Check for hedged claims** ("powerful yet simple") → choose the one true emphasis.123- **Check for emoji headers and Title Case On Everything** → sentence case; headings as claims.124- Hand the rewrite to `design-clarify`.125126### Page structure127128- **Check section order.** IF hero → three feature cards → 3 steps → testimonial → pricing → CTA at129 equal width → reorder to the real argument; let one section break format.130- **Check cardinality.** IF everything comes in threes → use the real number.131132## Report format133134Output exactly:1351361. **Verdict** — one line: PASS (no slop) / slop-free but timid / slop found. Include a count of137 distinct tells (weight type, color, and copy heaviest).1382. **Tells** — ranked list; each is `location — tell → fix`. Empty on PASS.1393. **Next** — the single skill to hand to, if any (`design-bolder` if timid, `design-clarify` for copy).140141## Do NOT flag these142143- A convention chosen for a stated reason (regulated flow, accessibility-first, a mandated design144 system). Conventional-on-purpose is a decision. Confirm intent before "fixing" it.145- A restrained interface precise in its few choices — earned minimalism, not slop.146147## When NOT to use this skill148149- **Generating new UI** → `design-frontend`. **Making a timid design bold** → `design-bolder`. This150 skill only removes slop.151- **UX/usability problems** → `design-critique` / `design-audit`. **Technical quality** →152 `design-check`. **Brand identity / logos / illustration** → out of scope.153154## Sequence & cross-family edges155156- **Runs AFTER** (as their final gate): `design-frontend`, `design-bolder`, `design-animate`,157 `design-polish`, `design-distill`, `design-colorize`.158- **Routes TO**: `design-bolder` (slop-free but timid), `design-clarify` (copy rewrite),159 `design-distill` (when the fix is restraint).160- **Pairs WITH**: `design-critique` (UX quality) and `design-check` (technical) — this skill owns the161 aesthetic-defaultness axis only.162- **Run first**: `design-context` — "slop" is undefined without an audience and a feeling.