Skip to content

Nineteen Years, Four Domains, and a New Front Page

Nineteen years, four domains, more hosts than I care to count, and now a newspaper-style redesign. A look back at the old coats of paint, how the new one was built, and why this blog now runs on Kubernetes.

The front page of the redesigned Eric Mann's Blog in November 2026: a newspaper masthead in heavy black type, section navigation, a lead story with a large photo, and a verse-of-the-day box beside the journal.
The front page of the new design, November 2026.

If you’re reading this on the site instead of in your inbox or a feed reader, you’ve probably noticed that things look different. The blog now reads like a newspaper: a masthead, section fronts, a lead story, and a lot of thin rules holding it together. It also lives somewhere new.

Last Thursday I moved it off the little machine in my home office and onto a small Kubernetes cluster sitting right next to it.

The two changes landed within a week of each other. Together they’re the biggest overhaul this site has had in a long time.

That got me reflecting on how long “a long time” really is.

Nineteen years and counting

The oldest post in the archive, Blue Oceans, went up on July 12, 2007. I was in grad school, reading Kim and Mauborgne, and fairly sure marketing strategy was going to be my career.1It wasn’t. At six I wanted to be an architect, and I’ve chased a few other things since. Software won. Nineteen years and nearly 900 published posts later, this blog has outlasted a few careers, every host it has ever run on, and every design I’ve ever put on it.

It has lived at four addresses: mindsharestrategy.com, eamann.com, ttmm.io, and now eric.mann.blog. It has run on just as many hosts. It started on Network Solutions, moved to shared hosting at 1and1, spent a stretch on WP Engine, and then moved to Liquid Web, with detours through EC2 instances and Digital Ocean droplets and a misguided export to Jekyll and GitHub Pages along the way.

In April 2024 I left the cloud entirely and moved everything to a mini PC on my desk, which I wrote about in The Great WordPress Migration.

The posts came along every time, but each move cost something. While I was cleaning up the archive for this relaunch, I found twenty images from the Mindshare Strategy and Grounded Christianity days that no longer exist anywhere: not on my server, not in a backup, not even in the Wayback Machine.

Other losses I could repair. The first episode of an old podcast, a couple of recorded sermons from the eamann.com years, and a WordPress Weekly episode all came back from the Wayback Machine and now live here again.

A few old coats of paint

I don’t have a picture of every version of this site, but I found a handful. They say a lot about who I was when I made them.

The Mindshare Strategy blog: a dark header with the tagline Tell your own story, a featured post about object-oriented JavaScript, a maroon navigation bar, and sidebar widgets for email and RSS subscriptions.
Mindshare Strategy, on mindsharestrategy.com.

Mindshare Strategy is the oldest design I still have a picture of. It had a dark header, a maroon nav bar, a white page with stamp-cut edges, and a date badge on every post. The tagline was “Tell your own story …”

I still believe that.

The top post was a Kickstarter proposal to write a novel alongside an open source project. I never launched that Kickstarter, but I did eventually get around to the fiction.

A photo of a laptop screen showing a 2012 WordPress test site: post tiles with landscape photos, each crossed by a tilted orange or green title banner and a category label.
The 2012 redesign, photographed mid-build on a local test install.

In 2012 I built (yet another) a new design from scratch. The only record I have is this photo of my screen, taken mid-build on a local install that was literally titled “WordPress Test.”

Landscape photos, tilted color banners, and a category tab under each one. Those tilted banners were fun, but I also remember a hash-based random feature image being loaded automatically on each post.

The eamann.com blog in 2013: an orange Eric A Mann header, a three-column layout with WordCamp and WordPress core contribution widgets on the left, the post Reader is Dead! Long Live Reader! in the middle, and an About Me photo on the right.
eamann.com in March 2013.

By 2013 the blog moved to eamann.com, under my own name, with a lot of orange. The sidebars are a snapshot of my WordPress years: an “I’m speaking” badge for WordCamp Phoenix, a running list of my core contributions (“View all 17 tickets on Trac”), and an ad for a premium theme.

The lead post mourned the shutdown of Google Reader, something I was apparently still grumbling about twelve years later when I set up FreshRSS in a container.

The Things That Matter Most site on ttmm.io in 2017: a slate-blue header bar, a grayscale photo of Cascade peaks under the site title, and three post columns below.
Things That Matter Most, on ttmm.io in 2017.

In 2017 it was The Things That Matter Most at ttmm.io: slate blue, a grayscale panorama of the Cascades, and three tidy columns of posts. The staging copy lived on WP Engine, and during this cleanup I found three posts that still linked to full-size images on that old staging host.

That name has stuck with me. It was a (failed) podcast, the new site identity, and is now the new tagline for the blog itself “These things matter …”

I’ve also open sourced the current theme asttmm_theme.

The new front page

The new design treats the site like a small newspaper. There are seven sections (Technology, Business, Faith, Journal, Writing, Security, and Opinion), and the front page leads with the newest thing in each. Technology gets about twice the room of everything else, because I tend to write about twice as much of it.

Structure is drawn rather than boxed. There are no cards, no drop shadows, and no rounded corners. Zones are separated by 2px rules, items by 1px rules, and everything is set flush left in a single typeface, Archivo. The page is near-black ink on off-white paper.

For a splash of color, red is used as a mark: kickers, the active section, links on hover.

The new site is also functional not just a coat of paint:

  • Series. Multi-part work is tied together across sections, so every part shows where it sits (“Part 10 of 12”) and every series has its own hub. Old runs like The Great Migration and Cryptopals are series now too.
  • Serialized fiction. Writing has its own front page built for serials. The Mantle, a four-part story, started this week, with a new chunk published each month.
  • A quieter journal. Shorter, personal posts sit in the right-hand rail instead of competing with long technical pieces.
  • A verse of the day, pulled each morning from DailyMedToday.

I cared about most that the site should still look finished even on a quiet month. Every block has a designed fallback for when there’s little or nothing to show, so nothing on the page ever renders empty or shows placeholder text.

How it was built

The design started as an interactive prototype in Claude Design. In September it became a written spec: the visual language down to every token, the anatomy of each screen, the content model, separate specs for the theme and its plugin, and a fallback for every block. From there it was built as a WordPress block theme plus a companion plugin. The theme owns presentation; the plugin owns the data (series, serials, the verse feed) so that data survives if I ever change themes again.

Most of the code was written by AI coding agents working through that spec one phase at a time, with a review at the end of each phase before the next one started. My job was closer to editor than typist: deciding, reviewing, and sending things back.

About 750 commits later, the theme is at version 0.3.14. It’s open source at ericmann/ttmm_theme, and the README has a link that opens a demo in WordPress Playground.

The theme was the easy part. Nineteen years of posts carried nineteen years of habits, every one of them exposed by the new design. Before launch I:

  • converted 723 posts that were still in the classic editor to blocks
  • collapsed 1,010 tags, most of them used exactly once, into about 50 curated ones
  • rewrote 341 links that still pointed at the old domains so they go to the right posts here
  • wrote excerpts for the 223 posts that never had one and alt text for about 450 images
  • gave a featured image to the 747 posts that didn’t have one

Agents did most of the reading for these passes. Every published post was read at least once to check its tags. I approved each pass before it ran, and started every pass from a fresh backup.

From one box to a cluster

The mini PC served this site well for two and a half years. It ran WordPress in Docker Compose with Varnish and memcached in front, and Cloudflare in front of that. The caching story turned out better than I expected. But a single box with a hand-tended Compose file is a pet, and last year I spent a whole post arguing that WordPress hosting needs to move to modern, container-native infrastructure.

It was time I took my own advice.

The site now runs on a three-node k3s cluster in the same office. WordPress ships as an immutable image: WordPress 7.1 on PHP 8.5, with every plugin and the theme baked in at build time. File editing and dashboard updates are switched off.

Changing anything means opening a pull request.

CI builds and smoke-tests the image, I tag a release, and Keel rolls it out. Rolling back means pinning the previous tag. A weekly job opens an issue when WordPress, PHP, or a plugin falls behind. Updates become deliberate rather than automatic.2Don’t get me wrong, I love WordPress auto updates. But I need the WordPress pod to be ephemeral so it can’t edit its own code – otherwise rescheduling the pod or migrating it to a new node/cluster loses the updates it’s made.

Traffic still comes in through a Cloudflare Tunnel, so my home network stays private. Cloudflare now caches every page until midnight, when the date in the masthead changes, and WordPress purges the cache when something is published. The only email WordPress can send goes to me, through a tiny Cloudflare Worker. Another check from outside the network looks at the site every ten minutes and emails me if it’s down.

Cutting over from the old system took about fifteen minutes from putting up a maintenance gate to taking it down. After that I stopped the containers on the old box.

What nineteen years teaches

Hosts come and go. I’ve used at least six, and I don’t miss any of them. Designs come and go too, though each one says something about who I was when I made it: a marketing student, a WordPress developer giving talks, someone working out what matters most.

What lasts is the writing. Keeping it reachable takes work.

I’ve changed domains at least four times; every change broke links and lost readers. The 341 links I rewrote this fall are scar tissue. If I could give 2007 me one piece of advice, it would be to pick a name and keep it. Failing that, carry your archive forward every single time, and look at what you’re carrying.

Looking back, the taglines tell the story better than the hosting bills do: Tell your own story, then The Things That Matter Most, and now These things matter. It’s the same idea, just a little more simply each iteration.

Here’s to the next nineteen!

If you’d like new posts by email, the newsletter is the easiest way; RSS still works too, of course. Comments are open (for the first time in years), so if something looks broken, or you remember one of these old designs, I’d love to hear about it.

  • 1
    It wasn’t. At six I wanted to be an architect, and I’ve chased a few other things since. Software won. ↩︎
  • 2
    Don’t get me wrong, I love WordPress auto updates. But I need the WordPress pod to be ephemeral so it can’t edit its own code – otherwise rescheduling the pod or migrating it to a new node/cluster loses the updates it’s made. ↩︎

Your comment

Your email address is never shown.