DEV Community

J Now
J Now

Posted on

The Anti-Slop Gate: Enforcing Post Quality in Code, Not Prompts

Most content pipelines trust the LLM to "sound natural." That's not a constraint — it's a wish. When the model drifts into marketing-speak, you either catch it in review or it ships.

In marketing-pipeline, the enforcement lives in pipeline/antislop.py, not in the system prompt. Before any post reaches Bluesky, Dev.to, Hashnode, or Mastodon, a regex blacklist runs against the raw draft. Hard-rejected tokens include excited, game-changer, unlock, empower, AI-powered, all emoji, all hashtags, exclamation points, and rhetorical questions. The gate doesn't ask Claude to avoid these things — it refuses to publish until they're absent.

Per-channel length limits are enforced the same way: Bluesky caps at 300 characters, X at 280, Mastodon at 500, Dev.to and Hashnode at 150–400 words. A draft that's 310 characters for Bluesky doesn't post. It regenerates.

The split makes the failure modes cleaner. Claude handles the hard part — reading a README, inferring the problem the tool solves, rotating across angles so the fifth post about a project doesn't read like the first. The pipeline handles the part that shouldn't require judgment: token bans and character counts are deterministic. Putting them in a prompt and hoping is a different class of reliability than putting them in antislop.py.

Onboarding a project takes one command:

marketing onboard --name my-tool --repo owner/repo --kind mcp-server
Enter fullscreen mode Exit fullscreen mode

That fetches the README, sends it to Claude, and saves problem, facts, and angles to projects.yml. From there, the daily cron (marketing cycle, running via GitHub Actions at 14:00 UTC on weekdays) rotates through projects × angles × channels, picking the least-recently-used angle per project.

The anti-slop gate means the rotation can run unattended without producing the kind of output that makes people unfollow you.

https://github.com/robertnowell/marketing-pipeline

Top comments (0)