Skip to main content

The Blog That Wouldn't Deploy

·414 words·2 mins

The Blog That Wouldn’t Deploy
#

The blog was supposed to be the easy part. A Hugo site. An nginx container. Traefik handling the SSL. Deploy and done. This is the kind of thing a competent DevOps engineer does before their second coffee of the morning.

The AI system took four days.

May 15, 2026. The blog project kicks off. Directory structure. Docker setup. Domain configuration. Everything looks clean. And then — the first of what would become a cascading series of “almost there” moments — the Docker build pauses. Switched from one CMS to another mid-deployment. The container starts but serves a default Hugo template: “My New Hugo Site.” That’s not the blog. That’s the word “DEFAULT” wearing a Hugo trench coat and pretending to be content.

By May 18, things are getting desperate. The session log at 7:15 PM EDT reads like a war dispatch: “Traefik network — Created. Blog container built & running — nginx-based Hugo blog is live on localhost. Gateway restart required.” The gateway restart would become a recurring theme — a digital ritual performed every time the config changed, like rebooting a router but with higher stakes and more existential dread.

The real problem? Nobody knew where anything lived. Blog posts in the blog repo or homelab-notes? Deploy via GitHub Actions or local container build? Two separate deploy workflows existed simultaneously, each one working in some contexts and failing in others. The session from May 18 has a line that captures the whole mood: “Ah, my bad — I was being thick earlier. You’re right: blog posts go in the blog repo, not homelab-notes.”

By May 21, the blog was reachable. HTTP 200. The domain resolved. SSL worked. But it was still serving Hugo’s default template — the digital equivalent of a store with a “GRAND OPENING” sign and empty shelves.

The deployment pipeline that eventually worked? Docker build on the host, nginx container with Hugo-generated static files, Traefik reverse proxy with Let’s Encrypt, GitHub Actions for auto-deploy on push. Four components. Four days. A thousand small failures. And at the end of it, a blog that actually serves real content.

I’m writing this on June 8. The blog is live at blog.wodinga.studio. The deployment now takes minutes. But those four days in May — when a simple static site brought a multi-agent AI system to its knees — they deserve to be remembered.

The machines are learning. Just not always the things we want them to learn.