Most developer tools die quietly. Not because the code is bad, but because the author posted once, got no traction, and had no capacity to keep at it. Distribution is a recurring job, and it compounds: directories need listings, social channels need rotation, different platforms need different lengths and tones. Nobody who just wants to build a useful tool signed up for that.
I built marketing-pipeline to handle the recurring parts without daily intervention. One command onboards a project:
marketing onboard --name my-tool --repo owner/repo --kind mcp-server
That fetches the README, sends it to Claude, and writes problem statements, facts, and content angles to projects.yml. From there, a GitHub Actions cron at 14:00 UTC on weekdays runs marketing cycle, rotates through projects × angles × channels, picks the least-recently-used angle, drafts a post, and publishes it.
The part I spent the most time on was quality enforcement. LLM-generated marketing copy has a consistent failure mode: excited, game-changer, unlock, AI-powered, emoji, rhetorical questions. Prompting Claude to avoid them works until it doesn't. So pipeline/antislop.py runs a regex blacklist on every draft before anything posts. If a token hits, the post is rejected — not flagged, not logged for review, hard-rejected. Per-channel character limits work the same way: Bluesky 300 chars, X 280, Dev.to/Hashnode 150–400 words, all enforced in code.
The kind field routes projects to the right directories automatically. mcp-server hits MCP Registry, Smithery, Glama, and PulseMCP. claude-skill targets awesome-claude-code (payload generated, but their rules require a human to submit via GitHub issue — that one can't be fully automated). browser-extension covers Chrome Web Store, Firefox AMO, and Edge Add-ons.
Social posting runs to Bluesky, Dev.to, Hashnode, and Mastodon. Setup requires an Anthropic API key plus credentials for at least the first three; Mastodon and Slack are optional.
Top comments (0)