How this site is built
This site has been through several cycles of technology over the years, including being hosted on a WordPress instance and using the muse static site generator. This page describes the current technological set-up.
- A static site that can just be stored in a file system and served with a very simple web server
- Mostly text
- …but some content is enriched with maths and images
- …and some comes from diverse sources, like Jupyter notebooks
- …and I’m quite particular about layout and typography
The site is driven by Nikola, a static site generator written in Python. I chose Nikola for a few reasons:
- It’s written in Python, making it easy for me to understand
- It’s very configurable, with a lot of pre-packaged themes and plugins, and easy to extend as the need arises
- It’s reasonably well-documented
- It’s extremely flexible in terms of input formats
The last point is the most important. Because I have content in
lots of different formats corresponding to the different
incarnations of this site, I need to be able to re-use those
different formats and not have to re-type or translate them. Not
only can Nikola use all that content, it also leverages to
strengths of the different file formats and allows them to be
integrated: markdown, reStructured text, plain text, HTML, Jupyter
notebooks, and (as we’ll see) org mode, with metadata either
inline or held in a separate
.meta file. Very flexible,
although it does occasionally mean that the presentation of older
content is a bit off.
Nikola is easy to theme and re-theme. I’ve used several different themes over the years. The current one is based on Libretto, modified in several ways to adjust presentation and add things like social sharing buttons and RSS subscriptions.
I use Github to version-control content, as well as obviously for my software development. Githib pages are web sites built directly from code repos. I’ve used them to host my book on epidemic modelling. Nikola comes with a plugin that publishes directly to Github pages, making it easy to host and deploy the site. So I get hosting for free alongside version control.
Emacs and org mode
Almost all my coding, writing, and note-taking is done in Emacs using Org mode, a plain-text hypertext system with an amazing set of capabilities. Nikola has an org mode plugin that can render org markup alongside other content formats, so new content can be written using the tool I usually use without having to re-write older articles.
I draw a distinction between my notebook and my site – the former is for my use and is probably unintelligible to anyone else, the latter is material deliberately written for public consumption. I have a set of Emacs functions to simplify moving from one to the other.