# Changelog What changed, newest first. One entry per round that went out as an image, with the digests, so it stays possible to tell what is actually running on the server. Digests are recorded from the registry (`docker buildx imagetools inspect`), not from the output of `docker push`. --- ## Unreleased **Added** - **Patterned notebook covers** — ruled paper, graph paper, pinstripe, bands, dots, cross-hatch, linen, washes, a ledger. Drawn entirely in CSS: no image files, nothing to upload, crisp at any size, and they work offline like everything else. Existing notebooks keep exactly the cover they had; the new ones are appended, never inserted. **Changed** - **The search box in a notebook is simply there**, and the button that used to open it is gone. A magnifying glass cost a click and having to remember that searching was possible; the box is one line and says for itself what it does. - **Margin notes are bigger** — the column went from 208px to 288px and a card from three short lines to about five. Three lines is a caption, not a remark on a passage, and the space beside the page was sitting mostly empty. - The notebook dialog's cover grid scrolls, so the dialog cannot run past the bottom of a laptop screen and take the *Create* button with it. **Fixed** - The notebook edit dialog was still part German — *"Versionen pro Notiz"*, *"Vorgabe"* — and would not say what the server's default actually is. It now names it (50), read from the server rather than written into the interface, since `MAX_VERSIONS_PER_NOTE` can be changed and a hardcoded number would quietly start lying. --- ## 2026-08-11 — Margins and a stray placeholder **Images** — web `sha256:3a181ff3…`, server unchanged at `sha256:0832ee2b…` **Changed** - **Narrower margins on the sheet** — the column went from about 73 characters to about 80, leaving roughly 8% of the paper as margin either side instead of 117px of empty page down each edge. **Fixed** - **"Start writing..." was printed at the foot of every page with a break after it.** The placeholder extension styles `[contenteditable]:empty::before`, and the spacer holding a gap open is exactly that — empty, and not editable. --- ## 2026-08-11 — Writing on paper **Images** — web `sha256:b764a9d8…`, server unchanged at `sha256:0832ee2b…` **Added** - **You write on paper.** Each page is a sheet of its own, centred, with a gap after it — the same way the PDF reader draws its pages. The sheet used to appear only once you started drawing, which left the writing mode looking like text floating in an empty pane, and made the space either side of the column read as a void rather than as a margin. - Text is broken against those sheets, so no paragraph is ever cut in half by a gap. The breaks are decorations: nothing enters the document, reaches the server, or appears in an export. **Fixed** - **A note with a drawing could not be typed in at all.** The box wrapping each page's ink layer lay over the text and swallowed every click meant for it. The canvas inside was already deaf to the pointer; its wrapper was not. Introduced the same day, with per-page drawing. --- ## 2026-08-11 — Drawing on every page, and PDFs findable everywhere **Images** — web `sha256:dc804f7b…`, server `sha256:0832ee2b…` The server image changed this round: it takes a new column and two routes. `docker compose pull && docker compose up -d` — the column is added on start. **Added** - **A PDF is searchable on every device, not only on the one that opened it.** The device that imports the file reads it there and then — the server still has no PDF library and never opens one — and the extracted text is stored beside the file, encrypted, so every other device can find the document without ever downloading it. This is what makes an archive of scanned invoices work: they are filed and then never opened, so waiting for someone to open one meant waiting forever. - **A drawing runs over as many pages as the note has.** The ink used to be stuck on page one while the writing carried on without it. Pages are numbered the way the PDF reader numbers them, and there is always one blank page past the end to start a new one on. The bin clears the page being looked at; undo still works on the drawing as a whole. - A drawing that lives entirely on page one is still stored in the old shape, so an ordinary note is written exactly as it always was and an older client still shows it. **Fixed** - **A drawing exported in a ZIP was lost on re-import.** The exporter has written `drawings/.png` since the interface was put into English; the importer was still looking for `zeichnungen/.png` and found nothing. Both names are read now, and so are the further pages of a drawing. --- ## 2026-08-11 — The writing column **Images** — web `sha256:ed11f034…`, server unchanged at `sha256:1648498f…` **Changed** - The note column is centred again. It had been pinned to the left margin so the start of every line would always be in the same place; on a wide window that left the whole right half of the pane as one dead block. - A page surface was drawn behind the text to give that block a meaning, and reverted the same day: it made the sheet sit hard against the left edge, which was worse than the problem it solved. --- ## 2026-08-11 — Pages, typefaces, alignment **Images** — web `sha256:3b040d99…`, server `sha256:1648498f…` **Added** - **Page count while writing.** The toolbar says *Page 2 of 4*, in the same words the PDF reader uses. Pages are counted, never stored: the note stays one document, and a test asserts no page ever reaches the stored body. - **The typeface is a per-account setting** — serif, sans or mono, chosen under Account → Profile. On the account rather than in the browser, so it follows you to the phone. - **Text alignment**, with its own TipTap extension rather than the official one, so the schema stays in files this project owns. Left is the default and is never written into the document. In Markdown, non-left blocks travel as `
` — the one form most readers still honour — and the importer reads it back onto the paragraphs. **Fixed** - The Markdown exporter did not put a blank line between top-level blocks, so consecutive paragraphs ran together in other readers. --- ## 2026-08-11 — English throughout, and the PDF toolbar **Added** - **Search inside a notebook**, from the note list. The sidebar's global search was removed: searching from inside a notebook should mean searching *that* notebook. - **New note / Upload PDF / Import Markdown** all live under the one `+` button. **Changed** - The interface is English throughout. It had drifted into two languages. - The two visibility switches — drawing and margin notes — sit together at the far right of the PDF toolbar, because they mean the same kind of thing. - The drawing tools appear next to the *Draw* button, not past everything else. - A separator is renamed and removed by right-click, with a confirmation for the removal. **Fixed** - Hiding the drawing also hid the margin notes. Each switch now hides only its own thing. --- ## 2026-08-10 — Notes on passages **Added** - **Pinned notes in a PDF.** A remark can be attached to a passage, and is shown in the margin beside the page — not written on top of it. On a phone, where there is no margin, the same notes open as a bottom sheet. - **Margin notes can be linked from the notes panel**, so a pinned remark can be written about at length and still lead back to the passage it came from. **Fixed** - A grey drag indicator stayed visible in the note list after a drag. It was a `borderTop` sitting beside a `border` shorthand in one style object. - The server stored an overlay holding only pinned notes as `NULL`, throwing every one of them away, because it counted strokes and nothing else. --- ## 2026-08-09 — Arranging a notebook **Added** - **Sorting per notebook**, remembered on the notebook itself, including an arrangement made by hand — which comes back intact after filtering. - **Separators** to group notes inside a hand-made arrangement. - **Markdown import**, single files or a ZIP this app exported. - **Moving notes between notebooks.** **Fixed** - Switching to Draw shrank the page from 733px to 460px. The editor was a flex item at the default `flex: 0 1 auto`, so it was only as wide as its widest row — the toolbar, which loses a dozen buttons in Draw. --- ## 2026-08-08 — PDFs **Added** - Import a PDF, read it, select its text, draw on each page, and export it with the drawings written in. - Notes written beside a PDF. - Uploaded files are encrypted at rest, like note bodies already were, and stored as deduplicated, content-addressed attachments. - Unused attachments are freed; versions are kept by count rather than by age. - Export as Markdown or PDF; the browser suites moved into the repository. **Changed** - Vector clocks were never read. Replaced with a conflict check that works. - Public sign-up removed — an administrator creates the accounts. --- ## Earlier TipTap editor, version history, full-text search and attachments (2026-08-07); drawing sync with WebP/JPEG support (2026-06-21); the first syncing alpha and PWA (2026-02-18).