The switch to Hugo

TLDR: I switched from GhostCMS Pro to Hugo

The biggest reason, and let’s be clear, nobody should have to pay $400+/year to host a personal website. That’s not to say paying about $30/month for a managed, secure, personal-domain fronted site isn’t a bad thing, but if you’ve got super-low-traffic like me, moving hosting to The Edge™ was a no-brainer!

I’ll explain The Edge™ in a bit, but for me, having developed, hosted, built, fixed and broken many WordPress sites in the past, traditional hosting of WordPress was where I gravitated to for a long time. Switching to GhostCMS was a decision based on ease-of-publishing and security, where everything was managed using GhostCMS Pro.

I wanted a way to be able to publish posts on my website using Markdown, which is a file-type I work with on a daily basis. The GhostCMS UI was amazing to use and I could use a combination of different entry-types in the editor, including markdown, video-embed and quotes. That said, I was also using a theme which was good at first, but the breaking changes from release to release were a lot of work to manage and I don’t really have the time anymore to learn all the new web frameworks or libraries available to developers today, to develop a new theme from scratch. So, to save money on hosting and simplify even further the editing experience, I decided to try Hugo.

Why Hugo?

I have been learning how to program in Golang for building custom operators in Kubernetes, and realized that there was an incredible static-site generator framework developed in Go called Hugo. Getting up and running was super simple and I can publish blog posts using vanilla markdown all day long. Best of all, hosting on CloudFlare pages, I don’t have a single-point-of-failure server running in a datacenter somewhere. This site runs at The Edge™.

The Edge™

What does it mean to host a website at The Edge™? This is a concept I’ve been wanting to try with my personal site for years, having seen other developers run WordPress CMS in headless mode on WPEngine and most recently at Symend where Netlify hosted all the front-end pages for the APIs. With CloudFlare pages, I can host static HTML, generated via Hugo on CloudFlare’s Edge Workers. This means that when I make changes in my code and commit it, CloudFlare builds my hugo code, generates the static HTML and publishes out to the Edge Workers running globally.


Let’s be clear. GhostCMS Pro Managed Hosting was an incredibly fast, secure and simple way for me to quickly develop and publish content to my personal website. I highly recommend their service and if I didn’t have meagre traffic stats on my site, or was running a subscription service, I’d probably continue to run the site there.

I was paying about $400/year to host on GhostCMS Pro’s Managed Hosting, and about the same on WPEngine and WPCloud prior to that. With CloudFlare pages, my cost is $0. Until unique site visits hit 100K, hosting on CloudFlare pages is free up to that threshold. Since I have never even consumed a fraction of that traffic volume in the history of my personal site being live since around 2003, I’m very happy with this choice.

Hugo doesn’t have the massive backend of code and database required to run traditional CMS platforms, so by running static HTML at The Edge™, the surface-area for security risk is significantly reduced.

GhostCMS didn’t have image processing available in their platform (yet) so the speed stats on my site were only as good as ~85%. Using image-processing in Hugo and developing source-code with images using src-set brought my site-speed rating up to ~98%. This is also attributed to the fact HTTP calls aren’t going to a single origin server in a datacenter somewhere, CloudFlare Pages is global.

Ease of Use
Creating a new blog-post consists of a common programming pattern:

  1. cut a test branch
  2. cut a test branch
  3. do some work
  4. test it locally
  5. commit to test branch
  6. create a pull-request
  7. smoke test
  8. merge to main branch
  9. get coffee

With CloudFlare pages, the pull-request (test branch) can be thoroughly tested and iterated upon until everything is working as expected. With the merge to the main (or production branch), the new changes are live on the primary domain.

If Golang isn’t your thing, there are many different platforms to use to generate content that can be hosted on CloudFlare Pages. I highly recommend it.