Every time I shipped something and wanted to keep it visible, the actual work was this: write a Bluesky version under 300 chars, a different one for X under 280, something longer for Dev.to, remember what angle I used last week so I'm not repeating myself, then do it again next Tuesday. I'd do it once, skip the second week, and the project went quiet.
marketing-pipeline stores all of that state in projects.yml — angles, recency, per-channel formatting — and runs it on a daily cron at 14:00 UTC via GitHub Actions.
Onboarding looks like this:
marketing onboard --name my-tool --repo owner/repo --kind mcp-server
That command fetches the README, sends it to Claude, and writes problem, facts, and a rotation pool of angles back to projects.yml. From there the marketing cycle command picks the least-recently-used angle for each project, generates platform-appropriate drafts, and posts.
Per-channel limits are enforced in code: Bluesky 300 chars, X 280, Mastodon 500, Dev.to/Hashnode 150–400 words. Before anything is published, pipeline/antislop.py hard-rejects a specific token list — excited, game-changer, unlock, AI-powered, emoji, hashtags, exclamation points, rhetorical questions. Not as a style suggestion. As a hard gate that aborts the post.
The kind field on each project routes to the right directories automatically. mcp-server targets MCP Registry, Smithery, Glama, and PulseMCP. claude-skill targets awesome-claude-code (with a human-required submission step, since their rules require a GitHub issue form — the pipeline generates the payload, you submit once). browser-extension targets Chrome Web Store, Firefox AMO, and Edge Add-ons.
Social posting covers Bluesky, Dev.to, Hashnode, and Mastodon. You need an Anthropic API key plus credentials for at least Bluesky, Dev.to, and Hashnode to run it end to end.
Top comments (0)