Take the paper back out, and quiet the surfaces around it
The sheet was not what it wanted to be, so writing is plain text again: about 73 characters to the line, centred, no border and no shadow. The fixed page belongs to the canvas — a stroke has to land in the same place on every screen, which needs one agreed page — so it appears exactly when something is on it or about to be: in Draw, or when the note already has a drawing. The cap lives in the stylesheet rather than on a container, so it holds on a page as well as off one. Emoji are gone from the note rows and the sidebar. They are drawn by the operating system, so they looked different on every machine and were loud enough that a row's picture caught the eye before its title did. Rows are tighter by three pixels of padding. The trash button no longer stands permanently in the danger colour beside the star, which made the most destructive control the loudest thing on screen. It sits behind a divider and turns red under the pointer, when it is about to be used. On a phone the toolbar's fourteen controls scrolled sideways, so the ones at the end could only be reached by dragging the bar and nothing said they were there. Nine remain, plus a menu holding the headings, quote, code and undo. A new `sync` suite proves what was assumed: a PDF written on one device — the document, the drawing and the pinned notes — reaches a second one. Two browser contexts are two devices. Both search suites read a row's title as the second line of its text, which only worked while the icon was itself a text emoji; they read it by name now. 218 unit tests, 249 browser checks across twelve suites. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c12ffa250e
commit
830af6532a
13 files changed
+396
-155
No files matched your search
@@ -332,12 +332,13 @@ docker compose -f docker-compose.dev.yml up -d --build # must be running
|
||||
| `search-attachments` | 12 | body-only matches, ranking, umlauts; images as blob URLs, not inline bytes |
|
||||
| `history` | 10 | a large deletion is snapshotted, restoring works, restoring is itself undoable |
|
||||
| `drawing` | 7 | strokes survive the poller, and match across four viewport widths |
|
||||
| `pdf` | 85 | import, page proportions, lazy loading, and reading with the network off |
|
||||
| `pdf` | 91 | import, page proportions, lazy loading, and reading with the network off |
|
||||
| `attachments-lifecycle` | 10 | a picture is kept while any version shows it, and freed once none does |
|
||||
| `conflict` | 10 | a late write wins but the state it buries survives as a version |
|
||||
| `export` | 21 | the downloaded bytes are real Markdown, ZIP and PNG, unpacked and read back |
|
||||
| `organise` | 38 | a hand-made order survives a search; separators hold their place; a note exported and imported comes back whole |
|
||||
| `organise` | 39 | a hand-made order survives a search; separators hold their place; a note exported and imported comes back whole |
|
||||
| `offline` | 12 | a cold page load with the network off still opens notes and searches them |
|
||||
| `sync` | 5 | a PDF written on one device — document, drawing and pinned notes — reaches a second one |
|
||||
|
||||
Each suite creates a throwaway account through the admin API and deletes it
|
||||
afterwards, so runs leave the database as they found it. They need an admin to
|
||||
@@ -368,33 +369,6 @@ state of their own, so they can be read on their own.
|
||||
|
||||
---
|
||||
|
||||
## The writing surface
|
||||
|
||||
A real sheet, lying on a desk. It had been a page-*shaped* box that was not
|
||||
page-*coloured* — the same fill as everything around it with a hairline border,
|
||||
so it read as an empty panel rather than as paper.
|
||||
|
||||
- **Warm off-white in daylight** (`#fbfaf7`). Plain white next to a white toolbar
|
||||
is not a sheet, it is the absence of one.
|
||||
- **A raised surface at night** (`#1b2430`), lighter than the desk, with an edge
|
||||
and a shadow — deliberately not a white rectangle. A page that glows brighter
|
||||
than the room is what makes an app unusable in the evening; in a dark theme
|
||||
"paper" means *the surface I write on*, not *white*.
|
||||
- **About 73 characters to the line**, measured rather than guessed: 620px of
|
||||
sheet with a 56px margin. It ran to 84 before, past the width at which the eye
|
||||
reliably finds the start of the next line, and that was the single biggest
|
||||
reason the surface read badly.
|
||||
- **Centred**, with almost square corners. It used to sit 28px from the left and
|
||||
stop short of the right, and carried a 14px radius that belongs to a dialog.
|
||||
|
||||
Blocks *on* the sheet — quotes, code, table headers — are tinted from paper
|
||||
rather than from the app background, or they would read as sitting underneath it.
|
||||
|
||||
The sheet keeps the drawing's page proportion, so a short note leaves an empty
|
||||
page below it. That is what a sheet of paper does, and it is the price of having
|
||||
one: the canvas needs a fixed page for a stroke to land in the same place on
|
||||
every screen.
|
||||
|
||||
## Interface language
|
||||
|
||||
English throughout. It had drifted into two languages — the frame in English,
|
||||
|
||||
Reference in new issue
Block a user