Upgrading my blog
When I started building this blog I was curious how long I'd keep it going and what I'd write about. Indeed, here's an engergetic passage from the second post 11 years ago:
...I've already built an mvp of the blog - look it’s glowing at you from your screen. You're reading it now. It is a side project squeezed into the small gaps that life sometimes provided but it does give an idea of the thoughts and process that I put into building a project. There were some interesting decisions along the way, I discovered some new tools and had problems to overcome. I’m still iterating and improving. I reckon there are enough navel gazing, meta posts in this project to pollinate the blog and hope it is flourishes into something beautiful.
- Mike Harris, Building a blog, Mar 2015
Meta navel gazing
So that was quite prescient - I have built lots of little things into the blog - from RSS feeds through to extravagant animations, progressive web apps through to automated lighthouse reports. Learnt a bunch along the way and each fun feature provided content for various posts. What I have failed to do is to keep all the libraries and dependencies up to date.
Upgrading the blog
This is a fun project to help learn things. I know how to manage dependencies and they don't provide much joy. The energy to push through and do the dirty work just wasn't there. I remember trying to upgrade handlebars (a templating engine) a few times and getting a bit stuck. Almost anything in life was more important! Fortunately AI came along and in the space of an afternoon my pal Claude worked alongside me in the background and we sorted out all the dependencies. We also did a bunch of slightly tedious but essential things such as expanding the test suite, providing better tooling along the way plus adding in workflows and types. It's a real project now!
Smoothness of AI just gets you going
My friend Werner wrote a longer, more detailed post about using AI to tackle often tedious tasks. Tasks which in the past would have sucked up a lot of time and been intimidating to start but now you're much more likely to tackle.
AI for the tech, me for the words
AI can fix the tech but I'll be writing the words. It goes through AI to check spelling and flag where it thinks grammar might be off but I usually roll with what I have and just use this to tidy up obvious errors.
Conclusion
The building part of the blog has done its job - I've learnt loads along the way, written posts and done talks on how I built it. I'll probably do some fun features in the future but it's a bit of a relief to have finally got the project into a decent state. Almost every job I've interviewed for I've shared a link to a blog post - I'd now feel happier if they actually looked at the code it was running on.
Appendix - updates
A list of everything that my pal Claude built to bring this project up to date. This list was produced by AI because I ain't got time to be copy pasting a bunch of links from github.
Modernising the stack
- Modernise the stack and add CI
- Add prettier
- Migrate the server to TypeScript
- Migrate the browser code to TypeScript
- Drop the client-side post rendering
Bugs found along the way
- Repair malformed HTML in posts
- Repair the RSS feed
- Repair five broken internal links
- Load d3 so the running chart renders
- Make npm run dev work again
- Correct post meta-data gaps
Safety nets
- 404 unmatched URLs
- Cover the MCP server with tests
- Cover meta-data parsing properly
- Add security response headers
Making it easier to work on
- Run the CI checks locally
- Run the git hooks in a container
- Add a compose dev service
- Let Dependabot keep dependencies current
- Add a scaffolding script for new posts
- Document the layout and conventions