You post on launch day, get a few stars, maybe a comment. Then life continues and the tool sits there. Not because it's bad — because consistent distribution is repetitive manual work that compounds over weeks, and nobody has that kind of time for a side project.
I built marketing-pipeline to handle the recurring part. After a one-time setup, a GitHub Actions cron runs at 14:00 UTC on weekdays and rotates posts across Bluesky, Dev.to, Hashnode, and Mastodon automatically. It picks the least-recently-used angle per project so the same framing doesn't repeat.
Onboarding a new project is one command:
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. From that point the cron handles everything.
The part I spent the most time on is the anti-slop gate in pipeline/antislop.py. It hard-rejects specific tokens before any post goes out: excited, game-changer, unlock, empower, AI-powered, emoji, hashtags, exclamation points, and rhetorical questions. Generated marketing copy defaults to this register instantly and it makes the content unreadable. The gate runs before publish and kills the post if any token matches.
Per-channel length limits are also enforced: 280 chars for X, 300 for Bluesky, 500 for Mastodon, 150–400 words for Dev.to and Hashnode. The kind field routes projects to type-specific directories — mcp-server goes to MCP Registry, Smithery, Glama, and PulseMCP; browser-extension goes to Chrome Web Store, Firefox AMO, and Edge Add-ons.
One honest caveat: awesome-claude-code can't be automated. Their rules require a human to submit via their GitHub issue form. The pipeline generates the payload; you paste it once.
You need an Anthropic API key plus credentials for at least Bluesky, Dev.to, and Hashnode to run it. Mastodon and Slack are optional.
Top comments (0)