This site is generated with a Rust program, from a directory structure that looks like this:
/pages/index.md /pages/colophon.md /pages/... /notes/<subtopic>/<note>.md /static/style.css
This structure makes it easy to update the site using a common text editor, as opposed to a web interface normally found in blog engines. There’s support for articles and updates, but I’m not currently exposing that content. It’s difficult to maintain a steady stream of substantial content.
The content is written in Markdown, to make adding emphasis, code, headings, and links easy. The Rust program uses pulldown-cmark to convert the Markdown to HTML and Askama to incorporate the content into templates that provide a consistent look and feel for each page.
To publish the site, I push the resulting HTML, CSS, and images to GitHub, which Netlify makes available across the internet.
I made a short update script to automate the process of committing the changes both to the Markdown source repository (
site-content) and HTML result repository (
#!/bin/sh set -o pipefail set -o errexit set -o nounset msg="$*" len=`echo "$msg" | wc -c | sed -E 's/^ +//'` if [ $len -gt 50 ]; then > /dev/stderr echo "error: message is $len characters" exit 1 fi if [ -z "$(git -C site-content status --porcelain)" ]; then > /dev/stderr echo error: site-content is clean exit 1 fi if [ -z "$(git -C site-out status --porcelain)" ]; then > /dev/stderr echo error: site-out is clean echo consider implementing automatic rebuild exit 1 fi git -C site-content add . git -C site-content commit -m "$msg" git -C site-out add . git -C site-out commit -m "$msg" git -C site-out push
Updated on 21 March 2021.