# Slop taxonomy

> Repo-specific model of AI-slop tells: categories, named signals, and how the field guide and skill share the same taxonomy language.

- Repository: yetone/kill-ai-slop
- GitHub: https://github.com/yetone/kill-ai-slop
- Human docs: https://grok-wiki.com/public/docs/yetone-kill-ai-slop-c0d8c9670cbb
- Complete Markdown: https://grok-wiki.com/public/docs/yetone-kill-ai-slop-c0d8c9670cbb/llms-full.txt

## Source Files

- `skill/references/taxonomy.md`
- `website/src/data/catalogue.ts`
- `skill/references/detection.md`
- `README.md`

---

---
title: "Slop taxonomy"
description: "Repo-specific model of AI-slop tells: categories, named signals, and how the field guide and skill share the same taxonomy language."
---

`website/src/data/catalogue.ts` is the single source of truth for the AI-slop catalogue: 23 numbered tells, two tiers, six groups, and per-tell `what` / `why` / `fix` / `detect` fields that the Astro field guide renders and that the `kill-ai-slop` skill enforces. The skill restates the same model in `skill/references/taxonomy.md`, with code-level signals in `skill/references/detection.md` (encoded by `skill/scripts/scan.mjs`) and remediations in `skill/references/fixes.md`.

## Canonical model

Kill AI Slop defines **tells** — named machine-default UI/copy patterns — not abstract design theory. Every tell is meant to be findable in shipped products; each field-guide entry rebuilds the tell in plain HTML so the machine default and the clean fix sit side by side.

| Surface | Role | Taxonomy artifact |
| --- | --- | --- |
| Website (`website/`) | Multilingual field guide + before→after demos | `catalogue.ts` entries, `GROUPS`, `demo` keys |
| Agent skill (`skill/`) | Scan, triage, report, propose/apply fixes | `references/taxonomy.md`, `detection.md`, `fixes.md` + `scripts/scan.mjs` |

```text
website/src/data/catalogue.ts     ← single source of truth (spec)
        │
        ├─► field guide UI (groups, copy, demos)
        │
        └─► skill enforcement
                taxonomy.md   (what / why / fix language)
                detection.md  (human + scanner patterns)
                fixes.md      (remediation playbook)
                scan.mjs      (encodes detection; never edits files)
```

<Note>
English catalogue strings are the source of truth. Chinese is inline in `catalogue.ts`; Japanese and Korean merge from `catalogue.i18n.ts` and fall back to English at the localization layer.
</Note>

## Decision rule

Slop is the **absence of a decision**. A tell counts only when the element is a default nobody chose. The same visual or copy move, chosen and defended for the product, is not slop. Detection docs treat every match as a **lead, not a verdict** — open the file and confirm before acting.

## Tiers

Catalogue comments and `taxonomy.md` use the same two-tier split:

| Tier | Label | Meaning |
| --- | --- | --- |
| `1` | Classic | Widely recognized tells most people already spot |
| `2` | Evolved | Newer defaults that already read as templated (e.g. “tasteful terminal”) |

In `catalogue.ts`, `Entry.tier` is `1 | 2`. Entries are numbered by position in the array (`n` is applied via map), so inserting a case renumbers the rest automatically.

## Groups

Stable group keys (`Group` type) and English labels:

| `group` | English label | Scope in taxonomy |
| --- | --- | --- |
| `color` | Color | Gradients, palettes, semantic/status color defaults |
| `type` | Type | Serif misuse, decorative strike/highlight emphasis |
| `copy` | Copy | Keyword highlighting, AI voice, decorative emoji |
| `component` | Components | Status dots, callout bars, icon tiles, glass, shadows, badges, SVG marks |
| `layout` | Layout | All-caps interchangeable card/stat grids |
| `evolved` | Evolved slop | Terminal-chic mono + near-black template look |

Localized group titles live in `GROUPS` (`en` / `zh` / `ja` / `ko`).

## Tell inventory

Numbers **01–23** are shared by `skill/references/taxonomy.md` and `skill/references/detection.md`. Catalogue stable string `id` values appear below only where present in the supplied `catalogue.ts` excerpt; remaining tells are identified by number and title until you read the full raw entry list.

### Color (`group: "color"`, classic)

| # | Title | Catalogue `id` (when present) | One-line what |
| --- | --- | --- | --- |
| 01 | Indigo→violet gradient | `indigo-violet-gradient` | `#6366f1 → #a855f7` diagonal on buttons, glows, heroes |
| 02 | Gradient headline text | `gradient-text` | `background-clip: text` rainbow fills on headings |
| 03 | Warm “cozy” palette | `warm-cozy-palette` | Amber/stone/orange wash on soft beige |
| 04 | Default semantic palette | `default-semantic-palette` | Stock info/tip/success/error `-50` / `-600` set |
| 05 | One-hue status box | `mono-hue-alert` | Border, text, and tint bg all one hue at three opacities |
| 06 | Gradients as atmosphere | `atmosphere-gradient` | Page-wide glow + gradient card fills as “premium dark” |

### Type (`group: "type"`, classic)

| # | Title | Catalogue `id` (when present) | One-line what |
| --- | --- | --- | --- |
| 07 | Serif-italic on one word | `serif-emphasis` | One word in a sans headline swapped to serif italic |
| 08 | Serif where sans belongs | `serif-body-misuse` | Display serif (Playfair/Lora/etc.) as UI/body on tools/SaaS |
| 09 | Decorative strikes & highlights | — | Strike/underline/highlight as decoration, not edit/link/annotation |

### Copy (`group: "copy"`, classic)

| # | Title | One-line what |
| --- | --- | --- |
| 10 | Highlighted keywords | Colored/bold spans mid-paragraph as default emphasis |
| 11 | AI copywriting voice | “Not just X — it’s Y”, triad slogans, em-dash rhythm |
| 12 | Emoji everywhere | Emoji on every heading, button, and bullet |

### Components (`group: "component"`, classic)

| # | Title | One-line what |
| --- | --- | --- |
| 13 | Glowing status dot | Pulsing/haloing green “ready/online/live” gem |
| 14 | Rounded card, colored left border | Docs admonition bar wrapped around ordinary list rows |
| 15 | Rounded-square icon tiles | Feature grid of icon chips with little content link |
| 16 | Max radius + glassmorphism | `rounded-full` + `backdrop-blur` as default surface |
| 17 | Oversized drop shadow | Huge soft blur/spread larger than the casting element |
| 18 | Corners that don’t nest | Same large radius on nested boxes (no outer − padding math) |
| 19 | Badge and pill spam | Decorative “New/Beta/Popular” pills in chrome |
| 20 | AI-drawn SVG icons | Blob/mascot primitive SVG shipped as product mark |
| 21 | Icon in a tint of itself | Icon on `bg-{hue}/10` matching its own color |

### Layout (`group: "layout"`, classic)

| # | Title | One-line what |
| --- | --- | --- |
| 22 | All-caps card grid | ALL-CAPS micro-labels + number/icon in equal-weight cards |

### Evolved slop (`group: "evolved"`, tier 2)

| # | Title | One-line what |
| --- | --- | --- |
| 23 | The “tasteful terminal” | Mono UI chrome, near-black, one warm accent, ASCII decoration |

## Entry shape (catalogue)

```ts
export type Group = "color" | "type" | "copy" | "component" | "layout" | "evolved";

export interface Bi {
  en: string;
  zh: string;
  ja?: string;
  ko?: string;
}

export interface Entry {
  id: string;
  n: number;           // assigned by position
  tier: 1 | 2;
  group: Group;
  title: Bi;
  what: Bi;            // one line: what the tell is
  why: Bi;             // why it reads as machine-made
  fix: Bi;             // the clean move
  detect: string[];    // code-level signals (chips + skill heuristics)
  demo?: string;       // key into demos / BeforeAfter data
}
```

Field roles:

| Field | Use |
| --- | --- |
| `id` | Stable tell key; demo key usually matches when set |
| `n` | Display number; renumbers with array order |
| `tier` / `group` | Filter and section grouping on the site |
| `what` / `why` / `fix` | Shared prose language with skill taxonomy |
| `detect` | Short signal chips; parallel to detection reference patterns |
| `demo` | Optional live HTML before→after key |

## How the skill speaks the same language

| Concern | Skill reference | Aligns with catalogue |
| --- | --- | --- |
| Names, what/why/fix | `skill/references/taxonomy.md` | Entry titles + `what` / `why` / `fix` |
| Code-level signals | `skill/references/detection.md` + `scan.mjs` | Entry `detect[]` |
| Remediation | `skill/references/fixes.md` | Entry `fix` + site demos |
| Invocation path | `skill/SKILL.md` (scan → triage → report → fix) | Same 23-tell set |

Detection is numbered **01–23** to match taxonomy. Scan scope (from `detection.md`): frontend sources `.html .css .scss .tsx .jsx .ts .js .vue .svelte .astro .md .mdx` plus `tailwind.config.*`; skip `node_modules`, `dist`, `build`, `.git`, `out`, `.next`, `.astro`, `coverage`, `vendor`, `*.min.*`, and lockfiles.

Scanner entry points (read-only; never edit files):

```bash
node skill/scripts/scan.mjs path/to/project          # grouped report
node skill/scripts/scan.mjs path/to/project --json    # machine-readable
```

## Signal language (examples)

Catalogue `detect` chips are short human/scanner heuristics. Skill `detection.md` expands them to concrete `rg` patterns and false-positive notes. Examples from catalogue entries present in evidence:

| Tell | Sample `detect` chips |
| --- | --- |
| `indigo-violet-gradient` | `from-indigo-500 to-purple-500`, `#6366f1 → #a855f7`, `shadow-purple-500/50` |
| `gradient-text` | `bg-clip-text text-transparent`, `background-clip: text` |
| `warm-cozy-palette` | `amber-50 / stone-100 / orange-400`, `border-amber-200` |
| `default-semantic-palette` | `-50 bg + -600 text semantic set` |
| `mono-hue-alert` | `border-{c} text-{c} bg-{c}/10 status box` |
| `atmosphere-gradient` | `radial-gradient page background`, dark navy + top glow |
| `serif-emphasis` | `font-serif italic inside a sans <h1>` |
| `serif-body-misuse` | Playfair / Lora / Cormorant family usage in UI body |

Hard-to-grep tells (serif-italic nesting, nested corner math, visual SVG judgment, tasteful terminal) require human confirmation even when a pattern fires.

## Fix language (taxonomy pattern)

Every taxonomy entry ends with a short **Fix:** line. Pattern:

1. Remove or stop the default reflex.
2. Prefer structure (weight, space, hierarchy, one chosen accent) over decoration.
3. Keep the device only when it carries real product meaning (true status, real link, real brand).

Site demos (`demo` keys) and the remediation playbook illustrate the preferred outcome; the standalone scanner never applies fixes — only an agent host following `skill/SKILL.md` proposes or applies them.

## Alignment constraints

When extending or changing the model:

- Add or edit the tell in `catalogue.ts` first (SoT).
- Keep `taxonomy.md` / `detection.md` / `fixes.md` on the same number, name, and intent.
- Attach a plain-HTML demo when the site should show before→after.
- Do not treat a deliberate brand choice as a hit without confirmation.

## Related pages

<CardGroup>
  <Card title="Catalogue model" href="/catalogue-model">
    How catalogue.ts owns tells, demos, and i18n, and where site data ends and skill references begin.
  </Card>
  <Card title="Detection patterns" href="/detection-patterns">
    Per-tell code signals, match targets, and mapping back to taxonomy numbers.
  </Card>
  <Card title="Remediation playbook" href="/fixes-playbook">
    Per-tell clean fixes and how before/after demos show the preferred outcome.
  </Card>
  <Card title="Extend the catalogue" href="/extend-catalogue">
    Add or update a tell across catalogue, i18n, demo, and skill references.
  </Card>
  <Card title="Skill workflow" href="/skill-workflow">
    Scan, triage, report, then propose or apply fixes without silent scanner edits.
  </Card>
  <Card title="Catalogue and demos data" href="/catalogue-data-reference">
    Field shapes for catalogue.ts, catalogue.i18n.ts, and demos.ts.
  </Card>
</CardGroup>
