Here's the specific tax of consistent OSS distribution: you write a post for Bluesky (300 chars), then rework it for X (280), then expand it for Dev.to (150–400 words), then remember you already used the "what problem it solves" angle last week so you need a different frame, then do it again next Thursday. Most people do this twice and stop.
I built marketing-pipeline to handle that mechanical layer. The angle inventory and recency tracking live in projects.yml. The daily cron (marketing cycle) runs via GitHub Actions at 14:00 UTC on weekdays, picks the least-recently-used angle for each project, formats it per channel, and posts. You don't decide what ran last — the file knows.
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 the extracted problem, facts, and rotation angles to projects.yml. The kind field also routes directory submissions automatically — mcp-server targets MCP Registry, Smithery, Glama, and PulseMCP; claude-skill targets awesome-claude-code; browser-extension targets Chrome Web Store, Firefox AMO, and Edge Add-ons.
One gate I spent real time on: pipeline/antislop.py hard-rejects posts containing excited, game-changer, unlock, empower, AI-powered, emoji, hashtags, exclamation points, and rhetorical questions before anything reaches a platform. That list exists because those tokens are the exact fingerprint of marketing copy that developers skip. The gate runs before publish, not as a suggestion.
The pipeline requires an Anthropic API key plus credentials for Bluesky, Dev.to, and Hashnode at minimum. Mastodon and Slack are optional. One thing it can't automate: awesome-claude-code requires a human to submit via their GitHub issue form — the pipeline generates the payload, you paste it.
github.com/robertnowell/marketing-pipeline
Top comments (0)