When this website was young, it was created using Wordpress for content management. This was fine. Wordpress was ubiquitous, benefited from a huge community, and was supported by many value-adjacent services. My experience with PHP also made this choice more comfortable as I would be able to adjust things if it were required. I ended up spending a lot of time fighting with the WYSIWYG editor and would often switch to the source view and edit my post’s HTML to get my exact outcome. Updating the Wordpress software to protect it from many attack vectors was tricky for older plugins and themes which may break or act unexpectedly. And since I was hosting Wordpress myself, this also meant taking regular backups of the site and it’s database.
Eventually, I decided the overhead of supporting a dynamic website was too much given the basic nature of the content but was not prepared to do a migration to another platform. I was also not writing on my blog as much as used to. I ended up exporting my Wordpress site to static files and hosted those someplace with fewer requirements. At least I could stop hemorrhaging time into managing my quiet website.
I dumped the database and files onto a local computer with Docker configured to run PHP and MySQL for editing and exporting the site. The exports would be uploaded to basic VPS server with nginx in front of it. This worked very well for quite a few years but would always become an issue if I needed to make adjustments to any of the content. This process included starting a set of docker containers, logging into the temporarily-erected app, apply my changes, export the new site, updating the static files in git, backing up my database state, and
scp-ing the new files over. I could’ve scripted some of this, but that felt like the wrong investment to make. And worse, it was a barrier preventing me from adding anything new to the site. So, I haven’t.
There is some regret that I had not written more, but I doubted (and sometimes still do) the value of anything I had to share. I decided that spontaneity was important enough to make the investment and migrate to a better content management solution. Additionally, I felt my work was becoming deep enough that a live portfolio would help me keep my achievements organized for posterity’s sake.
I knew my final result should be static files so I could take advantage of more modern hosting solutions. Many other content creators were having success deploying static content using Hugo for capturing markdown and some light configuration and processing it into very beautiful websites. Using Hugo as the foundation for my new site, I found a theme which was simple enough to edit into something more personal.
I also wanted to take advantage of the static properties of my new website by leveraging content delivery networks popularized during the era of Web 2.0. Many larger organizations have done the work of ensuring high availability and have commodified static webpage hosting to the cost of (nearly) free. Further, Web 3.0 is still in its nascent stages and I expect that solutions built on IPFS or similar will remove centralized points of failure and benefit from static content’s highly cacheable nature.
A more recent arrival to the market was Cloudflare Pages, a free(?) service which leverages their existing content distribution network to make content from site generators, like Hugo, easy to retrieve from many points-of-presence around the globe. Deployment using Cloudflare Pages was very straightforward (despite some silly default versions chosen for Node and Hugo) and has a very nice deployment status page which shows the build and deployment occurring in real-time. There are build pipelines for branches which you aren’t ready to publish so you can preview them before deployment. They appear to make money from workers running functions, but if I don’t need this I assume I’ll have hosting for free until they change their pricing. And best yet, SSL is built-in.
The migration hasn’t been completely painless. Maintaining the URLs which were used, removing a lot of the Wordpress-esque ligatures and HTML UTF-8 symbols, and reorganizing each post’s media to fit the new processing pipeline were all fun side-quests. There was also a learning curve in understanding Hugo’s prioritization for consuming templates and content. I’m hopeful that this investment will last me another decade before I have to consider my next migration.