This website
This, my personal website, is a place I use to try out new things. This project has been running in some form or another for a little over 10 years now.
History of the site
The fuzzy pre-git history
I originally setup the domain sometime in high school (late grade 9 maybe? I don’t really remember). I believe that the very first version of the site was a static HTML page. At the time I was learning some basic HTML, PHP, and cgi-bin Perl with my uncle.
The first version of the site I can find was one from when I was in my second year of University. If you look at the Internet archive it has a (now cliché) “under construction” message.
Previous static site generators
This site has used a few different static site generators (a software tool that rendered content as static html pages).
The first static site generator I used was Pelican: I wrote a blog post about it when I did so. I choose Pelican at the time because I was comfortable with Python and Pelican seemed like the best option at the time.
The next year I ported the content to Jekyll: Again I wrote about it. I did this because I was finding Pelican difficult to setup on new machines (I don’t remember why). At the time Jekyll was supported by GitHub pages which was attractive to me because I didn’t want to spend money hosting the site while I was in university (not that I would seek it out now).
Jekyll worked well for a while. This was a time where I wrote more by writing about cool things I learned from Wikipedia (I have taken these posts down because I wasn’t particularly proud of the quality of the writing). After a while the site sat dormant. In the beginning this was because I wasn’t interested in adding to it, but later it was because I was finding it difficult to setup Jekyll (mostly because I never got fully comfortable with the Ruby ecosystem).
To address the “burden of setup problem” I switched the static site to Hugo: And I wrote about it. I did this because Hugo is built in Go and has a design goal of being a single executable which meant that writing new blog posts would be as easy as cloning the repository and installing the executable. I also switched from using GitHub pages to Netlify (mostly in order to try something new).
After Hugo this site was changed to use the Gatsby static site generator: I wrote about it. I first used Gatsby when I was making a wedding website for a friend. My friend and their partner had too much going on to leave them to edit pages so I wanted them to be able to edit content without having to learn how to commit things. I used Gatsby setup with AirTable as a source for content. I was quite pleased with how this turned out so I decided to port my personal blog to use Gatsby as well. I changed to use Gatsby and liked it well enough. My biggest struggles were related to the generation of types and my modest GraphQL ability. The thing I am most proud of with this incarnation of the website is the end to end tests. For every commit it uses Puppeteer to check that pages render, don’t log any errors to the console, and take screen shots.
After Gatsby I ported the site to Next.js: I wrote about
it. I did this because I got a chance
to use it at work and enjoyed it. Since this was already a React based site
converting it from the Gatsby implementation was possible.
Most recently I replaced Next.js with a small custom static site generator that I wrote myself: I wrote about it. I did this because the site is a low-stakes place to try things and I wanted to see what building my own generator would be like rather than reaching for another off-the-shelf framework.
Today
Today the site is built by a small custom static site generator written in Rust
that lives in the ssg/ directory of the repository. The content, both blog
posts and these project pages, is authored as Markdown files with YAML
frontmatter under content/. The generator parses that Markdown with
pulldown-cmark and renders the pages using MiniJinja templates. The styles are
written in Sass and compiled with grass as part of the build. The finished
site is written to dist/, which is what Netlify publishes.
I kept the parts of the previous incarnations that I liked. The end to end tests
still use Puppeteer and Jest to check that the built pages render without logging
errors to the console. I also added a step that uses
lychee to check the site for dead links. None of this
is fancy, but that suits the site: it is a low-stakes place for me to try things,
and writing my own generator was one of those things.
Plans for the future
I don’t really have specific plans for the site. I like having a place to try out new ideas with low stakes and it will continue to be used for that purpose. I will also use the site to improve my writing, which, like all skills, requires practice.