MB · The Lab

EXP. 009 · This Page, Measured

The Lab — EXP. 009 · the page as its own subject

You are the data now.

This page measures exactly one thing: its own consumption, by you, on this device. A ledger in localStorage, a handful of performance counters, and nothing else — no server, no beacon, no one watching. n = 1. The instruments below were already running when you read this sentence; arriving moved the needle.

Visit Day Total This visit Touches

Fig. 1 — your retention curve, n = 1

Fig. 2 — compounding attention

Fig. 3 — the observer effect

0seconds, this visit

Lifetime on this page

reading this number is what inflates it — you cannot check the reading without adding to it.

Fig. 4 — the instrument reads itself

Page weight

DOM nodes

Time to render

every value above was measured of this page, by this page, at load — the ruler laid against its own edge.

The ledger — kept only here

the whole dataset is one localStorage key on this machine. it is yours; you can end it.

EXP. 009 — Notes

This Page, Measured

The page carries product-grade instrumentation pointed at itself: session length, scroll depth, reading pace, return visits — computed on your device from your actual behavior, displayed to the only user they describe, transmitted nowhere. Every readout traces to a real event with n = 1. It is a working analytics stack with the aggregation removed, so you can see what the numbers were before they became someone's chart.

Every metric you act on was measured by code somebody wrote, embodying choices somebody made: what counts as a session, what counts as active, what a return is. Aggregation hides the choices; n = 1 puts them where you can check them against the only ground truth available — your own behavior.

The exercise: watch your own retention curve form here, then open your product dashboard and ask which of its definitions would survive being shown to the person they measure. Instrument first, define honestly, and distrust any number whose lineage you can't walk.

A page whose only subject is you reading it. It counts your returns, times your attention, and shows you the ledger — the observer effect running in a mirror. Somewhere a dashboard describes you to a stranger; this one tells you first.

  1. Mechanism under test: honest self-instrumentation. A visit ledger in localStorage (key mb-lab-e9-v1: an array of ts / seconds / interactions) is appended on arrival and updated live at 1 Hz — seconds count only while the tab is visible; the tick stops entirely when it isn't. Page weight, node count, and render timing come from the Performance and DOM APIs, measured of this very document. Nothing is simulated.
  2. The strange loop: the act of reading the measurement IS the measured quantity — Fig. 3 rises because you are checking it, and the charts you're weighing in Fig. 4 are part of the weight. Kinship with EXP. 003: there the picture contained itself; here the dataset does.
  3. Privacy, verbatim: nothing leaves the device, nothing is sent, there is no server to send it to. The ledger lives in your browser's localStorage and the burn button deletes it without ceremony. In a private window it never even persists.
  4. What might graduate: the ledger grammar — real per-reader history as a design material (return gaps, compounding attention) — could feed the B edition's instrument panel, which already refuses fake numbers. The looks stay behind, per the fence.

PHYSICS — no rAF at all: one 1 Hz setInterval, cleared on visibilitychange and restored on return; persisted on hide/pagehide · no network, no server, n = 1 — zero requests beyond this file, its fonts, and the favicon · reduced motion = the ember tick pulse is dropped, values render settled (they are readings, not animations) · localStorage unavailable = designed session-only edition, stated on the page · ?freeze renders the stored ledger once, tick stopped, for capture · zero console errors · native scrollbar, skip link.

← The Lab  ·  ← morganbrown.co