I knew it was time to upgrade my personal site when it routinely took 5+ seconds to load:

The Wordpress dashboard was clearly not happy with me:

Even Google started to send me angry emails:

Clearly, it was time for a change.

I set up my personal site in 2013. I wanted to spend as little time and spend as little money on it as possible - I needed an online presence, but it was never going to be my main focus, I just wanted a reliable platform to post occasional musings or links to my appearances elsewhere. So I went with Wordpress (free) and hosted it on a mighty 1 CPU core / 1 GB RAM storage Linode Nanode, for which I pay $7/month. I wasn’t planning to write any viral blog posts1, so this was plenty for my personal site and a bunch of other projects. I set up CentOS, Apache, PHP, MySQL, Wordpress, a free auto-updating LetsEncrypt SSL certificate and haven’t done anything else since, other than keeping things up to date.

Ten years later, it’s time to say goodbye to the old reliable Nanode. You served me well, friend, but it’s time for you to get some well deserved rest.

Now it’s 2023 and the requirements for the new and improved kharlamov.nyc are largely the same, with some new additions:

  • Easy to post & deploy code changes
  • Attention spans have only dwindled lately, so it should load fast
  • Minimize time maintaining and updating the environment
  • The site should look good on mobile
  • It should cost as little as possible

The “easy to maintain” and “load fast” requirements rule Wordpress out. While I could go with a managed hosting like Wpengine, and use a “headless CMS” version of Wordpress (i.e. back-end decoupled from front-end), that is significantly more work than I wanted to put into this project. I’ve used Wordpress since 2005, and while it still has use cases, it’s no longer the best choice for a personal site.

It became clear that what I really needed was a fully static site that won’t need to do any expensive calls to the database. I used Ghost to create an engineering blog a couple of jobs ago, and I still like it. But - their cheap plan is too nerfed (i.e. no custom themes), and I wanted to see if there’s another solution before spending $300/year on their standard plan.

Enter Hugo.

Hugo’s website makes a bold claim that it’s “the world’s fastest framework for building websites”. I haven’t personally verified this, but it’s definitely fast (hope this website is just as fast for you as it is for me!) It’s also very easy to use (that is, for someone who writes code… there is no GUI. But I’m getting ahead of myself.)

Once I finalized the framework of choice, the next question was hosting. I didn’t want to sign up for expensive hosting, nor did I want to rsync files to my venerable Linode server again. I’ve considered using Netlify, who specialize in Hugo hosting, among other things, but their free plan is super nerfed (can’t ever email support), and the standard plan was more than what I wanted to pay.

Long story short, I realized I could just host on Github Pages, and deploy via Github Actions. I was already paying Github $4 a month for a Pro account, so I wouldn’t have to pay anything extra for hosting.

So this is what my setup looks like:

  • All code, including the theme, all layouts, and the content, is stored in the Github repo.
  • To add a new post, I run a hugo new content posts/post_name.md command, and then edit the file using Markdown. For longer posts like this one, I write in Google Docs first, and then convert it to Markdown using Docs to Markdown browser plugin. For smaller posts, writing them in an IDE is fine - I use PyCharm, and it offers an awesome split screen preview functionality so I can immediately see if my Markdown syntax is correct.
  • To deploy, I just commit and push to master - deployment happens on push via Github Actions.

Altogether, I’m very pleased so far. With everything happening in the IDE / command line, I found that I don’t miss the GUI at all. The site has been lightning fast so far (but let me know if it’s slow for you), and it looks good on mobile.

Hosting on Github Pages means I don’t have to worry about infra - all for the sweet price of $0 (or $4/month, if you don’t have the Pro plan).

I’m sure there will be issues in the future, but for now I’m happy with how the new blog has turned out - maybe this nice setup will even encourage me to post more often!

  1. Despite my best efforts, one post did go viral, reaching #1 on Hacker News, but I promise to try not to repeat this. ↩︎