auto: 2026-03-24T12:57:08Z

This commit is contained in:
Levi Neuwirth 2026-03-24 13:57:08 +01:00
parent 4111eaddc3
commit 9626f6795a
1 changed files with 19 additions and 37 deletions

View File

@ -10,10 +10,8 @@ abstract: On the design, tools, and philosophy of this site — and by extension
::: dropcap
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 occasionally
revise in public. Every design decision on this site — the typeface, the build system,
the absence of tracking, the presence of confidence scores — encodes a value. This page
explains those values, and why they took the form they did.
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
@ -26,29 +24,23 @@ of argument, but *the only* form of argument permitted.
## Typography
::: dropcap
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.
:::
[TODO: The [OpenType]{.smallcaps} features — `smcp`, `onum`, `liga`, `calt` — and why
self-hosting is required to use them.]^[Google Fonts strips OpenType features during
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]{.smallcaps} features — `smcp`, `onum`, `liga`, `calt` are used throughout the website, which necessitates our self-hosting setup.^[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*.]
:::
[TODO: Fira Sans for [UI]{.smallcaps} and headers. What humanist warmth means in a
sans-serif and why it pairs well with Spectral. JetBrains Mono for code — code should
look like code.]
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 a discipline. Color is often used to do work that typography
should do: distinguishing hierarchy, marking emphasis, signaling state. When those
functions are handled by weight, size, and spacing instead, color becomes available
for the things it cannot be substituted for — and on a site with no data visualizations
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 instead^[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.^[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
@ -118,25 +110,12 @@ architectural one.]
## [AI]{.smallcaps} and This Site
::: dropcap
This site was built in collaboration with Claude. The Pandoc filters, the [CSS]{.smallcaps},
the JavaScript, the Hakyll build system — much of the infrastructure emerged from an
iterative dialogue between author and model. This is worth stating plainly, because
the site's content argues for a specific position on [AI]{.smallcaps} use, and that
position is most legible when the colophon is honest about where it was and was not applied.
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.
:::
[TODO: The augmentation/automation distinction made concrete. Building the
infrastructure that hosts original thought is different from generating the thought.
The Pandoc filter that transforms footnotes into sidenotes was written with Claude;
the footnotes themselves were not. The CSS that sets the typeface was written with
Claude; the prose set in that typeface was not. The distinction is the point.]
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.
[TODO: What this means for the site's claims to originality. The content — the essays,
the compositions, the poetry, the research — is entirely Levi's. The medium was built
collaboratively. This is the same relationship a writer has with an editor, a compositor,
or a press operator: the vehicle is shared work; the voice is not.]^[The model used
throughout is Claude (Anthropic). The full git history is publicly available and
records what was changed when, which is a more honest account than any prose summary.]
The commit history, of course, is available for you to view and licensed accordingly - see **No Tracking** for more.
---
@ -144,6 +123,9 @@ records what was changed when, which is a more honest account than any prose sum
### 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
@ -155,10 +137,10 @@ implementation used here is a simplified fork).]
The site has no analytics, no visit counters, no fingerprinting, and no third-party
scripts.^[This is enforced at the nginx level via [CSP]{.smallcaps} headers, not just
by omission. The Content Security Policy prevents any script not explicitly whitelisted
from executing. The whitelist is short.] The reason is not only privacy, though privacy
is sufficient. The deeper reason is that knowing your readership changes what you write
for it — gradually, invisibly, in the direction of whatever the metrics reward. A site
without metrics cannot optimize for them. This is a feature.
from executing. The whitelist is short.] The Hetzner VPS that provides this content runs
only open source software, and my machines use *almost exclusively*^[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](https://github.com/levineuwirth/levineuwirth.org); you are welcome
to inspect it, fork it, or, more broadly, do whatever you please with it.
### Living Documents