Publishing from the harness

My blog has always been a playground for technology. Here is how its publishing pipeline evolved from a static site and a CD pipeline into a small Elixir engine I can publish to straight from a coding harness over MCP, the project I now call Gesttalt.

I like sharing with the world through my personal blog, a place that also became a playground for me to play with technology. I can't remember all the iterations it went through: from static site generation to Ghost, from Ghost to another static site generator, from Netlify to Cloudflare, from Cloudflare to Fly, and now to virtual machines provided by Hetzner.

Lately, my approach to writing and sharing has evolved with the appearance of LLMs and harnesses. The first drafts usually start as a voice-to-text transcription with Wispr Flow into iA Writer. I like the accuracy of Wispr Flow, and I like iA Writer as an editor. As soon as an idea crosses my mind, I take my phone and start talking. The outcome usually captures the idea I want to share, but the whole piece is a bit messy and unstructured. That's fine, and expected. The next step is using Claude to iterate on the format, ensure the ideas are well connected, remove any typos, and make it sound natural. I used to rely on Grammarly extensively, mostly for typos and grammatical style, but now that role has been superseded by LLMs. I always remind the agents that I don't want them to adjust my writing style, because that style represents me. This blog post is, indeed, written that way.

I really liked this evolution, but the way it got published felt outdated. I was using a static site generator, which meant I had to add the content to a cloned version of the repository, push the changes, and let a CD pipeline pick them up and deploy them to Cloudflare. It's a very standard engineering practice, but I looked at MCP and wondered: wouldn't it be awesome if the publishing pipeline were just a push, directly from the coding harnesses? I honestly don't know whether WordPress or Ghost already support this workflow. I assume they do, but both felt heavy. Since the cost of manufacturing code is low these days, I thought about building my own tiny blog engine in Elixir, moving from a static site generated at deploy time to a stateful service that is headful in the way it's read and headless in how it's administered. As I started working on it, I realized it would be awesome to expose an MCP interface that went beyond just publishing or editing posts. For example, imagine being able to edit your themes directly by chatting with an agent. Turns out it works, and it's cool. The themes, inspired by Shopify's, are a mix of CSS and Liquid markup. I provide some by default, and users can take them over and override them as needed.

I called it Gesttalt. It's open source, and my instance is free. I want more people to publish content on the Internet. I enjoy learning from others, and I want everyone to enjoy the ease of publishing that this pipeline enables. You can go and create an account on gesttalt.org, open issues with ideas, or fork it and make it yours.