RSS Amplifier

Vibe Shipper · Apr 17, 2026

Write Once, Publish Everywhere

0
Sign in to vote or save

Henry Robinson · Vibe Shipper

One of the hardest part about writing is the distribution work that comes after.

A single post needs a Twitter version, a LinkedIn version, sometimes a Facebook version, images at different ratios, and every platform has its own rules about tone, length, and hashtags. I run two of these pipelines now. One for my personal blog on Substack, and one for the Voice Legacy company blog. Doing either by hand took longer than writing the original post. Doing both by hand is a part-time job I do not have.

So I built a system.

After I write a draft, a Claude Code skill called blog-post runs the distribution pipeline as a single command.

It interviews me on the topic to fill any holes. It does any background research with WebFetch and WebSearch. It runs the draft through henry-ify, another skill I built that proofreads against dozens of my actual writing samples and flags anything that does not sound like me. Then it generates the platform-specific stubs and the Midjourney image prompts. Twitter is capped at 280 characters. LinkedIn keeps the first three lines as the hook and uses no more than three hashtags.

All of it lands in one folder per post, ready to copy and paste into Twitter and LinkedIn.

What the personal pipeline does not do is push anything live. I still hit publish on each platform myself. For my own writing, I want a human beat between the draft and the world.

The Voice Legacy pipeline is different. It starts the same way by drafting in markdown, running through /henry-ify for proofreading and voice. Instead of ending in a folder of stubs, the content goes into Sanity, the headless CMS that backs the marketing site, with the social variants baked into the post itself.

The blogPost schema in Sanity has three groups of fields. Content (title, body, excerpt, image). SEO (meta tags, OG image). And Social Automation: an array of platforms to publish to, a pre-written variant for each platform, and a scheduled datetime per platform. Twitter @voicelegacy_CEO. LinkedIn on the Voice Legacy company page. LinkedIn on my personal account. Facebook on the company page. The excerpt is hard-capped at 280 chars so the Twitter variant can never fail validation.

When I hit publish in Sanity, a webhook fires, which hits an n8n instance running in Docker on a mac mini, I keep running at home. n8n reads the platform array, pulls the right variant for each platform, and ships everything to Publer, which handles the actual posting to Twitter, LinkedIn (both accounts), and Facebook on the schedule I set.

The human review all happens on the Sanity side. I pick the platforms, I schedule the times, I hit publish. Everything after that is plumbing. There is no copy-paste, switching tabs, or opening the LinkedIn composer.

The Voice Legacy brand voice is stable. The channels are the company’s channels. The content goes through an editorial pass before it lands in Sanity, and by the time I hit publish I am done making decisions. Automation is right for that workflow.

My personal writing is less settled. I still rewrite the LinkedIn hook on publish day half the time. If I automated that away I would lose the last human pass that catches the dumb stuff. Someday I will automate the personal side too. For now, the five minutes of copy-paste is the feature, not the bug.

All of my Claude Code skills live in two repos. claude-skills is the private one with the workflow tools that touch my voice, my inbox, and my personal work (henry-ify, blog-post, full-sync, and similar). claude-skills-public is the open version with the stuff other people can actually use (architecture-diagram, decision-crucible, security-audit, twitter, reddit, VC-Due-Dil, first-principles, and a dozen others).

You can steal the public ones directly from GitHub. The private ones are more of a pattern for how to organize your own. Anything that touches your voice, your inbox, or your personal workflow stays private. Anything that is general-purpose enough to help someone else goes public.

The pattern matters more than the specific skills. Most people I know who are building with Claude Code end up with a pile of ad-hoc scripts in one folder that only they understand. Splitting them into public and private, with real repo boundaries, forces you to think about which of your workflows are actually reusable and which are just yours.

The personal pipeline took about an hour to build. It turned several hours of per-post distribution work into about five minutes of editing and clicking publish.

The Voice Legacy pipeline took a weekend. The Sanity schema is the hard part. since getting every social field right up front so n8n has nothing to decide at runtime. Since it went live, distribution for a Voice Legacy post takes zero minutes. I hit publish in Sanity and walk away. That is the whole reason to push past stubs and through to a webhook-triggered workflow: for content with a predictable rhythm, you get the rhythm for free.

I get back an afternoon every time I write something personal. I get back a different afternoon every time Voice Legacy ships a post. That is the kind of math that makes building your own tooling worth it.

Next up is quality: the eval framework I built so I can change a prompt without breaking production, and the Playwright suite that catches the dumb stuff before users see it.

No posts

Read the original on henryjrobinson.substack.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.