How Big Muddy runs

May 13, 2026 · 2 min read

Matt Bruenig recently posted about transitioning his think tank’s website from Wordpress to a fully customized CMS vibe-coded by Claude. It inspired me to write a bit about the stack that powers BIg Muddy, as I have also used vibe coding to bolt some features onto this blog.

Big Muddy is created using Hugo as a static site generator based on the Archie theme. To manage content, I use Sveltia CMS, a git-backed headless CMS that runs in the browser and requires nothing more than a GItHub auth token. My site is hosted on Cloudflare Pages and regenerates automatically every time the site’s public content is updated.

While I enjoy the simplicity of Sveltia, it does lack some of the features of a more complex hosted CMS. For example, there is no ability to schedule a post and the handling of drafts (normally a toggle on a post to set to published/unpublished) is not great if you have many drafts. This is a problem because I eventually plan to create an agent that can create drafts based on notes I sent to it, so I can more easily turn my half-based thoughts into full posts when I have the opportunity.

I solved all of these problems by creating a new content category for “drafts”, rather than using the drafts toggle in my current “posts” category. Sveltia has no mechanism for changing content type (i.e., from draft to post), so I created a Python script for promoting a draft to a post (changing type, adding the current date and time, and generating the URL slug). I also added an optional field in the drafts content type for “scheduled date”. Now, I have a GitHub Action that runs every day and will promote a draft to a post if it’s scheduled for today’s date (obviously, I schedule it using a cron on my server and not the horribly unreliable GitHub Actions cron).

I am slowing building myself a more fully-featured CMS system!