VII · The Logbook

How this site is set.

Thirty leaves, six small presses, an Italian edition struck from a dictionary, and nothing on any page that calls out to anyone. The workshop, opened.

← The Logbook

I am a medical student, and in the evenings I build things. This site is the one I keep coming back to. It is set like a book from about 1800: leaves instead of pages, an errata slip instead of silent edits, a colophon that says how it was made. I wrote once about why. This entry is about how, because the how is where a book either holds or comes apart.

Leaves, served plain.

There is no framework and no package.json. The book is 30 leaves of plain HTML, five stylesheets and some seven thousand four hundred lines of JavaScript that I can read from top to bottom. Three libraries sit on the shelf as copied files instead of being fetched: GSAP, its ScrollTrigger, and Lenis for the scroll. The type is fourteen woff2 files served from the same address as everything else. What reaches your browser is what is in the repository, minus my workshop notes.

Six presses.

Some things in a book have to be derived, and a derived thing kept by hand drifts. So six small Node scripts do the collating, 2,283 lines between them. One builds the Logbook’s index, its RSS feed and the sitemap. One composes the leaves of my family. One works out the position page from the history of the repository itself. One stamps the edition. One strikes the Italian edition. The last one takes my notes out of the code before anything is served.

The stamp exists because of a small humiliation. In August I measured that a reader who had already visited kept the old stylesheet for four hours, while every check of mine came back green, because my checks always asked for a fresh copy. Now the version on the stylesheet is not a number I remember to raise. It is a hash of fifteen source files. If nothing changed, caches stay valid; if a comma moved, everyone gets the new composition.

None of this runs on my laptop for production. A push to the site’s branch starts a fresh checkout on GitHub Actions, the presses run there, and the result goes to Cloudflare Pages. Nobody deploys this book by hand, and that includes me. The presses need one package between them, a JavaScript parser for the last one, installed in CI and nowhere else. It compares the code before and after the notes come out, and stops if a single token differs.

An Italian edition struck from a dictionary.

The book is set once, in English. A press takes each leaf and strikes it again in Italian, swapping every passage it has an Italian setting for. The settings live in one file of 1,134 pairs, English on the left and Italian on the right, applied longest first so that a long sentence is never eaten by a short phrase inside it. Structure, figures and machinery exist once, so the two editions cannot drift apart in shape. Only the words live apart, where they can be read as prose. All 30 leaves have their Italian twin.

The part I like most is the end of the run. The press reads its own Italian back and prints whatever is still English, together with every pair that no longer matches anything, because the English moved and nobody brought the Italian along. A tool that says done without saying what it left behind is lying by omission. And when it reports zero I don’t believe it until I have read the leaves once by eye. Its detector keys on English words, and I had to take out the ones that are Italian too, like errata and medicine. A detector with holes in it can read zero for the wrong reason.

Figures set in words.

The figures in the book are neither drawings nor photographs. Each one is a word repeated until it holds the shape: the compass rose is set in AVIA PERVIA, the lighthouse in SIGNAL. The engine is short. Draw the outline into a canvas nobody sees, read its transparency as tone, walk a grid a few pixels apart, and wherever the tone is dark enough, set the next letter of the word. Each row starts the word again, the way a compositor starts a line. The instruments are the one exception: each is drawn by its own model, with its sources on the page.

Nothing calls out.

The rule is that no leaf asks another house for anything. I checked it the dull way. Across every HTML, CSS and JavaScript file, zero resources load from another domain, and the search was run once against a planted line to prove it can find one when there is one. The code never touches document.cookie. The live front page sets no cookie and carries no analytics beacon. The sun on the position page is worked out in your browser, from the NOAA formulas and your own clock, because a figure fetched from a stranger’s service is a figure that tells the stranger you were reading.

Your browser keeps two things, and only for you: your place in the book, and any notes you write in my margins. Select a passage and the site hands you a pencil. Neither leaves your machine. Apart from the request counts every host keeps at the door, I don’t know who reads this. That is the price, and I pay it on purpose.

The proof is paper.

Press print and the book comes out as an A5 chapbook, 148 by 210 millimetres, with running heads and folios set in the page margins. Turning a leaf is the browser’s own view transition. Corrections go on the errata slip, dated, in the old form: for x, read y.

The hands.

The colophon says it in print, so I will say it here. A lot of this code was typed by a machine, a language model at the type-case. I decided what the book is, what goes on a leaf and what gets torn out, and every error is mine. By the fourth of October it had taken 436 commits, on 23 different days.

If you build things too, send me a direct message from the correspondence page. I answer slowly, and I answer myself.

The counts in this entry were brought up to date on the day the first two instruments came in.


entry no. 5