Image: James Sullivan on Unsplash

How I built this site

March 24, 2026

TL;DR

It’s a static site, built with Hugo using the Hugo-Fresh theme, deployed straight from Github using a Cloudflare Pages worker.

Building

Before you ask: no, it’s not vibe coded. But if we’re making AI confessions, then I’ll admit to a bit of Github Copilot, because man doesn’t do CSS, and really doesn’t want to.

I wanted something easy to maintain, free to host, and familiar to me. As it’s a solo project it only has to work for me.

I’ve been building things in Go for a few years now, and love using it. Plus, I’ve used the (Go) Hugo framework in a previous role. So that felt like the best and most obvious option.

Hugo lets you define most of how the site looks using configuration files in Yaml, markdown and relatively simple templated HTML. All the content is in Markdown, which is super easy to update and format.

Modifications

Hugo is great for its range of themes. In this case Hugo Fresh, which builds easily without any potentially complicated dependencies like Node.JS.

That said, no theme is going to be perfect for what you want. I’ve had to make lots of small modifications to simplify Hugo Fresh for what I wanted. Other than the obvious updates to customise the branding1, I have also done the following:

  1. Stripped out the sidebar, and most of the default sections from the home page. Then I updated the remaining section layouts to tweak minor elements of layout.
  2. Added shortcodes to manage images, format block quotes, put in the current year, and other little helpful things.
  3. Added a layout for the blogs list page, and for a single blog (like this one).
  4. Added a layout for the services pages - this is just a cut-down version of the blog layout.

You can still see the resemblance between this site and the example Hugo Fresh site:

two websites side by side

Ideally, getting it looking how I want should be a one-time effort at the beginning, but in practice it’ll probably be something to tinker with forever.

One thing that GitHub Copilot2 has actually been really useful for is not just making small changes for me, but also explaining how different elements are implemented in the theme (and what it’s based on), and how they can be modified. That saved lots of time in having to read up on how the theme is implemented.

Hosting

This one’s easy; everything is on Cloudflare now, and a Pages worker is free and relatively easy to use. Plus there are lots of existing blogs3 on deploying a static site using Cloudflare Pages. Here’s how I did it, in brief.

  1. Under Compute » Workers and Pages, create a new application. Cloudflare new worker
  2. Connect it to your GitHub repository (which can be public or private).
  3. Configure the build process, making sure to set the -b option with the base site address4. This set of build parameters worked for me: Cloudflare build details
  4. That should build and deploy to a CF address. Add a custom domain binding to use your proper domain, and that’s it.

This setup automatically builds and deploys for any updates pushed to main.

Notes


  1. Shout out to Iconic UX for the illustrations. ↩︎

  2. Sure, Claude or Augment or whatever you think is the better tool would have been good options too, but GitHub Copilot was there for free in VS Code… ↩︎

  3. E.g. from Cloudflare, and this blog↩︎

  4. Don’t forget to use relative URLs in the site, otherwise it can break links or use the generated Pages address instead. Thanks to Naz for spotting that on the blogs list! ↩︎

Tags