If this was written three days ago, it would’ve been done in a web interface. Instead, I’m editing a Markdown file using a plain text editor.
What happened three days ago? I found Hugo.
I had determined I wanted a website–or at least a blog–but there were certain things I was looking for in whatever software I would use to create it.
- Markdown support. Markdown is a simple way to format your writing for the web using special combinations of characters. I wanted this to allow myself the option to write from anywhere and the freedom to use any text editor.
- Ability to co-exist with version control. In addition to helping with backup, version control lets me “rewind” if I make a mistake or decide to abandon the path I’m taking. But I also have an infatuation with being able to go back in time to see exactly what my website looked like on a specific date. I’m not sure how useful that is, but I think it’s a pretty cool feature.
- Easy maintenance and customization. I needed to be able to make the website my own, even if it was just changing the colours and tweaking the layout. As for maintenance, while I wanted it to be self-hosted, I’d much rather spend time creating new content than stressing out over software updates that need to be done.
With those requirements in place, I looked at the options.
WordPress is unavoidable. It’s everywhere and I had to consider it. I’ve used WordPress in the past and it is a quality product. However, version control is difficult because the data is stored in a MySQL database rather than flat files. It’s also a little bit feature-heavy for what I needed in this case, almost overkill.
Jekyll was something I really started to experiment with last year. It supports Markdown by default and can definitely be used with version control. But I found installation to be hard, probably because of all the dependencies and me not knowing Ruby very well.
I started looking at Ghost earlier this month. It’s a more recent addition to the field, similar to WordPress but without as many features. For me, that was fine. I could somewhat achieve my goal of version control because the content was stored in a SQLite3 database, which is a file-based system. With the version control, maintenance was kind of clumsy but workable (probably because I’m still learning the more advanced features of Git). All in all, it was the best solution so I started to build with it.
I chose a theme and played around with the interface to get a feel for not only what I could do, but also how to shape it to fit my requirements. There was a lot of Git testing. Could I “fork” something without using GitHub? (Yes.) Was it possible to include a Git repository inside a Git repository? (Yes.)
But something was still nagging at me. Despite the practicality of it, I was obsessed with having an archive of my site. I didn’t want to rely on the Wayback Machine to do it, I wanted to control it myself. So I did a search for “download static version of website” and up popped Hugo.
Hugo is a static website generator that I had never heard of. But after reading a bit about it, I found it was perfect!
It reminds me of Jekyll, but Hugo has the simplest install procedure: it’s just one file. I could run it on my Mac at home or on the web server itself.
The theme I had chosen for Ghost had already been ported to Hugo. Customizing the theme was easy in Hugo, too. The fact that I’m writing now and not tweaking is a testament to that.
Best of all, when I write a new post on my Mac, Git will automatically make it live when I push it to the server. Poof, magic, done.
Here’s the part where I give shoutouts to the people who (unknowingly) helped.
- Steve Francia and the other code contributors. Hugo is fantastic, thanks for creating it.
- Big thanks to the folks writing Hugo documentation and answering questions in the forum! You can never be given enough recognition.
- Kathy Qian and Thibault Normand. Kathy created the “Crisp” theme for Ghost and Thibault kindly ported it for use in Hugo.
- Thank you, Nate Finch, for your Hugo 101 series. I actually changed my directory layout a bit taking into account the points you made.