{"id":50800483,"url":"https://github.com/ravidsrk/slop-detect","last_synced_at":"2026-06-12T19:01:44.817Z","repository":{"id":360408839,"uuid":"1250012216","full_name":"ravidsrk/slop-detect","owner":"ravidsrk","description":"Score any landing page against the 16-rule AI-design-slop fingerprint. Detect Cursor / v0 / Lovable templates — and get a fix prompt to clean them up.","archived":false,"fork":false,"pushed_at":"2026-06-05T08:01:40.000Z","size":659,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T08:10:28.510Z","etag":null,"topics":["ai-design","ai-slop","cloudflare-workers","cursor","design-audit","developer-tools","landing-page","lovable","playwright","tailwind","v0"],"latest_commit_sha":null,"homepage":"https://slop-detect.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ravidsrk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-26T08:17:51.000Z","updated_at":"2026-06-05T08:00:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ravidsrk/slop-detect","commit_stats":null,"previous_names":["ravidsrk/slop-detect"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ravidsrk/slop-detect","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravidsrk%2Fslop-detect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravidsrk%2Fslop-detect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravidsrk%2Fslop-detect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravidsrk%2Fslop-detect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravidsrk","download_url":"https://codeload.github.com/ravidsrk/slop-detect/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravidsrk%2Fslop-detect/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34258372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-design","ai-slop","cloudflare-workers","cursor","design-audit","developer-tools","landing-page","lovable","playwright","tailwind","v0"],"created_at":"2026-06-12T19:01:42.668Z","updated_at":"2026-06-12T19:01:44.783Z","avatar_url":"https://github.com/ravidsrk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# slop-detect\n\n\u003e **Score any landing page against the 27-rule AI-design-slop fingerprint — then keep it clean.**\n\u003e Detect Cursor / v0 / Lovable / Bolt templates in the wild, check a page against its own `DESIGN.md`, and get a copy-pasteable fix prompt. Monitor a domain and get emailed when it drifts.\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/ravidsrk/slop-detect/actions\"\u003e\u003cimg alt=\"CI\" src=\"https://github.com/ravidsrk/slop-detect/workflows/ci/badge.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/slop-detect\"\u003e\u003cimg alt=\"npm: slop-detect\" src=\"https://img.shields.io/npm/v/slop-detect.svg?label=slop-detect\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/slop-detect-core\"\u003e\u003cimg alt=\"npm: slop-detect-core\" src=\"https://img.shields.io/npm/v/slop-detect-core.svg?label=slop-detect-core\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://slop-detect.com\"\u003e\u003cimg alt=\"Live demo\" src=\"https://img.shields.io/badge/live-slop--detect.com-22c55e\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"MIT\" src=\"https://img.shields.io/badge/license-MIT-blue.svg\" /\u003e\u003c/a\u003e\n  \u003cimg alt=\"Node\" src=\"https://img.shields.io/badge/node-%3E%3D20-339933\" /\u003e\n\u003c/p\u003e\n\n```\n$ npx slop-detect https://bolt.new https://www.aura.build https://news.ycombinator.com\n\nhttps://bolt.new\nWhat will you build today?\n  🟡 Mild  ·  score 24/100  ·  5/27 patterns triggered\n  ✗ AI-default font stack (Inter / Geist / Space Grotesk)       (+8)\n  ✗ Gradient-heavy backgrounds (5+ elements)                    (+4)\n  ✗ Big colored box-shadow glows (purple/blue/pink)             (+4)\n  ✗ Centered hero in generic sans (Inter-style)                 (+4)\n  ✗ Perma dark mode + medium-grey body text                     (+4)\n\nhttps://www.aura.build\nCreate beautiful designs\n  🟡 Mild  ·  score 20/100  ·  4/27 patterns triggered\n  ✗ AI-default font stack (Inter / Geist / Space Grotesk)       (+8)\n  ✗ Glassmorphism (backdrop-filter blur on translucent layers)  (+4)\n  ✗ Big colored box-shadow glows (purple/blue/pink)             (+4)\n  ✗ Centered hero in generic sans (Inter-style)                 (+4)\n\nhttps://news.ycombinator.com\n  🟢 Clean  ·  score 3/100  ·  1/27 patterns triggered\n```\n\n## Why this exists\n\nBy April 2026, AI-generated landing pages had collapsed onto a measurable visual fingerprint. Inter font, purple-to-blue gradient hero, \"Now in Beta\" pill badge, gradient-letter testimonial avatars, identical icon-topped feature cards. [Adrian Krebs's study](https://www.adriankrebs.ch/blog/design-slop/) scored ~1,400 Show HN submissions with Playwright and found **67% carried detectable AI-design fingerprints**.\n\n`slop-detect` reproduces Krebs's methodology, adds the signals Meng To identified in his [May 2026 Aura tutorial](https://x.com/MengTo/status/2058893181740359863), and packages it three ways:\n\n- 🟢 **`slop-detect`** — Playwright-based, run from your terminal or CI\n- 🟢 **`slop-detect.com`** — drop-in web UI, scan any URL in 8 seconds\n- 🟢 **`slop-detect-core`** — pure detection engine, embed it in your own pipeline\n\nAll three share the **same 27-rule scoring engine** so a Heavy from the CLI is a Heavy from the web is a Heavy from the API.\n\n## Try it now\n\n```bash\n# Web UI — fastest\nopen https://slop-detect.com\n\n# API — one curl away\ncurl -s -X POST -H 'Content-Type: application/json' \\\n  https://slop-detect.com/api/scan \\\n  -d '{\"url\":\"https://your-site.com\"}' | jq\n\n# CLI — for CI, batch scans, or air-gapped work\nnpx slop-detect https://your-site.com\n\n# CLI without a local browser — scan via the API (zero Playwright install)\nnpx slop-detect https://your-site.com --remote\n\n# Agent Skill — drop into Claude Code / Cursor / Copilot / Codex / Junie\ngit clone --depth 1 https://github.com/ravidsrk/slop-detect /tmp/sd \\\n  \u0026\u0026 cp -r /tmp/sd/skills/slop-detect ~/.claude/skills/\n```\n\n## Share \u0026 embed\n\nEvery scan now gets a **shareable permalink** with an auto-generated social card,\nand any domain gets a **live badge** you can drop in a README or site footer.\n\n```md\n\u003c!-- Live slop badge — re-scans periodically, colored by tier --\u003e\n[![slop](https://slop-detect.com/badge/your-site.com.svg)](https://slop-detect.com)\n```\n\n| Endpoint | What it returns |\n|---|---|\n| `GET /r/\u003cid\u003e` | Server-rendered result permalink (OG card unfurls on X / LinkedIn / Slack) |\n| `GET /og/\u003cid\u003e.png` | 1200×630 PNG share card (grade · score · tier · verdict) |\n| `GET /badge/\u003cdomain\u003e.svg` | Live tier-colored badge (`slop · A · 6`) for the last scan of that domain |\n\nThe `POST /api/scan` response includes `grade`, `verdict`, `definitionsVersion`,\nplus an `id` and `resultUrl` for the shareable permalink.\n\n## Use it in your agent (MCP)\n\n[`slop-detect-mcp`](packages/mcp) is a Model Context Protocol server that lets\nCursor / Claude Code / Windsurf agents scan a page **before** they ship it — and\npull the fix prompt back into the editing loop. Four tools: `scan_page`,\n`check_aeo` (can AI engines read \u0026 cite the page?), `check_design_system`\n(does the page honor its own `DESIGN.md`?), and `fix_prompt`.\n\n```json\n{\n  \"mcpServers\": {\n    \"slop-detect\": { \"command\": \"npx\", \"args\": [\"-y\", \"slop-detect-mcp\"] }\n  }\n}\n```\n\n## Gate it in CI (GitHub Action)\n\n[`slop-detect-action`](packages/action) scans a deploy-preview URL, posts a\n**sticky PR comment** with the grade + triggered patterns, and **fails the check**\nwhen slop creeps above your threshold.\n\n```yaml\n- uses: ravidsrk/slop-detect/packages/action@v0.2.0\n  with:\n    url: ${{ steps.preview.outputs.url }}   # your Vercel/Netlify preview URL\n    fail-under: 'B'                          # fail if the grade drops below B\n```\n\n`fail-under` accepts a number (fail if the slop score exceeds it) or a letter\ngrade (fail if the grade is worse). Leave it empty for report-only mode.\n\nThe repo also ships an [Agent Skill](skills/slop-detect/SKILL.md) following the [agentskills.io](https://agentskills.io) open spec — any compatible agent (Claude Code, Cursor, GitHub Copilot, Gemini CLI, Codex, Roo Code, Junie, and 20+ others) will autonomously invoke the scanner when you ask it to audit a landing page.\n\n## Monitor a domain + the directory\n\nDetection is free and stateless. The optional **continuity** layer remembers a\ndomain and emails you when it regresses to slop between redesigns:\n\n```bash\n# Start monitoring (double opt-in: you confirm via an emailed link)\ncurl -s -X POST -H 'Content-Type: application/json' \\\n  https://slop-detect.com/api/watch \\\n  -d '{\"url\":\"https://your-site.com\",\"email\":\"you@example.com\",\"list\":true}'\n```\n\nAdd `\"system\": true` and the daily sweep also checks the domain against its own\n`DESIGN.md`, emailing you when the page **drifts off its declared design\nsystem** — the check that catches what an agent or a non-designer quietly broke.\nEvery monitored domain gets a print-friendly client report at\n`slop-detect.com/report/\u003cdomain\u003e`, and the [dashboard](https://slop-detect.com/dashboard)\n(magic-link sign-in, no password) shows every domain on your email in one view.\n\n`list: true` also opts the domain into the public, crawlable\n[**directory**](https://slop-detect.com/directory) of scored sites — an\nowner-gated catalogue with a real backlink to each listed site. See also\n[**The State of AI Design Slop**](https://slop-detect.com/leaderboard) — a\nreproducible scan of well-known landing pages (how much of the web now reads as\nAI-generated, and who's still clean). We only store\nyour email to send the alerts you asked for, only after you confirm, and never\nsell it — see the [privacy policy](https://slop-detect.com/privacy.md). Engine\nstays MIT and free forever; only continuity (history + alerts) is the paid layer.\n\n## The 27 patterns\n\n`definitions@2026.09` — versioned ruleset. Scores from a given definition\nversion are comparable; the version ships in every result (`definitionsVersion`).\n\n| # | Pattern | Weight | What it detects |\n|---|---|---|---|\n| 1 | **Slop fonts** | 8 | Inter / Geist / Space Grotesk / Instrument Serif italic accent |\n| 2 | **VibeCode Purple** | 8 | Indigo-violet (HSL 240–295°, ≥35% sat) on filled CTAs |\n| 3 | **Hero gradient text** | 6 | H1 with `background-clip: text` + gradient |\n| 4 | **Gradient backgrounds** | 4 | ≥5 visible elements with CSS gradient backgrounds |\n| 5 | **Accent stripe** | 6 | Cards with thick colored top/left border only |\n| 6 | **Glassmorphism** | 4 | `backdrop-filter: blur()` on translucent layers |\n| 7 | **Colored glows** | 4 | Box-shadows with ≥24px blur and non-grey color |\n| 8 | **Centered hero** | 4 | H1 centered (or in a centered container), ≥28px, in a slop font |\n| 9 | **Eyebrow pill** | 5 | Rounded pill above H1 (\"Now in beta\", \"New\") |\n| 10 | **All-caps labels** | 3 | `text-transform: uppercase` section labels |\n| 11 | **Perma-dark mode** | 4 | Dark page background (body / html / wrapper) with mid-grey body text |\n| 12 | **Icon card grid** | 4 | ≥3 identical feature cards with icon on top |\n| 13 | **Numbered steps** | 3 | \"1 · 2 · 3\" step sequences |\n| 14 | **Stat banner** | 3 | Big-number stat row (\"10k+\", \"99.9%\") |\n| 15 | **FAQ accordion** | 2 | Generic accordion with no schema markup |\n| 16 | **Gradient avatars** | 5 | Letter-only testimonial avatars on gradient backgrounds |\n| 17 | **Bento grid** | 4 | Apple-keynote mixed-span rounded card wall |\n| 18 | **Aurora blobs** | 5 | Blurred radial/conic gradient \"aurora\" backdrop |\n| 19 | **AI sparkles** | 3 | ✨ / lucide \"Sparkles\" \"AI magic\" tells |\n| 20 | **Cream bg** | 7 | Warm off-white / beige default page surface |\n| 21 | **Low contrast** | 7 | Washed-out grey body text below WCAG AA on a light background |\n| 22 | **Crushed tracking** | 5 | Display headings tracked tighter than -0.05em |\n| 23 | **Gray-on-color** | 4 | Neutral mid-grey text on a chromatic background |\n| 24 | **Oversized H1** | 4 | Long headline (≥40 chars) set at ≥72px |\n| 25 | **Nested cards** | 4 | Card-like element inside a card-like ancestor |\n| 26 | **Wide tracking** | 3 | Body copy letter-spacing above 0.05em |\n| 27 | **Flat hierarchy** | 3 | ≥3 font sizes with a max/min ratio below 2× |\n\n**Tiers:** Clean (0–9) · Mild (10–27) · Heavy (≥28)\n\nSource: Krebs (Apr 2026) + Meng To (May 2026 Aura tutorial) + 2026.07 emerging\ntells (#17–19) + 2026.08 patterns (#20–27) ported from\n[Impeccable](https://github.com/pbakaus/impeccable) (Apache-2.0). See\n[`packages/core/src/patterns.js`](packages/core/src/patterns.js) for the full\ndetection logic with weighted heuristics.\n\n### Scoring presets\n\nScore against a curated subset instead of the full fingerprint:\n\n```bash\nslop-detect https://example.com --preset marketing   # brand-surface tells only\nslop-detect https://example.com --preset strict       # high-signal smoking guns\nslop-detect https://example.com --preset minimal       # the 3 dead-giveaways\n```\n\n| Preset | Scores |\n|---|---|\n| `full` (default) | all 27 patterns |\n| `strict` | only weight ≥ 5 (fewest false positives — good CI gate) |\n| `marketing` | fonts, colours, gradients, hero treatment |\n| `minimal` | slop fonts + VibeCode purple + gradient text |\n\nThe API accepts `{ \"url\": \"...\", \"preset\": \"strict\" }`. New patterns can be added\ndeclaratively — see [CONTRIBUTING.md](CONTRIBUTING.md#the-low-friction-path-declarative-rules).\n\n## The system axis — DESIGN.md compliance\n\nThe absolute slop score asks \"does this look AI-generated?\" The **system axis**\nasks the durable question: **\"does this page honor its own declared design\nsystem?\"** Declare your tokens in a [DESIGN.md](https://github.com/google-labs-code/design.md)\n(Google Labs' open spec — colors, typography, radii, components), and\nslop-detect reports **drift**: fonts in use that aren't declared, CTA/surface\ncolors off the palette, radii off the scale. Relative, per-site, and immune to\nthe false-positive trap — a bespoke site checked against its own system scores\n*Aligned*, never \"slop.\"\n\n```bash\nslop-detect https://your-site.com --design-md auto        # \u003corigin\u003e/DESIGN.md\nslop-detect https://your-site.com --design-md ./DESIGN.md  # local file\n\ncurl -s -X POST -H 'Content-Type: application/json' \\\n  https://slop-detect.com/api/scan \\\n  -d '{\"url\":\"https://your-site.com\",\"designMd\":true}' | jq .system\n```\n\nHigher is better: `Aligned` (≥80) · `Drifting` (≥50) · `Off-system` (\u003c50).\nEvery drift item is a named, contestable signal — never a verdict.\n\n## Multi-axis slop — design + copy\n\nSlop isn't only visual. The same page that wears a v0 template usually has\nGPT-default *prose* too. slop-detect scores a second **copy axis** on the page's\nown text at near-zero marginal cost (one text extraction, no extra page load):\n\n```bash\nslop-detect https://example.com --copy          # design + copy\nslop-detect https://example.com --axes all       # same thing\n```\n\n```\n  🟡 Mild  ·  B-  ·  unified 22/100  (2 axes)\n\n  🟢 design  Clean   A-   score   8/100   2/19 flagged\n  🟡 copy    Mild    B-   score  18/100   4/9 flagged\n\nCopy slop:\n  ✗ AI buzzword density (leverage / seamless / robust …)  (+7)\n  ✗ Em-dash overload                                       (+5)\n  ✗ \"It's not just X — it's Y\" antithesis                  (+6)\n  ✗ Generic filler openers (\"In today's fast-paced world\") (+5)\n```\n\nThe 9 copy patterns: **buzzword density** (leverage/seamless/robust/elevate…),\n**em-dash overload**, **\"not just X, it's Y\" antithesis**, **filler openers**,\n**formulaic closers**, **rule-of-three tricolons**, **\"whether you're X or Y\"**,\n**invisible Unicode artifacts**, **emoji bullet headers**. Each has its own fix\nrecipe, so `fix-prompt` covers both axes.\n\nTop-level `score`/`grade`/`patterns` stay **design-only** for backward\ncompatibility. Multi-axis adds `axes.{design,copy}` plus `unifiedScore` /\n`unifiedTier`. The unified score = max axis score + a small penalty when more\nthan one axis is dirty. API: `{ \"url\": \"...\", \"axes\": [\"design\",\"copy\"] }`.\n\n## What's in this repo\n\n```\nslop-detect/\n├── packages/\n│   ├── core/    slop-detect-core   ← pure detection engine (Node, Workers, browser)\n│   ├── cli/     slop-detect    ← Playwright runner for terminal + CI\n│   └── web/     slop-detect-web    ← Cloudflare Pages app powering slop-detect.com\n```\n\nA monorepo with npm workspaces. The `core` package is the single source of truth for the 27 rules — `cli` and `web` are thin runtime adapters around it.\n\n## Quickstart — contributing\n\n```bash\ngit clone https://github.com/ravidsrk/slop-detect.git\ncd slop-detect\nnpm install                     # installs all 3 workspaces\n\n# Run the CLI locally\nnpm run demo                    # scans 3 example sites\nnpm run scan -- https://your-url.com\n\n# Run the web app locally\nnpm run web:dev                 # http://localhost:8788\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor guide, including how to propose a 17th pattern or improve a fix recipe.\n\n## The \"fix prompt\" feature\n\nAfter scanning, the web app generates a markdown prompt you can paste into Claude, Cursor, or v0 to clean up the page:\n\n```bash\ncurl -s -X POST -H 'Content-Type: application/json' \\\n  https://slop-detect.com/api/fix-prompt \\\n  -d '{\"url\":\"https://your-site.com\"}' \u003e fix.md\n```\n\nEach triggered pattern comes back with:\n\n- **Why this reads as AI-slop** (the tell — `Tailwind indigo-600`, `background-clip: text`, etc.)\n- **Fix recipe** (the senior designer's prescription)\n- **Better alternatives** (3–5 concrete directions with brand references)\n- **Hard rule** (a testable constraint the agent self-checks against)\n\nPlus cross-cutting guidance (\"don't replace one slop pattern with another\", \"empty is better than fake\") and a built-in acceptance criterion: rescan and target score \u003c 10 (Clean tier).\n\n## Programmatic use\n\n```js\nimport { PATTERNS, scorePatterns } from 'slop-detect-core';\n\n// PATTERNS is the array of 19 rule definitions.\n// Each has { id, label, weight, extract, detect } where:\n//   extract(ctx) runs in the page's DOM context and returns signals\n//   detect(signals) is a pure function deciding triggered: true/false\n\nconst patternResults = PATTERNS.map(p =\u003e {\n  const signals = runInPage(p.extract);  // your browser runner\n  return { ...p, triggered: p.detect(signals), evidence: signals };\n});\n\nconst { score, tier, patternsFlagged } = scorePatterns(patternResults);\n```\n\nThe runner is yours — Playwright, Puppeteer, Cloudflare Browser Rendering, Browserless, whatever you have. The `core` package never touches a browser.\n\n## Roadmap\n\nSee [ROADMAP.md](ROADMAP.md) for the full strategic plan. Phase 1 (distribution\nprimitives) shipped in v0.2.0:\n\n- [x] **Shareable result permalinks** — every scan gets `slop-detect.com/r/\u003cid\u003e`\n- [x] **OG share cards** — auto-generated 1200×630 image per result (`/og/\u003cid\u003e.png`)\n- [x] **Letter grades + verdict** — A+→F grade and a one-liner on every score\n- [x] **Embeddable SVG badge** — `slop-detect.com/badge/\u003cdomain\u003e.svg` + copy-paste snippets\n- [x] **Versioned slop definitions** — scores tagged with `definitionsVersion`\n- [x] **GitHub Action** — sticky PR comment + pass/fail status check on preview URLs\n- [x] **MCP server** (`slop-detect-mcp`) so agents self-audit before shipping\n- [x] **Public REST API** with key-based rate-limit tiers ([API.md](packages/web/API.md))\n- [x] **Declarative rule format** + named presets (strict / marketing / minimal)\n- [x] **New 2026.07 patterns** — bento walls, aurora gradients, AI sparkles\n- [x] **Multi-axis slop score** — design + copy axes, unified score, both-axis fix prompts\n- [ ] Community rule registry + web rule authoring UI\n- [ ] AI-builder provenance signal (\"likely built with v0 / Lovable / Bolt\")\n- [ ] Code-slop axis (repo / view-source hook)\n- [ ] Historical scoring + team dashboards (Pro)\n\n## Acknowledgments\n\n- **[Adrian Krebs](https://www.adriankrebs.ch/blog/design-slop/)** — original AI-design-slop study and 12-pattern fingerprint\n- **[Meng To](https://x.com/MengTo)** — Aura tutorial that codified the gradient-letter avatar pattern\n- All the **AI tools we're detecting** — Cursor, v0, Lovable, Bolt — which generated the corpus that taught us what slop looks like\n\n## License\n\n[MIT](LICENSE) © Ravindra Kumar\n\n\u003e \"Empty is better than fake. Show the product, don't decorate around it.\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravidsrk%2Fslop-detect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravidsrk%2Fslop-detect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravidsrk%2Fslop-detect/lists"}