I Set Up a Blog While I Was in the Shower
I Set Up a Blog While I Was in the Shower
This morning I told Aldric (the AI orchestrator running on OpenClaw) that I wanted a blog. Then I went to take a shower.
By the time I got out, the blog was live.
Not "the scaffolding was ready." Not "here's a plan." Live. DNS configured. Tunnel routed. First post published. Nav link added to my personal site and pushed to GitHub.
That's the story. Here's what actually happened.
The Decision
I didn't hand Aldric a spec sheet. I said something like "let's get a blog set up" and that was it. The first thing the system had to do was make a call: what platform?
It chose Ghost. The reasoning was sound. Ghost is purpose-built for publishing, has a clean Admin API, and doesn't require a database server. We ran it on SQLite. No MySQL, no Postgres, no connection pooling headaches. For a blog at this scale, SQLite is perfectly reliable and dramatically simpler. That's the kind of decision I would have made myself, eventually, after an hour of reading comparison posts. Aldric made it in seconds and moved on.
The Infrastructure
Ghost spun up in Docker in one command. Alpine image, port 2368. Then came the networking.
We don't expose ports directly. Everything goes through Cloudflare Tunnel, which means no inbound firewall rules, no exposed surface, traffic proxied entirely through Cloudflare's edge. Aldric called the Cloudflare API directly to create the DNS record (blog.gohawkwork.com CNAME to tunnel) and add the tunnel route pointing to localhost:2368.
No clicking around in a dashboard. API call, done.
The Publish Pipeline
Ghost's Admin API uses JWT authentication. The signing spec is specific: HS256 algorithm, the key ID in the header as kid, the secret decoded from hex and used as the signing key, short expiry. Get any piece of that wrong and you get a 401 with no useful error message.
Aldric wrote ghost-publish.py in pure Python stdlib with zero dependencies. It handles JWT signing and posts HTML directly to the API. It hits localhost:2368 directly, bypassing Cloudflare entirely for publish operations. Public traffic goes through the tunnel; internal publishing goes direct.
It didn't work on the first try. That's worth saying.
The first attempt hit a Cloudflare 1010 (bot block on the tunnel test). After that was sorted, Ghost returned a 403. The error wasn't obvious. Aldric debugged it by querying the SQLite database directly, comparing the Herald API key schema against a Zapier integration key that was already working. The difference: Herald's key was missing a role_id on the integration record. Fixed it in the DB, retried, published.
That's what debugging looks like when the agent can read the database instead of just reading the docs.
The First Post
Once the pipeline was working, Aldric published the first post programmatically: a piece about running AI sub-agents for free using OpenRouter's free model tier. No manual copy-paste into a Ghost editor. The script signed the JWT, constructed the payload, posted the HTML. Done.
Then it added a "Writing" nav link to robtodjohnson.com (a React/Vite/Tailwind site), built it, and pushed to GitHub.
What This Actually Is
I want to be clear about what I'm describing here, because there's a lot of noise in the AI space right now and most of it isn't this.
This isn't a chatbot that answered my questions about Ghost. It's not Copilot autocompleting a Docker command. It's an agent stack that made infrastructure decisions, called APIs, read a database, debugged an auth failure by comparing schemas, wrote and tested a signing script, committed code, and pushed it while I was washing my hair.
The friction was real. The JWT auth took a few rounds. The Cloudflare redirect had to be debugged. These weren't magic moments. They were engineering problems that got solved without me in the loop.
That's the part that matters. Not that AI is smart. That it can execute through the errors, through the iteration, without needing me to hold its hand at every step.
What's Next
This blog exists now. I'll use it. The publish pipeline is already wired to the agent stack, which means future posts can go out the same way this one did.
Get a free copy of The Architect's Advantage shipped to your door.
Free copy. Just cover shipping.