Architecture
Twenty-seven entries on how Kolofon reached its present shape: from the three conditions set before the first line of code, through the decisions that had to be undone, to where it is heading.

Kolofon · 7 August 2026 · provisional
01 · Initial assumptions
Three conditions set before the first line of code existed. Everything that came afterwards is a consequence of them.

Kolofon · 7 August 2026 · provisional
02 · The boundary: files and database
Texts in files, reader data in the database. One dividing line that survived every later rebuild.

Kolofon · 7 August 2026 · provisional
03 · Why the edge
The site runs on three hundred machines at once and costs nothing. The bill for that is paid in constraints, not in money.

Kolofon · 7 August 2026 · provisional
04 · A database without migrations
A new instance receives an empty database and furnishes it on its own. The onboarding that does not exist is the best onboarding there is.

Kolofon · 7 August 2026 · provisional
05 · Content as data
There is no editor and no dashboard. An entry is a file and a new series is a new directory. The drawbacks are real and worth naming.

Kolofon · 7 August 2026 · provisional
06 · Series and the stream
An essay, a captioned photograph, an entry with a film and a record of a dream are the same object with different fields filled in.

Kolofon · 7 August 2026 · provisional
07 · Publishing ahead of time
A hundred and twenty-one entries written in advance, revealing themselves day by day. The whole mechanism is one date comparison.

Kolofon · 7 August 2026 · provisional
08 · Ratings and views
An internal scale of 0–10, because half a star has to be a whole number. An author's provisional rating stands until readers vote.

Kolofon · 7 August 2026 · provisional
09 · Comments and anti-spam
A trap for bots, a rate limit and external verification. And the email field is optional, because a mandatory one deters more than spam does.

Kolofon · 7 August 2026 · provisional
10 · The event log
Our own analytics instead of a third-party tracking script. After ninety days addresses are masked, but the records stay.

Kolofon · 7 August 2026 · provisional
11 · An app instead of an app
An installable icon on a phone, offline reading and notifications — with no store, no review, and no second repository.

Kolofon · 7 August 2026 · provisional
12 · Seven versions of one file
The background script went through seven versions in one session. Each fixed a problem that only became visible once the previous one was fixed.

Kolofon · 7 August 2026 · provisional
13 · Offline without a server
For reading to work without signal, we had to stop asking the server for things that were already in the code bundle.

Kolofon · 7 August 2026 · provisional
14 · Notifications
Payload encryption, signing keys, and delivery attached to traffic that arrives anyway — because there is nowhere to run a daemon.

Kolofon · 7 August 2026 · provisional
15 · Images
A photograph goes in once and comes out in three forms. Everything computed at preparation time, nothing at read time.

Kolofon · 7 August 2026 · provisional
16 · Pagination and capacity
A response of constant size regardless of the archive. Previously the entry list grew along with the author's body of work.

Kolofon · 7 August 2026 · provisional
17 · Bucketing
The limit we hit was not in the engine or in the hosting. It was in the number of files in one directory.

Kolofon · 7 August 2026 · provisional
18 · Separating the engine
Open-heart surgery on a running site, spread across four stages with a green build after each.

Kolofon · 7 August 2026 · provisional
19 · Vendoring instead of a package
An instance does not install the engine — it pulls its files in according to a list. The drawbacks are obvious, the advantages less so.

Kolofon · 7 August 2026 · provisional
20 · Where this is going
An author's dashboard, drafts in the database, publishing from the server. And one thing we deliberately do not do.

Kolofon · 9 August 2026 · provisional
21 · Language versions without a hub
Two language versions have to find each other. Everything that comes to mind first — an address map or a central directory — is a structure somebody has to remember to update.

Kolofon · 9 August 2026 · provisional
22 · An identity that can be erased
A setting switched off the engine signature in the footer. The HTML was clean. The engine's name and address lay in a JavaScript file next to it — because the switch operated at runtime, and by then it is too late.

Kolofon · 14 August 2026 · provisional
23 · The feed as an output
An RSS feed is not the site in another format. It is the one output an author never looks at — and the one somebody else reads instead of the site.

Kolofon · 16 August 2026 · provisional
24 · Photographs outside the repository
Content divides not into text and images but into what carries language and what does not. That border runs somewhere other than you would think.
Kolofon