Colophon

A personal website is not a publication. It is a position. A publication presents work in a finalized, immutable state, and carries with it some sort of declaration - “this is my most polished and prized work!”; a position is something you inhabit, argue from, and continuously revise in public. This page explains the design decisions forming my broader position and why they took the form they did.

What follows is a colophon in the grand old sense: a printer’s note at the end of the book, recording how it was made, who made it, etc. The difference: here, the printer and the author are the same person, and the process of making is itself not only a form of argument, but the only form of argument permitted.


Typography

You are reading this sentence in SPECTRAL, which is not only a font with particular personal importance to me, but also an exceedingly pleasing font to read. OpenType features — smcp, onum, liga, calt are used throughout the website, which necessitates our self-hosting setup.aa Google Fonts strips OpenType features during subsetting for bandwidth. Self-hosting with pyftsubset preserves smcp (small capitals), onum (old-style figures), liga (common ligatures), and the full optical size range. The difference is visible: old-style figures sit on the baseline rather than hanging above it, small capitals are drawn to match the x-height rather than being shrunken full caps, and ligatures prevent collisions in letter pairs like fi and fl.

The UI and headers are Fira Sans. Variation is good, and moreover, humanist sans are rather ubiquitous (we have Frutiger to thank for this fact!) - perhaps I am making some type of statement by not choosing one of the more corporation variations of it, like the dreaded Calibri and Tahoma you might recognize from Microslop (formerly known as Microsoft) products. Code uses Jetbrains Mono, which is simply the font that I use within my editor. Code should look like code, simple as that.

The monochrome palette is an application of restraint grounded in my studies of Tools for Thought. Color is often used to do work that typography should do, such as demonstrating hierarchy, creating emphasis, etc. When those functions are handled by weight, size, and spacing insteadbb Color and saturation/hue are actually well known to be less effective than other means of distinguishment. I refer you to Tufte’s The Visual Display of Quantitative Information for more., color becomes available for the things it cannot be substituted for — and on a site with no data visualizations requiring color encoding, those things turn out to be very few.cc The one exception is the heatmap on the statistics page, which uses a four-step greyscale scale. Even there, the encoding is luminance rather than hue.

The Build

[TODO: Hakyll and Pandoc. Why Haskell. The compile step as philosophy — this site is a program and the content is the source code. The analogy to compiled software: readers receive a deterministic artifact, not a runtime rendering decision.]

[TODO: What Pandoc AST filters do. The filter chain: wikilinks → preprocessor, then sidenotes, smallcaps, dropcaps, links, images, math. All transformation before the reader arrives.]dd The full pipeline: Markdown source → Pandoc AST → citeproc → filter chain (sidenotes, smallcaps, dropcaps, wikilinks, external link classification, responsive images) → HTML. Complex math goes through a second pass: KaTeX renders server-side at build time, producing static HTML+MathML. No math rendering happens in the browser.

[TODO: The semantic search model — self-hosted ONNX weights served same-origin, no external API calls. Why this matters for the site’s privacy posture.]

[TODO: Build telemetry — pointer to /build/ and /stats/ for the empirical picture. This section covers intent; those pages cover state.]


The Computing Environment

[TODO: The organizing principle for this section: configuration is code, privacy is a first principle, tools should be earned rather than merely used. These are not preferences but positions, and this site is downstream of them.]

Desktop

[TODO: Gentoo Linux, Hyprland, Levshell (custom shell via Quickshell). Why Gentoo: compilation for performance, fine-grained USE flag control, the community. Why Hyprland: tiling window management as a productivity commitment. AMD hardware throughout.]ee The personal computing setup is documented in greater depth on the Me page. This section focuses on what is directly relevant to how this site is built and maintained.

Laptop

[TODO: Arch Linux on ThinkPad P-series. Why Arch rather than Gentoo on battery- constrained hardware. The continuity of the Hyprland environment across machines — the same keybindings, the same visual language, the same muscle memory.]

Editor

[TODO: Emacs. Everything written and coded in Emacs. The relationship between the editor and the content — writing Markdown in Emacs with a Hakyll watcher running is as close to a WYSIWYG experience as the workflow gets.]

Privacy-First Computing

[TODO: Self-hosted email and VPN. LibreWolf over Firefox (the Chromium monopoly and Mozilla’s drift). GrapheneOS. The principle: privacy as a first principle means building the infrastructure first, not bolting on settings after. The same principle applies to this site — no tracking is not a policy decision, it is an architectural one.]


AI and This Site

I will never use AI to write, whether for my personal communications with anyone or for pieces on this website. I take this extremely seriously - writing is religious in severity to me. The writing on this website is wholly human and wholly my own, to the extent that any writing can be.

Much of the code that comprises the build system of this website was created in collaboration with AI. Rather than “vibe coding” proper, this was the result of an intensive engineering process where AI and I were equals in collaboration. Notably, all of the major architectural choices, design decisions, idiosyncracies, and elements of the tech stack were chosen entirely by me, and AI systems were only used to automate production of some (but not all) of the code that was required.

The commit history, of course, is available for you to view and licensed accordingly - see No Tracking for more.


Design Decisions

Sidenotes

The sidenotes are provided by a JavaScript file that was forked from the website of Gwern Branwen and authored by Said Achmiz; I have simplified the script to fit the needs of this website and made some minor modifications.

[TODO: The Tufte influence — Envisioning Information, the three-column layout, the argument that footnotes interrupt reading in a way that marginalia does not. The sidenote as a first-class typographic element rather than a concession to citation convention. Credit: Said Achmiz for the sidenote positioning JS (the implementation used here is a simplified fork).]

No Tracking

The site has no analytics, no visit counters, no fingerprinting, and no third-party scripts.ff This is enforced at the nginx level via CSP headers, not just by omission. The Content Security Policy prevents any script not explicitly whitelisted from executing. The whitelist is short. The Hetzner VPS that provides this content runs only open source software, and my machines use almost exclusivelygg It is nearly impossible to run an entirely free system, but in approximation, it is actually wonderfully easy. the same. The code is licensed under MIT and hosted on a public repository at this domain with a GitHub mirror; you are welcome to inspect it, fork it, or, more broadly, do whatever you please with it.

Living Documents

[TODO: The epistemic metadata system — status, confidence, modified, importance. What each field means. Why marking status: Ongoing on a document matters: it is an honest claim about the document’s relationship to the author’s current thinking, rather than the implicit permanence that publication usually signals. The modified date is not decorative; it is the reader’s primary signal for whether to treat a document as settled or in flux.]


Influences

[TODO: gwern.net — the primary architectural and philosophical ancestor. What was taken (sidenotes, living documents, epistemic metadata, semantic zoom, the long-form personal essay as the primary unit). What was changed (visual register — gwern’s monochrome is denser; this site is more spacious — and scope).]

[TODO: Tufte — Envisioning Information and The Visual Display of Quantitative Information. The three-column layout, the sidenote tradition, the principle that good typography is invisible.]

[TODO: The personal website tradition more broadly — the early web’s culture of idiosyncratic personal pages before social media collapsed everyone into the same templates. This site is partly an argument that that culture was worth having.]


The Future

This site is unfinished. Several portals have no content yet. The annotated bibliography is sparse. Some pages are marked status: Stub for good reason. This is acknowledged rather than concealed, because a site that presents itself as complete when it is not is making a false claim about the relationship between the author and the work.

[TODO: Specific things that are in progress — content migration, the library portal, the fiction and research portals as the corpus grows. The Recently section on the homepage, deferred until the corpus supports it.]

The colophon itself is a living document. When the site changes substantially, this page will change with it. The git history is the authoritative record; this page is the annotated summary.