Kolofon · 11 sierpnia 2026
0.9.2 — książka z serii
04:17 — po nocy, w której brak parametru wyglądał jak brak kubełka

Tekst: Kolofon
Nad strumieniem i nad każdą serią stoi przycisk, który pobiera złożoną książkę: PDF w formacie A5, z okładką, stroną tytułową, spisem treści z prawdziwymi numerami stron, żywą paginą i zakładkami do nawigacji. W pierwszym wdrożeniu strumień daje dziewięćdziesiąt osiem stron i pięćdziesiąt kadrów, dziewiętnaście megabajtów.
Silnik nie składa tego w locie i nie ma jak. Worker dostaje 128 MB pamięci i limit czasu procesora, a złożenie stustronicowego tomu to natywny binarny i kilkanaście sekund pracy. Podział wyszedł z tego sam: składaniem zajmuje się CI po każdej zmianie treści, gotowe pliki leżą w R2, a worker tylko je podaje — z ETagiem, bo tom przebudowuje się przy każdym nowym wpisie i bez tego czytelnik dostawałby wczorajszą wersję.
Do składu poszedł Typst, nie LaTeX. Jeden plik binarny w runnerze, kompilacja stu stron w sekundach, sensowne dzielenie wyrazów po polsku i marginesy lustrzane pod oprawę bez walki z pakietami.
Reguła publikacji i kolejność są przepisane jeden do jednego z `lib/posts.ts`, żeby książka pokazywała dokładnie to, co widzi czytelnik — bez wpisów zaplanowanych na przyszłość i bez tych schowanych na rok 2099. To jest duplikat logiki i zapłacimy za niego przy pierwszej zmianie reguły. Alternatywa, czyli generator uruchamiany w środowisku silnika, kosztowałaby więcej i od razu.
Kadr poziomy idzie na pełną szerokość kolumny. Pionowy schodzi do 54 mm i tekst płynie obok niego, raz z lewej, raz z prawej — inaczej rozkładówka układa się w słupek po jednej stronie. Typst nie ma natywnego oblewania grafiki, więc mierzymy wysokość kadru i dokładamy akapity do wąskiej kolumny, dopóki się mieszczą; reszta leci pod spodem na pełną szerokość. Bez tego pomiaru zostaje albo dziura pod zdjęciem, albo wąski słupek tekstu obok niskiego kadru.
Cztery godziny zeszły na błędzie, który udawał brak infrastruktury. Trasa oddawała 404, pliki w kubełku były, binding w panelu był, a wszystko wskazywało na to, że worker kubełka nie widzi. Diagnostyka postawiona na produkcji odpowiedziała `diag:badkey undefined` — w handlerze serwerowym trasy parametry nie są wypełniane, więc walidacja klucza odrzucała każde żądanie, zanim ktokolwiek sięgnął po plik. Klucz czytamy teraz ze ścieżki żądania, a wyrażenie regularne pełni tę samą rolę zabezpieczającą co wcześniej.
Próg wpisów siedzi w konfiguracji i domyślnie wynosi pięć. Dwie serie pierwszego wdrożenia mają po jednym opublikowanym tekście, a książka z jednego wpisu ośmiesza przycisk.
Napis mówi „wydaj”, ale plik jest do czytania, nie do drukarni: bez spadów, bez osobnej okładki z grzbietem liczonym z gramatury papieru, bez dopełnienia do wielokrotności czterech stron. Sufit wyznaczają też zdjęcia — przy szerokości kolumny wszystkie mieszczą się powyżej 250 dpi, ale pełny spad wymagałby oryginałów z aparatu, a w repozytorium leżą wersje webowe. Przycisk, który naprawdę wydaje, jest o dwa kroki dalej niż ten, który już działa.
Kolofon