Anaximander

Photo for Anaximander

Anaximander is a bespoke wiki parsing system that powers this website. It is written in PHP and data is stored as Markdown files.

My goal is to have a system that allows me to write, edit, and publish this website simply by creating and editing files on my local computer without the friction of a web interface. That is, to add or change content on the site all I have to do is edit text files on my computer and that’s it—the changes are reflected automatically on the web.

(For information on this site’s design, see the colophon.)

Page Rendering

Every page on this site is a Markdown file with YAML front matter. When a page is requested, the wiki parser simply looks in a directory called ‘pages’ for the corresponding .md file. Things like the title, description, and accompanying image, are included in YAML. Metadata like the time last updated is taken from the file metadata itself.

The script parses the Markdown formatting as well as [[double bracketed]] wiki links into HTML. The content of a double bracket link has a corresponding .md file in the /pages directory, and if not the resulting HTML link is styled in red. Internal wiki links have underlining and links to external sites are dashed. Backlinks are displayed at the end of each page.

Local Editing

Now, what makes the system seamless from my user perspective is that I rely on the legendary iA Writer to edit and manage all the files. I have a local version of the /pages directory on my Mac (synced to all my devices via iCloud) and that is the default iA Writer directory. iA Writer has excellent native support for YAML and wiki links, so adding pages to and navigating around the wiki within iA Writer itself is a breeze.

Whenever I want to publish additions or changes I’ve made, I trigger an rsync script that uploads all the changed files in my local /pages directory up to the server. (It only ever goes in one direction.)

Other features

There are a few pages that are automatically generated. The podcast and worth reading lists are generated by scripts that periodically query the RSS feeds for my podcast and for my Instapaper ‘liked’ feeds. The music page is generated by periodically querying the Last.fm API.

At the top right of a wiki pages there is a heart icon that allows a user to pin the current page. The pinned page is added to a list in the navigation bar and it can be removed by clicking the heart icon again. This is done by storing the page title in localStorage on the client side.

Finally, there’s also a link that will bring up a random page, which is there for fun and should help with discovery.

Last updated October 18, 2025