How This Site Was Built (Again)

Mar 25, 2026

I rebuilt the same site, ten years later!

I'll save on some of the details for now, but there are some notes below on what's changed.

Moving to Codeberg

The world has changed a lot in 10 years, and Microsoft acquired GitHub since this was initially built. I'm looking to move back into more open spaces, and Codeberg seems to suit.

Codeberg Pages

Similar to GitHub pages (which this site was originally deployed on), Codeberg as 'Codeberg pages' which uses a simliar but open technology to deploy the content of a git repository as a webpage. Similar to GitHub pages which allows you to have one uncomplicated URL tied to your repository (e.g., morganjwilliams.github.io), Codeberg does the same (morganjwilliams.codeberg.page) - you'll need a repository called pages, and within it a branch called pages. Beyond that you'll need to setup a webhook in settings.

For a custom domain, you'll need a file called .domains containing your domain at the top, and to set up some custom DNS (I needed this variant).

Moving to Zola

This site was originally built in Jekyll (a static site generator using Ruby), and I'm now using Zola (a static site generator built in Rust). Both build HTML sites from templated markdown, Zola's a bit quicker, and for the time being I find it less complex to work with.

Installing Zola

If you have Rust and cargo installed, you can build Zola from source (cargo install --locked --git https://github.com/getzola/zola), but there's a long list of binary/executable install methods on Zola's installation page. There are also prebuilt binaries in GitHub, should you wish to just use one (maybe do/don't add it to your git repo?).

Get a Theme

Like Jekyll, Zola has a decent number of themes you can use to get a leg up on styling your page (or, leave it to someone with the interest, and find something which fits your vibe). These inform both the structure and styling of the page, and while a bit of a learning curve, the main bits will likely be documented.

Looking to simplify a little from where I'd been (and the components I'd modified/made with little real understanding of what I was doing) with Jekyll, I went with serene.

Doing without CI

Unlike GitHub, 'actions' in Codeberg are less plug and play. There is a hosted solution which you can ask for access to ('Woodpecker'; but generally, I don't think this is for personal pages) but beyond that it seems that you might be expected to self-host a Forgejo instance in order to connect to actions runners. I might do that one day, but not today. We'll build locally instead.

For this, I'm using a two-parallel-branch strategy in git - a main branch where 'structure' lives (what I build from) and a 'pages' branch where I push updates to content (HTML, mostly) which then gets rendered on Codeberg pages.

Current Local Tools of Choice

  • I'm still on Windows for now, so it's good old cmd for a terminal.
  • I use VS Code for work, and it's free, so in terms of editors, that's where it's at. I just find all the buttons to turn off anything referencing AI.
  • I use GitKraken as a git GUI to save my brain a little with some git management. But, having habitually run into authentication issues as 90% of the repositories I work on are private/not feeling the need to bake in credentials into this tool, I typically push to/pull from remotes from the command line. Also turned off all the AI features here.

Building for Humans

A notable addition relative to the old site is that one implements the human.json protocol (you can find pages of other humans here). I've also added a page detailing how I don't use generative AI here (or elsewhere): /ai.

https://fluids.rocks/posts/rss.xml