Choosing website technology

| 3 min read

I've procrastinated for years putting this site together. How hard is it to build a simple website? Seemingly harder all the time despite having more technology. I have had the domain forever. Apologies to all the other Darren Platts out there.

Goals..

I wanted something super simple, static, so there are no running processes. My main use cases are occasionally blogging. I am happy with vi and markdown for writing. Blogs needed tags, an RSS feed ideally, pagination, etc., decent ability to drop in code snippets with syntax highlighting. I wasn't in the mood to program regularly to maintain the site (ideally, dropping a markdown file in a folder is as much as I can be bothered with), but a little coding to set up the site is ok.

Choosing tech for a website

Then I nerd sniped myself seriously choosing a tech stack. WordPress is too complicated, having managed other's sites (most recently, I dealt with a plugin system inside a WordPress plugin system - inception. The site was slow as hell too. I loved the idea of a simple static website, but there are too many choices. I briefly considered writing my own :) - how hard can it be? At least I'd understand how it worked for 5 minutes.

FSharp-based solutions

I love the language; it's efficient, easy to maintain, and should be ideal for generating a website. I looked at Nacara, wanting something #fsharp friendly. Fornax gets an honorable mention too. Blogging in Nacara had more friction than it should have. Maxime wisely pointed me at the underlying tech he was migrating to 11ty with Nacara as a plugin.

Other popular options

  • Hugo was another runner up seemed popular, also simple
  • Jekyll was well supported on hosting platforms like Git Hub, which is a consideration. I'm not wildly fond of Ruby.
  • Eleventy/11ty was also popular, recommended by Maxime, and looked simple and sane.

So eleventy it is. I got to hello world in eleventy very quickly, and it is simple. The posting mechanism is elegant, and the default rending is ugly. So begins a second journey - finding a style for the site.

Styling a website

In theory, you can write your own CSS, but CSS for some reason, just melts my brain. I played with Stackbit for a few minutes but it was going back to building a whole website again with jamstack. There are decent galleries of options, and I liked the simplicity of Eleventy-Duo. A quick template in git, git clone, and boom - you have a website (with someone else's picture!). Hacking something that already works is 20x faster than building from scratch, and the rest wasn't too painful. There is a point at which editing JSON data structures and building custom CSS styles became necessary (yes, I had to get my hands dirty eventually). I generated a list of publications programmatically that wasn't too painful.

I had one lingering bug. Two-level bullet indenting seems to be broken in the eleventy-duo system (not in eleventy itself). So bullets are all on one level for now.

Images

I will confess I used DallE2 for the artwork and felt slightly guilty about it. I was in a hurry in my weak defense, but at some point would like to pay a human to make some images. The icon definition was surprisingly challenging - these images are rendered at 32x32 or even lower resolution, and it's not easy to find something that works at that scale. There were some fun ideas along the way. The letter D in a futuristic setting prompt was fun but terrible viewed at low resolution. A larger logo for the page was simpler - how to represent something around DNA and engineering - the final image was quirky enough to capture my imagination but to be honest, I'm not what's going on there.

Hosting a site

Where to publish? The load for serving an infrequently visited personal website doesn't justify dedicated hardware on the hosting side. This review on geekflare was helpful.

Some options I considered

In the end, netlify was simple and ethical, and they make the onboarding experience incredibly simple - linking to your github project directly, I had to change just one setting (default output is public not _site), and it just worked.. Impressive.