the longform library

Field notes · edition

The library, re-measured.

Three weeks on, every source was measured again from scratch. Almost nothing moved — and the one thing that did changes how the law should be stated.

12 sources re-measured 0 redesigns 0 dead links first pass 11 Jul 2026
01

Verdict: the engineering is settled

Every one of the twelve sources is still live, still serving the same reading system. Body font, size, leading and measure did not move on a single site. Three display headlines grew by two to three pixels, which is clamp() responding to the viewport, not a new type decision.

12 / 12
still live

No link rot — even the Netlify deploy-preview from the first pass still resolves.

0 / 12
measure changed

Column width and characters-per-line identical on every site.

0 / 12
leading changed

Body line-height unmoved, 1.50 to 1.85 as before.

3 / 12
display nudged

Penguin 61→63px, UNSW 63→65px, Honda 84.8→88px. Fluid clamps, not redesigns.

That stability is itself the finding. Measure and leading are not fashion choices that drift with a refresh cycle; they are settled engineering, which is exactly why they are safe to copy.

02

What is new: cadence, for all twelve

The first pass counted images but never timed them. This one measures both halves of visual cadence on every site: density (visuals per 100 paragraphs) and rhythm (median screens of scroll between visuals). Splitting them apart is what produced the sharper law below.

inside the law · ≤3 screens per beat The Pudding0.35 Honda0.39 Wait But Why0.75 NN/g0.91 Stripe1.16 Tubik Studio1.28 Penguin2.05 Our World in Data2.15 UNSW2.56 Shorthand5.03 — each beat is a full screen 012345 screens of scroll between visuals →
Rhythm is near-universal. Nine of the ten sites with a measurable beat land between 0.35 and 2.56 screens. Shorthand's 5.03 is not a violation: its beats are full-viewport scenes, so the visual fills whatever screen you are on. Elle (lazy-loaded images stack) and the type-only essay have no measurable gap.
Visuals per 100 paragraphs — density varies 0 to 793 by genre Honda793 The Pudding323 Shorthand75 Penguin69 NN/g67 ← the surprise Postcards by Elle39 Stripe33 UNSW21 Tubik Studio19 Our World in Data15 (lazy-loaded) Wait But Why14 Notes on Remix 30 — typographic rests only bars on a square-root scale so the extremes stay readable; labels are true values
Density is genre-specific. A photo essay runs 50× denser than a studio blog. Copying a density is a mistake; copying the rhythm is not.
03

The law, restated

The first pass said: a visual beat every one to three screens. The re-measure supports it and sharpens it into three claims that can each be checked.

  1. Rhythm is near-universal. Nine of ten measurable sites beat between 0.35 and 2.56 screens, across genres that share no visual language at all.
  2. Density is genre-specific, spanning 0 to 793 visuals per 100 paragraphs. Choose it from your content type, not from a site you admire.
  3. Density does not track seriousness — placement beats quantity. NN/g, dry UX research, runs 67 visuals per 100 paragraphs. Wait But Why, famous for its drawings, runs 14. WBW's diagrams are rare and land exactly where the reader cannot picture the thing.
Aim for the rhythm, pick the density from the genre, and spend the effort on where each beat lands.
NN/g — many beats, evenly spread (67 per 100 ¶) Wait But Why — few beats, placed at the unimaginable moments (14 per 100 ¶) cosmic scaleprobabilitydeep timethe paradox both read well — the second does it with a fifth of the pictures
Placement beats quantity. Density is a budget, not a score. Four well-aimed diagrams can pace an essay better than twelve evenly-sprinkled ones.

For generated content — AI explainers, audits, research digests: target the rhythm (a beat every one to three screens), take the density from the genre, and place each beat at the moment the reader is about to lose the picture. The design system works this through on a real audit report.

04

The numbers

All twelve sources, re-measured 4 August 2026 · desktop 1366×900
#SiteBodyMeasure / CPLLeadPer 100 ¶Screens / beatDrift
01Tubik StudioTWK Lausanne 20px900 / 901.75191.28none
02Notes on Remix 3Source Sans 18px740 / 821.550none
03Postcards by ElleSpectral 20px728 / 731.6039none
04NN/gSource Serif 20px835 / 841.85670.91none
05ShorthandCircularWeb 20px700 / 70755.03none
06PenguinAvenir 18px540 / 601.70692.05H1 +2px
07UNSW NewsroomRoboto 20px540 / 541.70212.56H1 +2px
08HondaTahoma 16px540 / 681.707930.39H1 +3px
10The PuddingPublico Text 17px640 / 751.703230.35none
11Wait But WhyNoto Sans 16px780 / 981.50140.75none
12Our World in DataLato 18px628 / 701.55152.15none
13StripeSöhne 18px w300810 / 901.56331.16none

Full per-site record, including the first pass for comparison: design-tokens.md.

05

Method & honest caveats

Identical to the first pass, so the two are comparable: load the live page at 1366×900, read the computed styles of the median-length visible paragraph (true body copy, since headings and captions are outliers), compute characters-per-line as width ÷ (0.5 × font size), then count every img, svg, canvas, figure and video over 120px in both directions and take the median vertical gap between them.

Where these numbers are soft

Two sites undercount. Our World in Data lazy-loads its interactive charts, so a single viewport pass sees 12 of roughly 22. Postcards by Elle stacks unloaded images at the same offset, which makes the median gap meaningless — its density figure stands, its rhythm does not. Counts also include code blocks on Stripe, which is deliberate: a code block is a visual rest for a reading eye.

Reproduce or extend it with forensics-snippet.js — paste it into any page's console. The loop for adding sources is in the playbook.