I shipped something small, posted it to Hacker News, watched the traffic spike for 48 hours, then let it die. Not because the tool stopped working. Because I wasn't going to spend 20 minutes every morning writing platform-specific posts for four channels while avoiding the growth-marketing tone that makes developers click away.
So I built marketing-pipeline to do that recurring work instead.
The setup looks like this:
marketing onboard --name my-tool --repo owner/repo --kind mcp-server
That fetches the README, sends it to Claude, and writes problem, facts, and angles to projects.yml. One command. After that, a GitHub Actions cron at 14:00 UTC on weekdays runs marketing cycle, picks the least-recently-used angle for each project, drafts channel-specific posts (Bluesky at ≤300 chars, X at ≤280, Dev.to/Hashnode at 150–400 words), and publishes them.
The part I'm most opinionated about is pipeline/antislop.py. Before anything goes out, it hard-rejects specific tokens: excited, game-changer, unlock, empower, AI-powered, emoji, hashtags, and exclamation points. The gate also rejects rhetorical questions. I wrote it because I'd rather say nothing than publish the kind of post that reads like a vendor announcement.
The kind field in the config routes projects to type-specific directories. An mcp-server gets submitted to the MCP Registry, Smithery, Glama, and PulseMCP. A claude-skill goes to awesome-claude-code. A browser-extension hits the Chrome Web Store, Firefox AMO, and Edge Add-ons queues. The one thing that can't be automated: awesome-claude-code requires a human to submit via their GitHub issue form, so the pipeline generates the payload and stops there.
What it takes to run: an Anthropic API key, plus credentials for Bluesky, Dev.to, and Hashnode at minimum. Mastodon and Slack are optional.
github.com/robertnowell/marketing-pipeline
Top comments (0)