Architecture

Kolofon · 16 August 2026

24 · Photographs outside the repository

set up for the second language version; needed from the start

24 · Photographs outside the repository

Text: Kolofon

Content in the repository is one of the three conditions set before the first line of code, and for many months it had no exceptions. Entries, photographs, preview cards — everything sits beside the code, everything reaches production by the same movement, everything has a history. The second language version of the first deployment showed where that condition has its limit.

Instinct says the border runs between text and image: text must be translated, an image need not. That is not true. A preview card is an image, and it carries a sentence from the entry, so in English it has to be a different one. A photograph is an image and carries nothing — the same frame serves every version. The border runs along language, not along format.

This has a consequence you cannot see on the day you decide it. A binary file enters version control without delta compression and stays in the history forever, including after it is replaced. A growing photographic series, multiplied by the number of languages, gives you a repository that takes longer to clone every month — and the only thing growing in it is copies of the same thing.

So what carries language stays in the instance’s repository, and what does not leaves for an object store and stands there once. The language versions point at the same store. The engine serves files from it by its own route, from the instance’s address — not from the store’s separate domain — so that the address stays within the site and everything that turns addresses absolute in the feed and in metadata keeps working.

Separating one kind of file from the other turned out to be free. Static files are served before the instance’s code runs, so the route only receives paths that are not in the repository. Preview cards sit in the public directory and never reach the store. No condition had to be written — it was enough to put things in the order the environment resolves them in anyway.

One cost remains and it deserves naming. The store becomes the only copy of the photographs, so backup stops being something that happens by itself every time the repository is cloned. That is not an argument against — it is an item moving from one column to the other.