Build write-up · 4 min read
How I built While We’re Here
A coffee-table book that started as talk on lake walks and ends as a press-ready PDF. It is made the way I make software: one source of truth, a build step, and guards that refuse to ship the wrong file. It is not a website.
- Role
- Everything: writing, design, production
- Built with
- Markdown, HTML and CSS, paginated by Vivliostyle; Node and Python tooling
- Trim
- 300 × 300 mm hardcover
- Status
- Complete draft, not press-final
My approach
-
01Write
- Talk on lake walks, with an AI asking questions back
- Markdown with front matter, one file per essay
- A facts file the build checks quotations and numbers against
-
02Design
- 300 mm square, laid out in points against real press geometry
- Trim, bleed, gutter and baseline grid in one config file
- Of 174 pictures, 95 are my photographs. Every design call is mine
-
03Build
- A Node script composes markdown into one HTML document
- Vivliostyle paginates it with CSS paged media, straight to PDF
- Press masters in Git LFS; Python for derivatives, fonts and PDF reads
- AI wrote the build code to rules I set
-
04Proof
- Scripts walk in from every trim edge to prove the bleed
- Image DPI, overflow, page breaks and contrast all checked
- A Ghostscript preflight for PDF/X. AI runs the checks, I decide what ships
The problem
I wanted to write essays about paying attention, and a website is a bad place to do that. A page you scroll is a page you skim, and every website is one tab away from the thing that is actually competing for the attention the essays are about. A book cannot be tabbed away from. It also cannot be edited after it prints, which changes how carefully you write.
So the output had to be a physical object. The question was how to produce one without giving up the parts of software development that make work good: version control, a build step, and being able to see exactly what changed.
HTML and CSS as the production system
The book is written in markdown, composed by a build script, and paginated by a browser engine that implements the paged-media parts of CSS. Print geometry lives in one config file: trim, bleed, safe area, the gutter the binding swallows, margins, the baseline grid. Nothing printer-specific is hard-coded anywhere else.
That one decision buys everything else. A spread is a diff. A typographic change is one line, not an afternoon of manual reflow. And when a printer finally sends a production template, the numbers change in one place rather than being hunted through a layout file.
- Every page knows which side it is on, so facing spreads are paired from the pages themselves rather than assumed
- Screen-resolution derivatives build the web preview; the press masters never go near it
- The press PDF carries bleed and crop marks; the reading PDF does not, and they are different scripts on purpose
What comes out of it
These are finished spreads from the current press build, exactly as the PDF paginates them.
A $500 quote, and four arguments made twice
A single copy came back quoted at $500. That number did what deadlines and taste had not: it forced a real edit.
The book was eight essays in four parts. Looking at it properly with the money in mind, the pairs were not eight ideas; they were four ideas approached twice. What you notice is what your life is made of. Mind and order are distributed rather than located in you. We are inside a change we can only partly see. Presence is earned and temporary.
So there are now two real editions rather than a draft and a replacement: the eight-essay book, and a four-essay reading cut at roughly ninety pages. Neither supersedes the other until a printer decides it. The site publishes both, and each build states which edition it is rather than inferring it from the page count, which is what it used to do, until the shorter book landed on exactly the page-count threshold that test was using.
Building to a number that stopped being true
Every pacing decision in the book was made against a 130-page ceiling, because that was one printer’s hard maximum. Adding a spread meant removing one. That constraint shaped the whole rhythm of the thing.
Then that printer was ruled out on price, and the ceiling went with it. The 130 pages stayed, not because they are still required but because the book was composed to them and they are the only measured numbers the project has. The honest position is written into the config file itself: these came from a printer who is no longer the printer, every one of them is now a question, and there is a brief ready to ask four printers the same things.
That is the part I would show a client. A constraint you cannot verify is a guess wearing a number, and the useful move is to label it rather than quietly keep trusting it.
Guards, because print fails silently
Software tells you when it breaks. A press file does not: it looks fine on screen and goes wrong on a machine you are not standing next to, after you have paid. So the build refuses more than it reports.
- The press script once ran the trimmed proof build behind a press-ready preflight, and produced a file with no bleed at all. The build line now names what it is doing, and that is checked
- Cutting the interior out of the press PDF refuses unless the first page carries the title and the last carries the back-cover line, both read from the content, so it cannot strip the outer pages just because they are the outer pages
- A separate check asks whether the published reading PDF is actually the current book, because it is committed to the repository and a stale one would ship on the next push
- The preflight tool is checked for before a long build starts, since press-ready hangs rather than fails when it is missing
What AI actually did
The essays did not start on a page. They started as talk, on walks around the lakes, thinking out loud with an AI that asked questions back. Those conversations came home as raw material: too long, too loose, and not yet about anything.
The work after that was mine. Deciding which threads were worth pursuing, cutting the ones that were not, and shaping what survived into essays that argue something. So the honest line is not that I wrote it and AI helped. It is that the thinking happened out loud, and the judgment about what was true and what stayed was mine at every step.
The pictures are more clear-cut. Of the 174 images, 95 are photographs I took, and a further seventeen are archive or original artwork. Fourteen are generated, and each one is recorded as generated in the manifest that builds the credits page.
The rest of what AI earned was the production system: the build scripts, the pagination edge cases, the guards above. What changed there is how quickly a bad idea can be shown to be bad.
I would not call any of this a new way of writing. People have composed on walks for as long as they have walked. What is different is that this time the walk answered back, and came home as a draft.
The remaining work is not code. Choose a printer, get their paper caliper, find out whether they want a specific PDF standard, and get consent from anyone identifiable if the book is ever sold. All four are written down as open questions, which is the only honest place for them.