DEV Community

J Now
J Now

Posted on

Cross-posting your OSS tool by hand doesn't scale past week two

The mechanics of consistent distribution are tedious enough that most people quit: remember which angle you used last week, rewrite the same idea for Bluesky's 300-char limit, then again for X's 280, then again as a 300-word Dev.to piece, then track whether you already submitted to the MCP Registry. Multiply by every project you're maintaining.

I built marketing-pipeline to handle the recurring parts. One command onboards a project:

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

It pulls the README, extracts the problem and facts via Claude, and writes them to projects.yml alongside a set of angles. From that point, marketing cycle runs daily via GitHub Actions at 14:00 UTC, picks the least-recently-used angle for each project, formats it per channel (Bluesky at 300 chars, X at 280, Dev.to/Hashnode at 150–400 words), and posts.

The part I spent the most time on: an antislop gate in pipeline/antislop.py that hard-rejects drafts containing specific tokens before anything is published. 'Excited', 'game-changer', 'unlock', 'AI-powered', emoji, hashtags, exclamation points — all rejected at generation time. Marketing copy that reads like a press release does more damage than silence.

The kind field also routes projects to the right directories automatically. An mcp-server gets submitted to MCP Registry, Smithery, Glama, and PulseMCP. A browser-extension goes to Chrome Web Store, Firefox AMO, and Edge Add-ons. One exception: awesome-claude-code requires a human to submit via their GitHub issue form — the pipeline generates the payload, but their rules don't allow automation past that point.

Requires 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)