Every number on this page is invented
A sample piece that exercises every component in the design system, built from a formula rather than from data, so that nothing here can be mistaken for a finding about London.
Published · Data as of
This page exists to prove that the design system works, and to prove it on a page rather than in a description. It uses every component the system has: two figures, three confidence marks, a map that costs nothing until you ask for it, and the block that closes every analysis.
Every value below comes from a formula in pipeline/design-system-sample/fetch.py,
not from a measurement.
The reason for that is not laziness. This repository sells itself on verifiability, and a plausible-looking number about London sitting in a sample file is a small time bomb: someone quotes it, and the site’s one real asset is gone. Synthetic data cannot be misquoted, because it says what it is.
Three invented series over 2026, each rising to a peak in a different month and falling back, with Hackney highest throughout.
The numbers behind this figure
| Month | Camden | Southwark | Hackney |
|---|---|---|---|
| 2026-01 | 24.4 | 28 | 36.4 |
| 2026-02 | 31 | 30.4 | 34 |
| 2026-03 | 40 | 37 | 36.4 |
| 2026-04 | 49 | 46 | 43 |
| 2026-05 | 55.6 | 55 | 52 |
| 2026-06 | 58 | 61.6 | 61 |
| 2026-07 | 55.6 | 64 | 67.6 |
| 2026-08 | 49 | 61.6 | 70 |
| 2026-09 | 40 | 55 | 67.6 |
| 2026-10 | 31 | 46 | 61 |
| 2026-11 | 24.4 | 37 | 52 |
| 2026-12 | 22 | 30.4 | 43 |
Source: Synthetic borough readings (CC0-1.0) — full attribution
Three things in that figure are contractual rather than decorative. The lines are labelled where they end, so the reader never has to match a colour to a key — colour is a second channel here, never the only one. The alt text describes what the chart shows rather than what kind of chart it is. And the numbers are underneath it, in a table, without a download.
A direct label beats a legend on almost every chart this site will publish, because it removes the step where a reader has to hold a colour in their head.
InterpretationA second figure, a second licence
The figure below draws on a different source, under a different licence. That is the point of it: the attribution block at the end of the page groups sources by licence, and a stack that has only ever been tested with one licence has not been tested at all.
An invented river level rising from 2.4 metres in January to a peak near 3.3 metres in July, then falling back by December.
The numbers behind this figure
| Month | Level (m) |
|---|---|
| 2026-01 | 2.40 |
| 2026-02 | 2.63 |
| 2026-03 | 2.85 |
| 2026-04 | 3.04 |
| 2026-05 | 3.18 |
| 2026-06 | 3.27 |
| 2026-07 | 3.30 |
| 2026-08 | 3.27 |
| 2026-09 | 3.18 |
| 2026-10 | 3.04 |
| 2026-11 | 2.85 |
| 2026-12 | 2.63 |
Source: Synthetic river gauge series (CC-BY-4.0) — full attribution
A map that costs nothing until you ask
Maps load on intent. Before the button below is pressed, this page has fetched no map library, no tiles and no geometry — what it has is a preview image and the finding written out in words, which is what a screen reader and a search engine get too. Pressing the button is the only thing that spends a reader’s bandwidth, and it is their decision.
What this map shows
- Nothing here is a map of anything: the module draws a panel saying so.
- The contract it proves is the one that matters — zero bytes of map code until a click, and a readable alternative for everyone who never clicks.
Loading a map on intent will cost less reader patience than loading one automatically, even though it takes an extra tap.
Hypothesis Test: Whether the phone-theft map in WP-06 loads inside two seconds on a mid-range Android over a real mobile connection.Behind the data
Method. Two files are generated by a formula in fetch.py — three offset
sine curves for the first figure, one for the second — written to
data-cache/, checksummed into the manifest, and turned into JSON by
transform.py. Running the pipeline twice produces byte-identical output,
which is the property that makes just data <slug> a check rather than a
hope.
Caveats. There is only one, and it is the whole point: none of these numbers measures anything. The borough names are labels, not subjects. Do not quote a single figure from this page.
What would change my mind. Nothing about London — there is no claim here to overturn. What would change the design: a real piece whose figures need something this shell cannot express, which is exactly what the first three pieces are for.
Sources
- Synthetic borough readings — Londology. CC0-1.0. Retrieved . Not a measurement of anything. Generated by fetch.py from a fixed formula so that a re-run produces the same checksum, and named after real boroughs only so the chart has plausible labels.
- Synthetic river gauge series — Londology. CC-BY-4.0. Retrieved . The second licence is the point: it proves the attribution stack keeps two differently licensed sources apart instead of merging them into one line.
Attribution
- CC0-1.0 Synthetic borough readings
Synthetic sample data by Londology, dedicated to the public domain under CC0 1.0.
- CC-BY-4.0 Synthetic river gauge series
Synthetic sample series by Londology, licensed under CC BY 4.0.
Data as of . Last fetched . Pipeline code is available on request.