Building this site

silasjelley.com is developed as a static website, wrangled into an incrementally more deliberate shape with a Python script purpose built by me for the particular needs of this hypertext creation. As time passes the software behind this site grows in scope and complexity. This document specifies the inputs and outputs of that pipeline, and records significant branches in the decision tree from which that specification has emerged.

Summary

The build pipeline begins with a directory of plain-jane text files. Tucked away in the folds of that directory you’ll find1 (among other things), my journal of the last five years (approx 120,000 words), my ledger recording every penny I’ve earned and spent since I turned eighteen ( 8 years ago), and my personal collection of notes (around 110,000 words). The build script is only concerned with a subset of these artefacts: those marked for publishing are picked up by the build script, put through a bevy of transclusions and transformations before being injected into the scaffolding of this website as a series of HTML documents.

From there these documents are hoisted into the stratosphere hard drive of another computer, this one somewhere on the internet, from which said documents can be retrieved by any who can wield their own computer sufficiently masochistically to have a read. Today that’s you.

TLDR: I hit buttons, you hit buttons, magic happens and somehow you see the words that I made when I hit the buttons. There’s a bunch of pipes and computers in between, but magic does a lot of the heavy lifting.

Inputs

Metadata

Document metadata is set in a triple-dash delimited special zone containing [YAML] formatted variables.

The metadata keys available for authorship (bold indicates a required element):

Some key/value pairs are added and populated during the build process:

All these (the metadata specified in the document itself, and the metadata added during the build) are stored as a list within a dictionary key, each document having its own key (the required uid).

Example of one complete entry in the build pipelines data dictionary
'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX':{
'uid': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX',
'title': 'A draft design document for this site',
'author': 'Silas Jelley',
'created': datetime.date(2021, 8, 31),
'updated': datetime.date(2022, 4, 14),
'published': datetime.date(2022, 4, 21),
'location': 'Nelson, New Zealand',
'slug': 'design',
'options': ['draft'],
'tags': ['meta'],
'wordcount': 552,
'interlinks': '/design', '/build.py',
'backlinks': '/about', '/design',
'filename': PosixPath('/Users/silas/notes/design.md'),
'content': ...

Possible future extensions to document metadata:


  1. Well, you would if you broke into my tool shed and snatched my computer, and hit me with a wrench until I gave you my password and read all my super personal guff.↩︎