All entries

An axis that no longer turns

The front page opens on the collection itself, a first decade one year wide folded into the next, the people, organization and model indexes became lettered cards, and the axis that drew itself upright on every visit before turning now arrives the right way up.

While the research passes filled the collection, the interface went its own way, mostly in small commits answering one remark from the 6-in-1 at a time. None of them is worth an entry alone. Together they show the site stop being an axis with attachments and become a collection with several ways in.

A front page that starts with the collection

On a phone the front page’s heading ran to four lines and took the whole first screen with it, so both things that move, the five figures and the topic band, started below the fold. The heading is four words now and a size smaller, the figures follow the text directly, and the key and the band follow them. The way onto the axis comes once, after the case for it; the duplicate at the foot of the page went, and a reader who scrolls to the end has a link in the footer instead, first among the ones already there, at the weight of small print rather than of a second invitation.

The language switch sat at the foot of the front page, the last place someone who cannot read this language would look, and the only page on the site where it was not in view on arrival. It is on the first line now, beside the site’s name. Two of the five figures wrapped onto a second line at every width, and the row read as three figures and two exceptions; each is labelled with one word now: “systems”, because every one of the 229 is a model, a product, a chip, a robot, a framework or a programme, and “records”, because every published record is on the axis. The test compares the labels with each other rather than with a character count, so it fails only when one of them really stands taller than the rest.

Later the lines joined the axis in the footer, the one index the front page did not reach. They stay out of the row of figures: the figures count what the collection holds, and a line is a way of cutting it.

A first decade one year wide

The speech pass moved the earliest record from 1940 to October 1939, and the axis has always opened on the year of its earliest record. Together those left the first block one year wide out of eighty-eight. Its label landed on its neighbour’s, so the band printed “1939” and “1940” four pixels apart; its count sat on the next count; and because a period holding one record opens that record instead of zooming, the block could not be entered at all.

The first fix was wrong twice over. A 44-pixel minimum width on a period button makes sense down a vertical axis, where blocks do not share the height. Across, they share the width, and a floor does not enlarge one button, it overflows the plot: thirty-one day buttons where about twenty fit. That is a horizontal scrollbar, which changes the width the component reads to choose its orientation, and that was the flicker between a horizontal and a vertical axis at in-between widths.

The right fix is a rule, not a floor: a remainder of three years or fewer folds into the decade that follows. The rule lives in the shared date module, and all four places that group by decade take it from there: the axis, the band on the front page, the catalogue and the reading list. Each had its own copy, so fixing the axis alone would have left the catalogue saying “1939–1939” where the axis said “1939–1949”. The block now reads 1939–1949, holds sixteen records and zooms. And a link saved before that day with the 1930s in it leads to the block that swallowed them.

An axis that turned after it was drawn

On every visit from the front page the axis appeared upright for a moment and then turned across the full width. Systematic, not a glitch. The orientation is read from the frame’s measured size, and the first render had measured nothing: it started from a phone-sized guess, and the server sent markup drawn downwards. The size observer turned it only after hydration.

The first measurement is now taken synchronously before the browser paints anything, so the first frame after hydration is already the right way up, and the stylesheet does not paint the plot until it is ready. display, specifically, and not visibility: the phone-sized drawing overflows a wide frame, and its scrollbar would narrow the very width being measured.

Indexes with something to hold on to

The three entity indexes were one column of several hundred rows with nothing for the eye to catch on. Each is now cut by the first letter of the shown name, with a row of letters at the top, and the rows became cards, two to a row from 720 pixels up. The lines were folded the same way: each under its own name, closed, and a chip, or arriving from a record page, opens the one it names.

The rest of this part is about how an alphabet in a bilingual atlas is not as simple as it looks. “π0” was first filed under “Π”, which reads as the Cyrillic “П”, then got a section of its own after Z; a Greek initial now sits among the Latin letter it is read as, and the name keeps its π. “Корпус C4”, “Набір CoNLL-2000” and “Спільне завдання WMT” put three Cyrillic letters into a Latin model index, where К, Н and С stood beside K, H and C like the same letters twice; in English the leading “The” sent all three under T. Each name now opens with the name it is known by, and the description follows the dash.

The rest of the small things

The record card: the close button moved into the dialog’s first line instead of a row of its own; the list glyph gained a bullet per row, because three equal bars on a phone read as a menu; the list/graph switch became a two-part control seated in the relations heading, with the pressed half being the view on screen. On the record page the sources come straight after the details and are marked by kind rather than numbered, and the relations lost bullets the badges already did the work of. The split reading row went from 10 to 12.5 rem, because on the CI runner 37 Ukrainian and 13 English cards overflowed it by 11–18 pixels; the threshold was once again set for Verdana rather than for this machine’s font.

The axis footer was laid out as three groups: how to work it, what it shows, and the way out. A test that clicked the centre of 19 May’s column and expected Gemini broke as soon as a second record landed on that day and its mark sat exactly there, so the test now takes a filled day from the data, clicks the first point of its column no mark covers, and expects the title of every record on that day.

The methodology stopped promising records the axis leaves out and named the lines and the “contrasts” link type. A missing address answers with the atlas’s own page in both languages rather than Vercel’s bare text NOT_FOUND. The domain is written into the code, so the canonical address is right in any build and not only in the production build with its environment variable, and the rest of what stands between the site and search indexing went into the backlog as one pass rather than as one line of robots.txt.

And the link preview card. It carried three lines of figures, the year span, the record count and an alpha warning, which went stale with every pass. Now it carries only the title, and the rest of the card is the atlas’s own marks: all 657 records, each in its topic’s shape and colour, scattered as chaos on the left and settling onto the axis at their year on the right. The placement is seeded, so the same data draws the same card. It is rasterised by sharp, already a dependency, rather than by Playwright’s browser: in a second, and with no browser at all.

Entry written September 23, 2026

Commits this entry accounts for

  • 62be549
  • fcab825
  • be1e2e5
  • def6fd5
  • d89a336
  • d39a5cb
  • c2f75e5
  • ec52f65
  • 497c21e
  • a982ba0
  • dd1908b
  • 0cbdc93
  • 45e0e95
  • df6a330
  • 4710a6b
  • 9c8ae11
  • beeb441
  • 71cf64c
  • 8e2b978
  • baaada2
  • 3c1d3c1
  • 1addd88
  • 24f282a
  • 711b465
  • ca0f241
  • acffa60
  • 76e75ff
  • 7d88c8e
  • dc16a2e
  • 6a43901
  • 5ba882c
  • 7448983