This change worked!!!!
This is both a blessing and a curse. The curse is obvious — I spent two weekends building tooling instead of writing. The blessing is that the tooling will pay off every single time I publish from now on.
The setup
Here’s how it works. I write posts in markdown with structured frontmatter at the top of each file. The frontmatter includes the usual — title, date, tags, description — but also a publish_to field that tells my pipeline where to cross-post.
When I’m done writing, I commit and push. My site rebuilds automatically on Cloudflare Pages. Then a CLI tool I wrote handles the cross-posting: it reads the markdown, uses Claude’s API to adapt the formatting for each platform, and publishes via their respective APIs.
Why not just copy-paste?
Because I’ll forget. Because the formatting is different on each platform. Because I want my frontmatter to be the single source of truth. And honestly, because building this was fun and I learned things.
The Claude integration is the interesting part. Medium wants HTML. Substack has its own quirks. Rather than writing brittle format converters, I let Claude handle the translation — it understands the semantics of my writing and can adapt it intelligently.
The meta-lesson
Every engineer who writes will eventually build their own CMS. It’s inevitable. The trick is to build it fast and then actually use it to write. The tool is not the point. The writing is the point. The tool just removes friction.
Now if you’ll excuse me, I need to go write something that isn’t about my writing setup.