Welcome to the 2026 version of this site
Welcome to this update
For over 17 years I've used Drupal but today marks the first day this website is not powered by it 🤯 It is running on a static HTML system called Lume.
If this is your first or 100th visit, welcome.
Why the change
Drupal
When I picked Drupal so long ago, it made sense... Drupal was also a move for me away from handcrafted systems (at one point using ISAPI DLLs coded in Delphi) to a system which would be easier to use and just work... and so picking it was easy choice.
And it all worked wonderfully, and as Drupal grew in versions and got new features, so did I.
In the last 2 or 3 years though, it has gotten wobbly - countless version updates to the core and plugins have left the in an odd space. Drupal change to more modern development practices also changed how they wanted it used. Plugins deprecated or broken.
The biggest issue recently has been the Markdown rendering just breaks on every update and takes ages to fix.
And for a long time, I've been of the mind, just fixing it is quicker than moving away... until the hurt of always fixing was getting a bit much.
Drupal is probably great, but unless I started fresh, I do not think I would ever have real trust in it.
Hosting
When I picked a web host 17 years ago, they were one of the top for Drupal hosting and the experience with support was amazing. They were also super cheap.
Last year though I got a 25% price increase. Support is less than ideal. They can't do anything to update the MySQL DB I was using cause it is shared hosting, so I was stuck with a painful move if I wanted to keep it updated.
It has just been stacking up that once they were ideal, but now... less so.
Why Lume
Why pick Lume over everything else... it was Lume or Astro... and after trying both Lume was easier to use. Thats it. I think Astro is probably as good.
Having static HTML generated was the goal since it means I can host on any number of exceptionally cheap (or free) providers and I don't need a LAMP stack for a blog.
Migration Journey
If you are interested in how I did it... it was a journey and involved building lots of scripts to handle things.
- First I exported the DB and built a small tool to load it into a DenoKV store. I limited it to handle just blog posts. I did this so I could easily work with, as I knew I would have to do multiple steps in the journey.
- The old site has a mix of different formats for the content, mostly HTML and Markdown, so using mdream I migrated it all to Markdown. I then used a local AI model to help double check and clean the Markdown. I also had the AI build a description for all the posts, something which I almost never had before.
- During this process I reviewed all the content and dropped a lot of the old posts as they either were nonsense or they they time specific things like Event this Saturday, RSVP here. I think the final set over over 620 blog posts here is much better. There is a lot of content which is not relevant, like old CRM and SharePoint, but I think keeping it is interesting to reflect on... and maybe someone, one days, wants to setup an digital museum and runs into those issues.
- Using A LOT of find and replace in Visual Studio Code, I manually fixed up a lot of path issues (like making all the images use relative paths so I can test fully locally) and general cleanup of the Markdown.
- What mdream didn't handle was
<embed>and<iframe>tags, so I needed to re-process all the data to find them and then I manually added them to all the new Markdown files. In a lot of cases, I couldn't just copy/paste... because the iframe was pointing to dead content or, worse, FLASH! I was amazed how much of what was embedded was Flash. In all those cases I had to figure out the new urls and clean it up. This meant a lot of just broken content, is again working. I had not thought this would be the case when I started. - Taking the opportunity to clean things up I made use of ImageMagick to change all images from png/jpg to webp and strip out any exif info. There is no point having fast HTML with slow image formats.
- At some point in Drupal's life they changed where files uploaded went, which meant I had 2 folders with almost the same content in, so making use of FDUPES I was able to delete all the duplicate items.
- Using the Lume Check URLs plugin I then manually fixed up any broken links to images or files. This was also important since there were some URLs in posts which pointed to the wrong thing entirely. This meant that by the end of this I had fixed up issues I didn't even know I had.
- The biggest issues in this was Drupal had the ability to add attachments to posts, and at some point around 2023/2024... any ZIP file added to a post was deleted from the server... and I have no backups 😭 So back to the DenoKV to build another tool which found any attached zip files and then tried to get them off of the WayBackMachine. In the end there were two that are lost to time, the first is a ZIP of a completed demo (not too bad), but the other was the latest version of the South African ID Number Excel Spreadsheet. I was able to get an older version but the latest one is gone 😭
- And through out all these steps, just looking at blog posts and fixing up the content as I went was manual.
All in all this took about 50 hours to do and lots of once off scripts, and SO many regular expressions.
AI
You'll see that I used AI to help with this change, and in all cases I ran a local model to help. It was hit and miss to be honest but overall it sped things up.
Beyond the descriptions (for migrated items - this posts description is hand made), all AI was used to do was help migrate content. I probably could've avoided it with more tools and scripts, but the trade-off was not really worth it.
Storage
Previously the website took almost 800Mb on disk! Now it is a slim 140Mb, thanks to all the de-duplication and removing of things which are not used anywhere anymore. Really happy with this saving, even though it means not much.
Thats it
Hopefully now that everything is just a collection of Markdown files, the next time I need/way to change things... it will be much easier.
So that is why I moved websites, and how I did it. If you have questions or thoughts on it why not email me.