Once upon a time, I wrote a post about my migration off Dreamhost. Probably late 2022 or early 2023. It wasn’t a long post; mostly, it indicated that the migration had happened and I was back to selfhosting. It may even have shared the “why” - after many years of price hikes, my original $5.95 a month had reached nearly $19 a month. I couldn’t justify the price anymore, so I finally moved the site “back home.”

Somewhere I’d picked up a slightly used LattePanda Alpha 864s. It was a cute little thing, both an Intel chip and an Arduino in one unit. Enough memory to be a simple barebones docker host with an m.2 SSD. I could stick it under the desk as a headless server. Perfect.

My blog/story site has never been high traffic unless you count scrapers1. I’m behind a free Cloudflare instance which should cache static content. With those thoughts in mind I felt comfortable moving my running WordPress setup over so long as I could keep it secure.

Needed a MariaDB container to host the backend. Dump a backup from Dreamhost, restore, generally done.

WordPress container was a bit more fiddly; my old template was long out of date and no longer maintained, yet somehow still worked (mostly) after some coaxing. After a few days tinkering, I’d gotten everything generally stable and redirected the site’s DNS from Dreamhost to the tunnel and made the migration post as a test. After a week of not needing to roll back, I cancelled Dreamhost.

The Downfall ##

Occasionally, the LattePanda would need a restart. Kernel updates for Ubuntu or otherwise, and for the most part I could do that over SSH. Rarely it wouldn’t boot back up and need a power cycle, but then it would be fine. It had power loss recovery set up in the BIOS but it didn’t always work and occasionally required a manual power cycle. 2

I then found myself out of state for three months helping with hospice care. A week into the stay, a call from the power company informed me that there would be some line work near home and power would be off in the area for a while. After the work, when the LattePanda didn’t come back up and I couldn’t remotely fix it, I had someone go power cycle it - but it still wouldn’t come back up. I talked a little more about this at the time, over on Mastodon.

It was twelve-ish more weeks before I returned home, and after days of messing with the panda I had to declare it dead. It wouldn’t respond to anything. Pulled the CMOS battery and let it sit a day, tried reset jumpers, tried other USB-C PD power supplies. The included power supply - a USB-C PD brick that always vaguely stank of cigarette smoke when it got warm - worked fine. Still works today in 2026, actually. Stinks less now, too.

Eventually I found some free time to work on recovery. I pulled the SSD and slapped it into a basic USB-C enclosure. The file system was mildly angry from the bad shutdown, but I managed to get it cleaned up enough to move the database container and its data volume over to a different machine. WordPress was less happy, but I managed to rebuild it again. Regenerated the tunnel credentials and put the site back online. Done!

The fully patched and up-to-date WordPress container, within hours, got hacked.

It’s been offline since. Hence the Cloudflare Argo tunnel error for multiple years: I was frustrated with WordPress, I didn’t have a better solution, and kept thinking I’d find time to build my own basic site. Between everything else on my plate there just was never room, so it kept haunting me, same as Terra Fabula itself has done for a long time3.

Hugo ##

I stumbled fairly recently upon Jekyll, a static site generator. I don’t recall what I was looking for when I found out about it. There was an importer tool that was able to take the WordPress database and salvage most of the content. Every link was broken (I used some heavily modified WP plugins to make intra-chapter links work the way I wanted). I kept tinkering with layouts but couldn’t quite find a theme I liked. Nothing I tried to make myself looked any better. I am not a UI/UX designer.

Several weeks ago, I found Henry for Jekyll. While reading up on it, I discovered the creator had changed platforms and recreated the theme as Henry for Hugo. After looking at Hugo more, I migrated again - and, with a little containerization, am back up and running out of my kubernetes homelab4.

Being a fully static site, I’d have to integrate comments some other way. There’s no lack of options - some public hosted, some selfhosted - but I’m trying to decide if it’s worth bringing page comments back at all. WordPress’s moderation queue was routinely full of attempted spam posts.

Time will tell.

Github ##

The static site files are currently in a private github repo; that repo is mirrored to a local Gitea instance, where I have Drone set up to generate the container image. Some other automation pulls that into Kubernetes and restarts the site. The nice part about the setup is that, if for any reason I decide selfhosting isn’t the way to go anymore, there are a number of places that provide free hosting for static sites like this. Github itself can do it, and I’m planning that as a backup so a multi-year outage won’t happen again.5

Have I learned a lesson here? It’s one I’ve known a long time: I tend to overcomplicate things in the name of “I wonder if I can do X with Y?” and calling it an educational opportunity. The homelab itself is a shining example of this. But, all in all, the site setup is way simpler now.


  1. The AI scraping boom hadn’t really started yet, at least not to the extent it’s happening today. ↩︎

  2. I did not have it on a battery backup with my main computer, but I probably should have. ↩︎

  3. TF will have its own post soon. I have self-reflections and interesting things to share. ↩︎

  4. The homelab has been an interesting time, and probably deserves its own post - eventually. ↩︎

  5. Not that it matters - I don’t promote my site, and any search engine optimization has been torpedoed at this point. It’s unlikely anyone who hasn’t been occasionally looking for an update will discover it’s back up. ↩︎