A little while ago I wrote about how AI got me writing again. Once the words started flowing, I ran into a different problem: the blog itself had been sitting mostly untouched for years, and it showed. A plain default theme, no dark mode, ugly URLs, a couple of broken links, and an SEO setup that was quietly working against me.

None of that stops you from publishing. But once you are publishing regularly, the small rough edges start to bug you. So I spent a few evenings tuning the place up. No single change here is impressive on its own. Together they make the blog feel cared for, which is the whole point.

Here is what I changed and why.

The reading experience

This is where most of the work went, because it is what readers actually feel.

Dark mode. The big one. It follows your operating system preference by default, and there is a small toggle in the nav if you want to override it. Your choice sticks between visits, and a tiny inline script applies the theme before the page paints so there is no white flash on load. Getting a dev blog to look right in dark mode is mostly about the code blocks, so I spent the most time there making the syntax colors readable on a dark background.

Reading time. Every post now shows an estimate next to the date. It is a rough word count divided by a normal reading speed, nothing clever, but it sets expectations before someone commits to a wall of text.

Copy buttons on code blocks. Most of what I write is commands and config. Asking people to carefully select a multi line block is rude when a button can do it. Every code block now has one that copies the whole thing and confirms it worked.

Anchor links on headings. Hover a section heading and a small link appears so you can grab a direct URL to that exact spot. Handy for the cheatsheet style posts where people want to link a single section.

Navigation. Posts now have previous and next links at the bottom so you do not dead end. Tags are visible and clickable, with a page to browse everything by topic. The home page is grouped by year instead of being one endless list.

URLs that do not embarrass me

My old setup put post categories into the URL. That meant a post lived at something like /homelab/networking/2026/05/28/some-post.html, and the casing was inconsistent across posts. Worse, categories end up in the URL means that renaming a category breaks the link forever.

I switched to clean, stable URLs based only on the date and title. The catch with changing URLs is that any existing link to the old address breaks. So for the handful of posts that were already live, I added permanent redirects from the old path to the new one. Old links keep working, new links are clean, nobody notices the seam.

SEO that stops fighting me

This was the surprising one. I own a few domains that all pointed at the same blog. I assumed more domains meant more reach. It is closer to the opposite. Search engines see the same content on several addresses and have to guess which one is the real one, splitting whatever ranking signal the content earned across all of them.

There is no dramatic penalty for this, but it is wasted potential. The fix is to pick one canonical domain and send everything else to it with permanent redirects, so all the signal consolidates in one place. That is what I did. One home, every other domain forwards to it.

While I was in there I also bumped the RSS feed to carry more posts, since it was only exposing the ten most recent. If you read via a feed reader, the feed is there and now reaches further back.

The boring part that makes the rest possible

The blog builds and deploys itself. I push to the main branch, a workflow builds the static site and ships it, and the change is live a minute later without me touching a server. I wrote about that pipeline before, but I tightened it here: it now fingerprints the built site and skips the deploy entirely when nothing actually changed, so a typo fix in a draft does not trigger a pointless redeploy. I also pulled my dependencies up to current versions while I had the hood open.

None of this is visible to a reader. That is exactly why it is easy to put off, and exactly why it is worth doing once so you never think about it again.

What I took away from it

The pattern across all of these is that the unglamorous changes compound. Dark mode gets the attention, but the clean URLs, the redirects, the feed, and the deploy guardrails are what make the blog feel like a real, maintained thing instead of an abandoned one. Each change took an evening at most. None of them required rebuilding anything from scratch.

If your own blog has gone quiet, the lesson from the last post was to remove whatever stops you from writing. The lesson from this one is the follow up: once you are writing again, spend a little time making the place worth landing on. Small wins, one evening at a time.


This post was written with the help of AI (Claude by Anthropic).