Skip to content
Blog
MethodSeptember 20, 2026

True when written, false when read

My portfolio was not lying by mistake: every sentence was true the day it was written. The story of the August 15, 2026 overhaul, of the build guard that prevents a relapse, and of what a second reading surface, held by a voice, makes visible that the guard cannot see.

A portfolio does not lie, it expires

On August 15, 2026, I reread my portfolio as a visitor would, and the finding was unpleasant: detailed pages for stopped projects, an abandoned game presented as a living early access, a cancelled client engagement still headlining the about page, and the terminal's journal running several releases behind reality. None of those sentences had been written to deceive. Each was true at writing time, false at reading time.

It is the hardest lie to see from the inside: nothing changes on screen when reality moves. The August 15 site displayed the same thing as the June 15 site; it is the studio behind it that was no longer the same.

Remove first, rewrite second

The overhaul fit in a dozen commits, and most of them remove. The catalog refocused on what exists: the three published games (Limon, Sillon, EREME) as flagship projects, Atrium alongside them. The dead projects' pages went out, and their removal has a precise shape: a permanent redirect (308) to the catalog, not a 404 page. An external link that pointed to a removed page leads somewhere, without breaking, and search engines understand the move is final.

The rest follows the same logic of subtraction: dead translation keys went out of the site (hundreds of lines), images of vanished projects deleted, the terminal's journal caught up with the reality of the releases. In the end, the site says fewer things, and everything it says is true.

The guard that fails the build

Removing is not enough: without a mechanism, the same drift starts again the following month. So the portfolio has a guard, a script that runs before every build and fails it on three families of discrepancies.

One, every displayed figure is declared in a reference file, anchored to a file in the source repo that proves it; a figure that disappears from the copy, or that no longer has a source, fails the build. Two, removed mentions are barred from returning: each entry carries its reason, and a reappearance on a controlled surface fails the build, the old itch page URL of the stopped project being one of the entries. Three, the language switcher's slug table must mirror the blog corpus, otherwise a renamed article would silently break navigation.

One hundred and eight checks at the time of the overhaul. And a writing rule, embedded in the script's error message: when in doubt, remove, do not round.

A showcase site is a database of sentences about reality. Without integrity constraints, every sentence drifts toward falsehood at the speed reality moves.

What the guard cannot see

This portfolio's blog can be read two ways. The classic route: pages, an article list, an excerpt under each title. And a second route, at /terminal: an interactive terminal held by Brigit, the studio's fictional onboard AI, where you navigate by worlds and read the same articles, section by section. It is not a gadget parked next to the blog: it is the same corpus, served by another voice.

That voice is a layer, and it is optional. Every article has an introduction written for Brigit, what she says when opening an archive, in place of the raw excerpt; if it is missing, the terminal falls back to the excerpt. A logbook gives her view of the studio's releases. None of that is a point of failure.

None of it, except on one count, and it is the one that matters here: every line is one more sentence that can become false. The guard checks figures and mentions. It has nothing to say about a voice asserting a state of the world.

The journal that rotted

The proof arrived the same day. While overhauling the portfolio, I reread Brigit's journal: three texts asserted a stale state. Limon was presented as unpublished, when the game had been live since early August. A chat reply proclaimed "we don't publish a world that's half alive", contradicted by two releases shipped as they were. And the AquaTube entry froze the app "at v0.13.0", with gaps that had been filled for weeks.

The fix for that last case says it all: the entry did not gain an up-to-date number, it lost its number. The number is what had made it rot. An embodied text, written in the present tense, that cites a precise version becomes false at the next release; the same text without the number stays true for months. And the trap is wider for a fictional journal: its day numbers are ambiance, not real dates. No entry can defend itself by saying "it was true back then"; everything it asserts is read in the present.

Every sentence a character speaks in the present tense is a maintenance contract. Writing for a voice means choosing what can stay true without supervision.

What I take away

Obsolescence is not an accident, it is the default state of any content that describes something other than itself. Voluntary rereading is never enough: you reread your site when you change it, and it is precisely when you do not change it that it expires.

Hence the shape of the fix: not a resolution to reread more often, but a mechanical guard placed on the only mandatory path, the build. And where the guard cannot go, inside the sentences of a voice, three writing rules take over. A statement of state carries a date or does not get written. A version number never enters an undated text. Everything optional has a neutral fallback, so the voice can go quiet without breaking anything.

The question to ask about every sentence on a site: what will make it false, and what will warn me that day. If the answer is "nothing", that is the sentence to rewrite, or to remove.