Every now and then, the urge strikes me to make a new website for myself.

I have a fairly long history of doing this: as a teenager I learned HTML and started making sites about various topics, eventually figuring out how to actually put them on the internet via various shady free web hosts.

Later I learned about PHP, which was a revelation. Suddenly there was a whole new dimension to how websites could work. Content could be dynamic! Pages could be rendered within templates, instead of having to have a separate copy of the entire site layout in every HTML file. I spent a lot of time reading PHP documentation.

I found a proper web host, which cost money but wouldn’t plaster ads all over my sites. I figured out how to register domain names. I created a real website, with real content I created, with my own real domain name. I felt like a web development god.

That first proper website was up from 2006 until at least 2017, running on PHP. The only reason I took it down was because I forgot to top up the credits on my web host, and after only one paltry warning email all my content got deleted. I could have re-uploaded it all, but by that point I’d grown older and it no longer reflected who I was, so I decided to leave it at that.

In 2014 became a professional web developer, and learned about JavaScript, React, SPAs, APIs, continuous integration, microservices, HMR, TypeScript. I would look back at humble old PHP and sneer.

Armed with my new knowledge, I figured I could make a really great new website to go here on eddiemclean.com, my flagship domain name. It would of course use a slick SPA framework for the frontend (whichever framework I considered to be the best one that month), with CSS-in-JS, loads of animations, and a Node API for content. The tech recruiters would be blown away!

But I’d keep it simple: all the content would be in the form of Markdown files, which would be converted into HTML on the frontend. Of course, I’d want fancy functionality like lightboxes for viewing images, so I’d need to alter how the Markdown-to-HTML conversion worked…

Complexity was growing, but I quickly ran into a problem: as soon as I implemented my new state-of-the-art website, the state of the art would rudely change into something else. In the NPM ecosystem, a package version from two years ago is considered ancient, unsupported, and insecure. Keeping something like that up-to-date is a full-time job.


The other day I read this post about why people should do more blogging, and it inspired me to have another crack at carving out a space online which is solely mine. In an age of social media brainrot and enshittification, independent spaces for writing and thinking have never been more important.

The post lists a few popular options for creating blogs. But the problem with pre-made blogging solutions is, they necessarily fall into three categories:

  1. Paid service. There’s nothing wrong with paying for a valuable service, but I’m a cheapskate.
  2. Free service. This will inevitably either shut down, enshittify, or be missing important features to goad you into upgrading to a paid tier.
  3. Self-hosted. A good option, but if I’m going to go through the faff of hosting it myself, I’d rather also build it myself and have full control over how it works.

So I decided to build it myself. I also didn’t want to go down the JavaScript/NPM route. I don’t want maintaining this thing to be a full-time job — I already have one of those. So I figured, why not see what PHP is like these days? Supposedly it’s better. And it doesn’t really matter that I haven’t written a single line of PHP in a decade. It’s not like I have to write all the code myself. We have AI for that now.

The nice thing about PHP is that the server is separate from the application code. My host can deal with updating PHP versions, and my site can keep ticking along happily for a decade or more.

So, I fired up Cursor and in one evening I had the basics of a website. It’s PHP with the Blade templating engine, and an SQLite database for content. The one place I do have JavaScript so far is the admin interface, which has an HTML editor for posts and image upload functionality. It’s a small Svelte 5 app, compiled down to one HTML page with all the JS and CSS inlined.

In another couple of days I got hosting and deployment sorted out. And that’s it. One shiny new website.

Expect posts about tech, woodworking, 3D printing, AI, and whatever else may take my fancy.


In the original Star Wars, when Obi-Wan gives Luke his father’s lightsaber he describes it as “an elegant weapon, for a more civilised age”. I always thought it was “from a more civilised age” — an age that was now firmly in the past. But in fact he says “for”.

That might just be slightly weird phrasing, or a misread line by Alec Guinness. Or, maybe Obi-Wan meant something different than what I assumed. Maybe he meant that the more civilised age was still to come, after the evil empire was destroyed. Maybe he meant that the weapon itself would help bring that age about.

Maybe our more civilised age is still to come, too.