{"id":"0aa3b6fd-5704-46e5-923f-07c8a5831616","slug":"taner-dogan-slopguard","kind":"skill","name":"slopguard","summary":"Filters AI slop in code, UI, prose, and chat. Prevents over-engineering, swallowed errors, invented APIs, DE/EN filler phrases, and template UI. Use when generating or editing code, copy, commits, or","owner":"taner-dogan","repoUrl":"https://github.com/taner-dogan/slopguard","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-10-19T20:21:03.000Z","addedAt":"2026-10-22T00:04:02.700Z","logoUrl":"https://avatars.githubusercontent.com/u/285050103?u=22dd0a34d98084b5e1e43ba8f3a83f0ea95a6169&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media","developer-tools","communication"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T09:38:26.623Z","sample":false,"url":"https://conduits.dev/tools/taner-dogan-slopguard","language":"","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"English | [Deutsch](README.de.md)\n\n# slopguard\n\n**A filter for AI coding agents.** Stops generic UI, filler copy, over-engineered code, and dishonest claims (invented APIs, “tests pass” without a run). DE and EN.\n\nNot a style guide. It rejects slop; it does not pick your colors, fonts, or brand. Direction stays yours.\n\n```mermaid\nflowchart LR\n  out[\"Agent output\"] --> rules[\"slopguard rules\"]\n  rules --> gate{\"Checklist\"}\n  gate -->|pass| ship[\"Ship\"]\n  gate -->|fail| rules\n```\n\n## See the difference\n\nSame brief, before and after the filter. These are the patterns the skill is built to catch.\n\n### Chat\n\n| Before | After |\n|--------|--------|\n| Sure! I'd be happy to help. Great question! Here's a comprehensive overview of how we can leverage a robust solution to seamlessly optimize your workflow… | The login fails because the token is cleared before refresh. Fix is in `auth.ts` line 42. |\n| I hope this helps! Let me know if you'd like me to also add tests, docs, and a refactor. | Changed `auth.ts`. Tests not run. |\n| Importantly, it is worth noting that… | *(deleted, say the fact)* |\n\n### Commit message\n\n| Before | After |\n|--------|--------|\n| `update code` | `Reject empty catch in invoice fetch so payment errors surface` |\n| `improve UX` | `Show invoice due date in the list row` |\n| `implement comprehensive solution` | `Add DATEV CSV export on the payroll page` |\n| `This commit aims to unlock…` | *(rewrite: name the reason, no hype)* |\n\n### Error handling\n\n| Before | After |\n|--------|--------|\n| `catch (e) { return []; }` | Rethrow or pass to the existing error UI |\n| `catch (e) { console.log(e); }` | Log with the project logger **and** surface failure |\n| Empty `catch {}` | Not allowed: fix or fail visibly |\n\n```mermaid\nflowchart LR\n  err[\"Error thrown\"] --> how{\"Handled how?\"}\n  how -->|\"empty catch or return []\"| fail[\"FAIL\"]\n  how -->|\"rethrow or error UI\"| pass[\"PASS\"]\n```\n\n### React\n\n| Before | After |\n|--------|--------|\n| `useEffect` that only copies `items` → `filtered` | Filter in render: `items.filter(...)` |\n| `key={index}` on a sortable list | `key={item.id}` |\n| New `utils/capitalize.ts` for one call | Inline or use existing string handling |\n| `\"use client\"` on the whole page for one hook | `\"use client\"` only on that component |\n| `UserServiceFactory` + interface for one caller | `getUser(id)` with the existing client |\n\n### Hero / marketing copy\n\n| Before | After |\n|--------|--------|\n| Empower your workflow with seamless next-gen intelligence. Build faster. Scale smarter. | Export payroll as DATEV CSV in one click. |\n| Trusted by teams at… · 99.9% Uptime · +127% Growth | *(remove fake pills unless the user supplied real numbers)* |\n| Für Teams, die mehr wollen. Einfach. Schnell. Sicher. | Offene Rechnungen. Ein Klick zur Freigabe. |\n\n### German prose\n\n| Before | After |\n|--------|--------|\n| Nicht nur schnell, sondern auch nachhaltig. Die Lösung ermöglicht es Teams, Mehrwert zu schaffen. | Der Export braucht unter zwei Sekunden. Die Liste zeigt offene Rechnungen und wer freigeben muss. |\n| Im Hinblick auf die Herausforderungen und Chancen… | Beim Login scheitert der Refresh, weil… |\n| Gerne! Gute Frage! | *(start with the answer)* |\n\n### Structure tells (any language)\n\n| Before | After |\n|--------|--------|\n| Exactly three bullets every time | 2, 4, or 5, whatever fits |\n| Em dash in every paragraph | At most one per paragraph |\n| **Term**: explanation · **Term**: explanation | Prose or a real table |\n| Challenges / Outlook / Conclusion that restate praise | Cut or write a concrete next step |\n\n## How modes work\n\n```mermaid\nflowchart LR\n  mode{\"Mode?\"} -->|during| build[\"Build\"]\n  mode -->|after| scan[\"Scan\"]\n  scan --> fix[\"Approve, fix\"]\n  build --> gate{\"Checklist\"}\n  fix --> gate\n  gate -->|pass| ship[\"Ship\"]\n```\n\n| Mode | When | Flow |\n|------|------|------|\n| **during** | New work | Filter while generating, checklist before ship |\n| **after** | Existing draft, PR, or UI | Scan, findings table, your approval, fix, re-scan |\n\n## What it covers\n\n| Area | File |\n|------|------|\n| Rules, modes, checklist | [`skills/slopguard/SKILL.md`](skills/slopguard/SKILL.md) |\n| English banned words and phrases | [`skills/slopguard/references/en-blacklist.md`](skills/slopguard/references/en-blacklist.md) |\n| German banned words and phrases | [`skills/slopguard/references/de-blacklist.md`](skills/slopguard/references/de-blacklist.md) |\n| UI cliché defaults | [`skills/slopguard/references/ui-cliches.md`](skills/slopguard/references/ui-cliches.md) |\n| Cursor always-on | [`rules/slopguard.mdc`](rules/slopguard.mdc) |\n| Single paste file | [`slopguard.md`](slopguard.md) |\n\n## Install\n\n### Skill (Cursor, Claude Code, Codex, skills.sh)\n\n```bash\nnpx skills add taner-dogan/slopguard\n```\n\n### Cursor always-on rule\n\nCopy [`rules/slopguard.mdc`](rules/slopguard.mdc) to `.cursor/rules/slopguard.mdc` in your project.\n\n### Paste into any LLM\n\n```bash\ncurl -o slopguard.md https://raw.githubusercontent.com/taner-dogan/slopguard/main/slopguard.md\n```\n\nPut the contents in Custom Instructions or the system prompt.\n\nFull install, update, and remove per agent: [GUIDE.md](GUIDE.md).\n\n## Repository layout\n\n```\nskills/slopguard/SKILL.md     # core skill\nskills/slopguard/references/  # EN/DE blacklists, UI clichés\nrules/slopguard.mdc           # Cursor always-on rule\nslopguard.md                  # single paste file\nAGENTS.md                     # compact agent pointer\nGUIDE.md                      # install / update / remove\nREADME.de.md                  # German start page\n```\n\n## Delivery checklist (summary)\n\nBefore ship (**during**) or after rewrite (**after**):\n\n- [ ] Diff only what was asked\n- [ ] No new dependency or abstraction without a request\n- [ ] No swallowed error, TODO, or invented API\n- [ ] No template UI defaults unless asked\n- [ ] No new EN/DE blacklist filler\n- [ ] No “not only… but” / “It’s not X, it’s Y”\n- [ ] List length from content, not the rule of three\n- [ ] At most one em dash per paragraph\n- [ ] Chat starts with the answer\n- [ ] “Tests pass” only if they ran\n\nFull list: end of [`SKILL.md`](skills/slopguard/SKILL.md).\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n"}