Tech Stack Overview

Feb 9, 2023

It feels like it’s been quite a while since I last wrote a post on this site; it’s been since 2020 😬. My bad.

Throughout that 3 years, I’ve used this website to showcase my photography and travel. Recently, I’ve become unhappy with its performance and presentation.

When I began this website, I envisioned it as an easy way for me to combine some of my favorite (and occasionally forgotten) joys: photography, travel, and writing. I wouldn’t say I’ve always done well at keeping it up to date with my activities, nor have I always put my best effort into the writing. You don’t have to look too hard to find plenty of places throughout the site where I phoned it in.

In this post, I’d like to document how this website is put together, partially for my documentation, and partially because I find it interesting and fun to discuss.

History

Ghost

I’ve been getting more and more into photography since I bought my first interchangeable-lens camera around 2016. This is even discussed in my original post to the blog!

Early on it became clear that simply having photos wasn’t sufficient. I wanted to be able to detail the context behind the photographs and my progress as a photographer. To that end, the blog began as a self-hosted ghost instance. I was too cheap at the time to pay for the hosted ghost service, so I rented a very cheap VPN from digital ocean and hosted it there.

The site was hosted this way for a long while. Eventually, though, I became tired of paying for and maintaining the VPS I was using. Keeping ghost up to date was frequently a headache, and ensuring my ubuntu VPS was safe from exploits and hacks was equally time-consuming. I started looking for a smarter way.

Jekyll

Eventually, I settled on static hosting as the future of the site. Services like ghost and WordPress store their content in databases and render them on demand (sometimes they are cached by smart web server infrastructure). When none of your content changes regularly and consists almost entirely of static content, the database and backend infrastructure is unnecessary. Cue Jekyll.

Jekyll is a static site generator. The workflow for posting to my website was much different now: write the post in markdown, run the site generator, and upload the resulting files to a static site host. There are many choices for static hosts out there, but I selected firebase.

This workflow was easy, highly customizable, and fast. That’s not to say Jekyll didn’t have some downsides. It’s written in ruby and requires a ruby interpreter to run. I’m not very familiar with ruby, and I didn’t want to invest my time into learning it. This made debugging errors a hassle. Further, Jekyll’s layout system (Liquid) was not quite as flexible as I’d have liked. I eventually began to look elsewhere.

Hugo

Eventually, I found the static site-generating solution that this site continues to use now: Hugo. Hugo has a lot of things going for it: it’s written in one of my favorite programming languages (Go), it has a very powerful templating language lifted directly from the go standard library, it’s exceptionally fast, and it’s well-documented.

I originally began by simply converting my Jekyll website and theme to Hugo. This was effectively a direct translation, and I continued to use it for new posts for a few years. This iteration of the website was exactly what most software engineers aim for: technically functional.

It wasn’t perfect. It depended on jQuery, an old javascript library quickly falling out of favor across web development. Instead of utilizing clever CSS for its layout, it used a lot of difficult-to-read javascript. In 2023, it was finally time to refactor the web design to modern standards.

Today

That brings us to today! The current iteration of μPixels utilizes Hugo as its static site generator, with a custom front-end written as much in plain CSS and HTML as possible. It’s hosted on firebase.

I wrote the new front end so that I could easily add new sections to the blog. Over time, my blog has grown and shifted in scope. Originally intended to track my progress as a photographer, it eventually shifted toward documenting my travels. More recently, I’ve thought I should start posting about some of my tech-related projects. With the new front end, it’s easy for me to add new distinct but thematically related sections for any writing I choose to do. Hopefully, I’ll write more frequently from here out. 🙂