This site is generated with a Rust program, from a directory structure that looks like this:


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 (site-out):


set -o pipefail
set -o errexit
set -o nounset

len=`echo "$msg" | wc -c | sed -E 's/^ +//'`
if [ $len -gt 50 ]; then
	> /dev/stderr echo "error: message is $len characters"
	exit 1

if [ -z "$(git -C site-content status --porcelain)" ]; then
	> /dev/stderr echo error: site-content is clean
	exit 1

if [ -z "$(git -C site-out status --porcelain)" ]; then
	> /dev/stderr echo error: site-out is clean
	echo consider implementing automatic rebuild
	exit 1

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

The site doesn’t use any JavaScript or resources from other domains. There are no referral links or cookies.

Updated on 21 March 2021.