DEV Community

J Now
J Now

Posted on

Cross-posting to four platforms by hand doesn't scale past week one

The workflow breaks down fast: you write a Bluesky post (300 chars), realize the Dev.to version needs 150+ words and a code block, forget you used the "onboarding" angle last Tuesday, and skip it because you have actual work to do. Two months later your tool has 3 stars and you've posted about it twice.

I built marketing-pipeline to handle the mechanical parts. The part I want to describe specifically: angle tracking and per-channel formatting.

Every project in projects.yml carries a list of angles — different framings of the same tool. The daily cron at 14:00 UTC picks the least-recently-used angle for each project × channel combination and generates a post shaped to that channel's constraints. Bluesky gets ≤300 chars, X gets ≤280, Dev.to and Hashnode get 150–400 words. You don't track any of that. The pipeline does.

Before anything posts, it runs through pipeline/antislop.py — a hard-reject gate that kills drafts containing excited, game-changer, unlock, empower, AI-powered, emoji, hashtags, exclamation points, or rhetorical questions. Not a style suggestion. A gate. Posts that fail it don't go out.

Onboarding a new project:

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

That command fetches the README, extracts the problem, facts, and angles, and writes them to projects.yml. From there the cron handles rotation. The kind field routes to type-specific directories — mcp-server hits MCP Registry, Smithery, Glama, and PulseMCP; claude-skill targets awesome-claude-code (generates the payload, but their rules require a human to submit via GitHub issue form).

Requires an Anthropic API key plus credentials for Bluesky, Dev.to, and Hashnode at minimum. Mastodon is optional.

https://github.com/robertnowell/marketing-pipeline

Top comments (0)