Figures · every number on this estate, with its arithmetic

Every figure,
and the command that proves it.

This estate’s recurring failure has always been the same one: a page asserting a number its own data cannot support. The hero once said forty-seven while the register said fifty-two; a guide claimed 671 rooms while serving 315. The fix was never a better proofread.

So every figure the site deals now carries cmd — a command you can paste at the root of the tree that recomputes it from the shipped data — and, where the data came from somewhere else, src, the upstream it came from. The handful that genuinely cannot be recomputed carry prose instead, saying so in plain words. tools/mkfigures.py --check runs all of them and fails on the first disagreement.

The table

The number, the arithmetic, the source.

One row per figure, in the order the band deals them. Command is run from the root of this tree and prints the figure and nothing else; source names where the data came from, and is a link when the upstream has a page to send you to. A figure with no command says why it has none.

146 figures shown · 141 carry a command that recomputes them · 47 name an upstream · 5 are stated rather than counted, and say why

141

Properties

Live sites and applications across four practices, each with its own domain.

python3 -c 'import json,re;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));print(sum(1 for p in d if not p.get("stripOnly")))'

Source assets/js/portfolio-data.js

54

Live-data builds

Desks whose own code reads an upstream host — counted off the tree by tools/mkwires.py, listed one at a time at /wires/, and including the front door, which reads the Treasury itself.

python3 -c 'import json;w=open("wires/assets/js/wires.js").read();i=w.index("window.LABS_WIRES = ")+20;print(json.loads(w[i:w.rindex("}")+1])["counts"]["desks"])'

Source https://sites.llc/wires/

181

Upstream sources

Distinct hosts the estate’s own JavaScript and PHP read — 121 asked straight from your browser, 60 through a relay on this origin, every one named on the wires desk.

python3 -c 'import json;w=open("wires/assets/js/wires.js").read();i=w.index("window.LABS_WIRES = ")+20;print(json.loads(w[i:w.rindex("}")+1])["counts"]["hosts"])'

Source https://sites.llc/wires/

167

Assets in the book

The full register behind every live build — 14 flagships, 29 active builds and 124 strategic holdings, conservatively valued at $4.8M+.

python3 -c 'import json;t=open("assets/js/investor-data.js").read();print(len(json.loads(t[t.index("[",t.index("window.LABS_ASSETS")):t.rindex("]")+1])))'

Source assets/js/investor-data.js

4

Practices

Live intelligence, markets and capital, consumer brands, and the studio tooling underneath them — the four the homepage names and the portfolio band filters on.

grep -c 'class="practice__n"' index.html

2

Editions

Paper and dark, both drawn and both shipped. The site remembers which one you read and keeps you in it.

ls -1 index.html indexdark.html | wc -l

Two is the shape of the estate rather than a tally, so the command counts what the shape produces: the homepage ships as exactly two files, one per edition, and so does almost every page behind it.

0

JavaScript frameworks

Not one page on the estate loads React, Vue, Angular, Ember, Backbone or jQuery — plain markup, one stylesheet and a script, which is why the pages open when you click them. The one framework still here is a CSS one: eight older pages pull the Tailwind CDN at runtime and the News Hub’s classic console links a purged Tailwind build, and the command below does not count those because it does not claim to.

grep -rlE "react(-dom)?(\.production|\.development)?\.min\.js|vue(\.global|\.runtime)?\.(min\.)?js|angular(\.min)?\.js|ember\.js|backbone(\.min)?\.js|jquery(-[0-9.]+)?(\.min)?\.js" --include='*.html' --include='*.php' --include='*.js' . | wc -l

19

Desks on a clock

Desks that name their own re-read cadence, in a REFRESH_MS or a POLL_MS — from ten seconds on the flight board to thirty minutes on the recall register. There is no estate-wide interval; the ninety seconds this band used to promise was the News Hub’s and the News Hub’s alone.

grep -rlE "\b(REFRESH_MS|POLL_MS)\s*=" --include='*.js' . | wc -l

100%

Owned outright

Domain, code and operations on every property. Nothing here is licensed in, rented, or run by somebody else.

Ownership is a fact about registrar accounts and contracts, not a property of any file in this tree, so no command can produce it. It is stated plainly rather than computed, and the investor room is where the register behind it is set out.

$4.8M+

Book value

Investor

A conservative valuation across the active properties and the strategic holdings sitting beside them.

Source https://sites.llc/investor/

A valuation is a judgement, not a count. The investor room sets out the basis — flagships priced as products, active builds at partial credit, holdings at renewal cost plus comparables — and the plus sign marks the floor of a range. Nothing in this tree sums to it, so nothing here pretends to.

1

Operator

Designed, written, shipped and run in one house — which is why the answer to how something works is never “we would have to ask the vendor”.

grep -c '^ Founder' humans.txt

Source https://sites.llc/humans.txt

1,512

Proved in the city register

New York City

Of the 1,748 rooms on the New York table, 1,512 carry a permit number from the city’s own inspection register; the rest are carried on their own published source, and the table says which is which.

python3 -c 'import json;print(sum(1 for r in json.load(open("nyc/restaurants.json"))["rows"] if r.get("camis")))'

Source https://data.cityofnewyork.us/Health/DOHMH-New-York-City-Restaurant-Inspection-Results/43nn-pn8j

257,698,037,760

Pieces of sheet music

Composer

Five composers, twelve keys and every 32-bit seed — each one engraved, played and named on demand, and not one of them stored anywhere.

python3 -c 'import re;g=open("composer/js/generate.js").read();m=open("composer/js/model.js").read();print(len(re.findall(r"^ [a-z]+: +\{ fn:",g,re.M))*len(re.findall(r"^ [A-G][#b]?m?: +\{ vex:",m,re.M))*4294967296)'

5,018

Tracks in the archive

Song

Across the five era collections — 961 from the sixties, 1,021 from the seventies, 974 from the eighties, 1,105 from the nineties and 957 of techno.

python3 -c 'import glob,json,re;print(sum(len(json.loads(re.search(r"=(\[.*\]);?\s*$",open(f).read().strip(),re.S).group(1))) for f in sorted(glob.glob("song/*.llc/assets/data/*.js"))))'

8,618

Languages registered

Tongues

Every language-level languoid in Glottolog 5.3, shipped inside the page and searchable by name, ISO 639-3 code or glottocode.

python3 -c 'import json;t=open("tongues/assets/js/languages.js").read();print(len(json.loads(t[t.index("{"):].rstrip().rstrip(";"))["rows"]))'

Source https://glottolog.org/

8,610

Jokes, metered

Joke Vault

Forty-one categories filled to two hundred apiece, plus the 410 long-form stories — 1,142 of the whole written by hand, and every one scored by a meter that reads the English.

python3 -c 'import re;s=open("joke/script.js").read();print(len(re.findall(r"^ id: \"",s,re.M))*int(re.search(r"var TARGET = (\d+)",s).group(1))+len(re.findall(r"^ \"",open("joke/stories.js").read(),re.M)))'

8,486

Padel facilities mapped

Padel

Places you can turn up and play, in 108 countries: 8,210 clustered out of OpenStreetMap at 150 metres, and 276 added by hand where OpenStreetMap carries nothing and a club’s own page printed a street address.

python3 -c 'import json;print(len(json.load(open("padel/facilities.json"))["rows"]))'

Source https://www.openstreetmap.org/

254

Plates in the archive

Product Lab

The Orange Crush capsule series and the full product line — five shelves of light and nine of subject, every plate re-inked for three paper stocks, with a motto engine to composite and export.

grep -c "src: 'images/" pill/index.html

496

Subway stations

Transit

Every station on the New York board, with the next trains both ways read off the MTA’s own countdown feed and decoded in the page.

python3 -c 'import json;t=open("transit/assets/js/stations.js").read();print(len(json.loads(t[t.index("["):t.rindex("]")+1])))'

Source https://data.ny.gov/Transportation/MTA-Subway-Stations/39hk-dx4f

75

River gauges

Rivers

Hand-verified USGS gauges, each with seven days of discharge and stage and the official flood stages ruled across the chart.

grep -c '^ {id:"' rivers/assets/js/gauges.js

Source https://waterservices.usgs.gov/

100

Clocks on the wall

Clockwork

A hundred cities in the register — Asia 25, the Americas 24, Europe 21, Africa 16, six Antarctic stations, Pacific 4, Australia 3, Atlantic 1 — computed from the browser’s own IANA zones and tinted by the sun’s real altitude.

sed -n '/^var REGISTER=\[/,/^\];/p' clockwork/assets/js/app.js | grep -c "^ {id:'"

10

Treasury tenors drawn

Money

The yield curve on the rates desk is drawn from ten maturities, three months to thirty years, today’s over last year’s, off the Treasury’s own daily series.

python3 -c 'import re;print(len(re.findall(r"\[\"BC_", re.search(r"var TENORS=\[(.*?)\];",open("money/assets/js/app.js").read().replace(chr(39),chr(34)),re.S).group(1))))'

Source https://home.treasury.gov/resource-center/data-chart-center/interest-rates/

42

Cities on the weather board

Weather

Plus any city you board by name — forty-eight hours of temperature drawn and seven days barred by the page itself.

sed -n '/^var WORLD = \[/,/^\];/p' weather/assets/js/app.js | grep -c "{n:'"

Source https://open-meteo.com/

15

Countries on the grid

Grid

Pick one and the desk draws its last forty-eight hours of electricity, fuel by fuel, from the operators’ own numbers.

sed -n '/^var COUNTRIES = \[/,/^\];/p' grid/assets/js/app.js | grep -o "\['[a-z][a-z]', '" | wc -l

Source https://api.energy-charts.info/

65,160

Probability cells

Aurora

NOAA’s OVATION aurora forecast painted whole — 360 by 181 cells over a hand-drawn equirectangular graticule, every five minutes.

python3 -c 'import re;m=re.search(r"new Uint8Array\((\d+)\*(\d+)\)",open("aurora/assets/js/app.js").read());print(int(m.group(1))*int(m.group(2)))'

Source https://services.swpc.noaa.gov/json/ovation_aurora_latest.json

20M

Newspaper pages

Press Room

The Library of Congress’s American newspaper archive, 1789 to 1963, searchable a word at a time from the Press Room.

Source https://www.loc.gov/collections/chronicling-america/

This is the Library’s own published total for Chronicling America, not a count of anything shipped here — the archive is theirs and the page reads it live. Nothing in this tree holds twenty million pages to count, so the figure is attributed rather than computed; the two figures beside it, 51 state outlines and 174 years, are counted from the page.

1,410

Diamond listings

47th Street

Across thirteen markets and six departments — 705 of them on 47th Street itself, the rest from Antwerp to Surat.

grep -o '"name":' jewelry/assets/js/businesses.js | wc -l

464

Places in the city books

Cities

New York 146, Los Angeles 132, Miami 103 and Milwaukee 83 — every record with its own notes and every picture framed and credited.

cat nyc/index.html la/index.html miami/index.html mke/index.html | grep -o 'data-card="' | wc -l

108

Countries with courts

Padel

The padel register reaches every one of them, clustered out of raw OpenStreetMap objects into places you can turn up and play.

python3 -c 'import json;r=json.load(open("padel/facilities.json"))["rows"];print(len({x[3] for x in r if x[3]}))'

Source https://www.openstreetmap.org/

49

Generative algorithms

DMT

In the geometry lab alone, across twenty-one shapes, with a seed system, shareable presets and recording at 60 Mbps.

sed -n '/^ const algorithms = \[/,/^ \];/p' dmt.php | grep -c "draw: draw"

8

Particle engines

NEXUS

A cloud, gravity wells, waves, a web, a flock, a flow, a crystal and fourteen strings — one field, eight ways to move it.

sed -n '/^var MODES = {/,/^};/p' nexus/js/nexus.js | grep -cE "^[a-z]+: \{"

50

Versions of one illusion

Mind Sphere

The rotation illusion built fifty ways, each a generative variant whose perceived spin flips when your eye picks a different depth.

python3 -c 'import re;print(len(re.search(r"const versionNames=\[(.*?)\];",open("mindsphere/assets/js/lab.js").read()).group(1).split(",")))'

12

Legends to beat

Chess

Twelve opponents at the chessboard, from Capablanca at depth three to Kasparov and Morphy at depth four, with the engine searching to depth eight on hard.

sed -n '/^ const levels = \[/,/^ \];/p' chess/chess-app.js | grep -c "^ {id:"

15

Synthesis engines

Songbuilder

Five drum voices, nine melodic engines and a sampler, with ninety patches, nine styles the dice roll inside, and twenty keys that remake the roll.

python3 -c 'import re;t=open("songbuilder/js/song.js").read();print(len(re.findall(r"\x27[a-z]+\x27",re.search(r"SB\.KIND_IDS = \[(.*?)\]",t,re.S).group(1))))'

10

Instrument tunings

Tuner

Real string targets for ten instruments — four guitar tunings, two basses, ukulele, violin, mandolin and cello — with A4 adjustable from 415 to 466 Hz for anyone playing with an old orchestra.

sed -n '/var INSTRUMENTS = \[/,/^ \];/p' tuner/js/app.js | grep -c "s: \["

41

Kinds of joke

Joke Vault

Categories in the vault, across twenty languages — 1,142 written by hand, 410 of them long-form stories.

grep -c '^ id: "' joke/script.js

17

Feeds asked at once

Search

The federated search queries every one of them in parallel and prints what each took to answer, so a slow source is visible.

sed -n '/^ var FEEDS = {/,/^ };/p' search/assets/js/app.js | grep -cE "^ [a-z]+: *function"

5

Federal registers

Recall

FDA food, drug and device enforcement, USDA FSIS notices and CPSC recalls, merged newest first and stamped with the agency.

sed -n '/^var SOURCES=\[/,/^\];/p' recall/assets/js/app.js | grep -c "id:'"

Source https://api.fda.gov/

16

Wikipedias on the scope

Pulse

A rolling sixty-second oscilloscope across sixteen language editions, human edits in ink and bot-flagged edits dimmer.

sed -n '/^var WIKIS=\[/,/^\];/p' pulse/assets/js/app.js | grep -o "{k:'" | wc -l

Source https://stream.wikimedia.org/v2/stream/recentchange

636

Free books and courses

007

On eleven shelves in the Stacks — IT books, conference talks and full courses, every one of them free to read or watch.

grep -o 'u:"' 007/assets/js/library-data.js | wc -l

24

Books dealt at a time

Books

From the Open Library’s twenty-million-work catalogue, re-dealt on the button, with an access filter that says what reads free.

python3 -c 'import re;print(re.search(r"var PAGE = (\d+);",open("books/assets/js/app.js").read()).group(1))'

Source https://openlibrary.org/

100

Seats in a chat room

Chat

On one seven-character code, with any file to a gigabyte in and out, voice notes, polls and sealed rooms.

python3 -c 'import re;print(re.search(r"room\.max \|\| (\d+)",open("chat/chat-app.js").read()).group(1))'

72h

The longest a link lives

File Share

A shared file expires between one and seventy-two hours, with an optional password. Only the link mapping is kept here.

python3 -c 'import re;print(max(int(x) for x in re.findall(r"\x27(\d+)h\x27",re.search(r"var EXPIRY_TEXT = \{(.*?)\};",open("fileshare/assets/js/app.js").read()).group(1))))'

8

Invisible-text detectors

Watermark

Reading a pasted string character by character for smuggled payloads, lookalike letters, bidi controls and hidden HTML.

sed -n '/^var DETS = \[/,/^\];/p' watermark/assets/js/app.js | grep -c "id: '"

54

Premium .IM holdings

Investor

Single-word and single-character identity names held in reserve — fifty-four of the 167 assets in the book sit under the Isle of Man registry.

python3 -c 'import json;t=open("assets/js/investor-data.js").read();d=json.loads(t[t.index("[",t.index("window.LABS_ASSETS")):t.rindex("]")+1]);print(sum(1 for a in d if a["name"].endswith(".im")))'

Source assets/js/investor-data.js

29

Effects on the deck

Audio

In the browser DAW: filters, distortion, bit crush, chorus, delay, reverb, the EVH jet swoosh, a stereo widener, scratch, brake and three tape stops — twenty-nine named keys.

grep -o "showFXDetails('[a-z0-9_]*')" audio.html | sort -u | wc -l

48.1

Semitones a second

Laband

The exact rate the turntable brake falls at — a 0.36-second time constant is 48.1 semitones a second, measured in a render rather than tuned by ear.

python3 -c 'import re,math;t=float(re.search(r"var TAU_DOWN = ([\d.]+);",open("laband/js/deck.js").read()).group(1));print(round(12/(t*math.log(2)),1))'

3

Stocks in the plate archive

Product Lab

Every one of the 254 plates re-inked for three paper stocks, with a density map per plate rather than one fitted curve.

sed -n '/const STOCKS = {/,/^ };/p' pill/index.html | grep -c "matte:"

6

Continents on the sweep

Network Labs

The global test times a real request into six continents from your own browser, seventy-five named sites in all. Antarctica is the one left off, because there is nothing there to ask.

python3 -c 'import re;print(len(re.findall(r"name:",re.search(r"var CONTINENTS = \[(.*?)\n \];",open("labluxa/assets/js/app.js").read(),re.S).group(1))))'

13

Rooms

Every property in the book is filed in exactly one of them, and the crawl, the drawer and the roster all read the same list.

python3 -c 'import json,re;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));print(len([p for p in d if p.get("stripRoom")]))'

Source assets/js/portfolio-data.js

143

Doors behind the doors

Properties listed inside the rooms, each with a line saying what it does — filed without a single one landing in two places or none.

python3 -c 'import json,re;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));r={p["label"].lower() for p in d if p.get("stripRoom")};print(sum(1 for p in d if p.get("stripFold") in r and not p.get("stripRoom")))'

Source assets/js/portfolio-data.js

24

The biggest room

Earth

The fullest room in the book. Which room that is moves as the register grows, so the cell asks the register rather than remembering an answer.

python3 -c 'import json,re,collections;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));r={p["label"].lower() for p in d if p.get("stripRoom")};c=collections.Counter(p["stripFold"] for p in d if p.get("stripFold") in r and not p.get("stripRoom"));print(max(c.values()))'

Source assets/js/portfolio-data.js

6

The smallest room

Words

The shortest shelf in the book — and short is not small, which is why it gets a room and not a footer.

python3 -c 'import json,re,collections;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));r={p["label"].lower() for p in d if p.get("stripRoom")};c=collections.Counter(p["stripFold"] for p in d if p.get("stripFold") in r and not p.get("stripRoom"));print(min(c.values()))'

Source assets/js/portfolio-data.js

24

Instruments in one room

Earth

Earth alone points this many instruments at the same planet: the air over a city, the storms crossing it, the ground moving under it, the water at its edges and the power being burned.

python3 -c 'import json,re,collections;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));c=collections.Counter(p.get("stripFold") for p in d if not p.get("stripRoom"));print(c["earth"])'

Source assets/js/portfolio-data.js

224

Drawers carrying the map

Every page on the estate with a hamburger lists all thirteen rooms, generated from one file — so the map is the same map whichever door you came in by.

grep -rl 'ROOMS:START' --include='*.html' --include='*.php' . | wc -l

This one moves every time the estate gains a page, which is why it is the figure most likely to fail --check on a build that added one. That is the tool working: re-run it and the number follows the tree.

$40.03T

The national debt

Treasury

$40,032,876,505,819.31 as the Treasury filed it on 21 August 2026 — read live from its own Debt to the Penny series, not from a ticker that estimates between filings.

Source https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/debt_to_penny

The only figure on the band that is fetched rather than counted. The answer lives at the Treasury and moves every business day, so no command over this tree can produce it; the number above is the last reading taken by hand, dated in the note, and site.js replaces it with today’s the moment the figure is dealt.

72

Voices on file

Sneaker

The sneaker desk keeps a register of 72 named accounts that move the culture, each with a handle, a beat and a written description.

grep -c 'handle: "@' sneaker/assets/js/sneaker-data.js

151

Account links

Sneaker

Every one of those 72 voices carries its real profile links — 151 of them across Instagram, YouTube, X, TikTok and LinkedIn.

grep -o 'type:"' sneaker/assets/js/sneaker-data.js | wc -l

50

Releases on file

Sneaker

The release book holds 50 shoes, each with its retail price, a resale low and high, and a hype score.

grep -c 'hype:' sneaker/assets/js/sneaker-data.js

41

Drawn plates

Sneaker

Only 9 of the 50 shoes have a real photograph, so the other 41 get a drawn typographic plate rather than a stock picture standing in for a shoe.

python3 -c 't=open("sneaker/assets/js/sneaker-data.js").read();print(t.count("hype:")-t.count("localImg:"))'

14

Silhouette rules

Sneaker

The drawn plate names the shoe’s silhouette by reading it out of the shoe’s own name, using 14 pattern rules covering AJ, Dunk, AF1, Air Max, Kobe, Yeezy, Samba and more.

sed -n '/var SIL = \[/,/^ \];/p' sneaker/assets/js/app.js | grep -c '^ \[/'

24

Pairs quoted

Sneaker

Two opposed ticker rails run the season’s reading — 24 pairs in all, each with a price, a percentage move and a link to its listing.

grep -c 'market: "' sneaker/assets/js/sneaker-data.js

13

Months of drops

Sneaker

The release calendar spans 13 distinct months, from November 2025 through November 2026.

grep -o 'release: "[0-9]\{4\}-[0-9]\{2\}' sneaker/assets/js/sneaker-data.js | sort -u | wc -l

19

Can editions

Water

The water brand ships 19 numbered can editions, each with its own name, tagline, accent colour and written description.

grep -c 'src: "images/v[0-9]' liquid/assets/js/liquid-data.js

10

Glass bottles

Water

Alongside the cans sit 10 premium glass editions, each addable to a working in-browser cart at a fixed $4.99.

grep -c 'src: "images/glass/' liquid/assets/js/liquid-data.js

16,252

Padel courts mapped

Padel

The padel atlas holds 8,486 clubs in 108 countries, and between them they carry 16,252 individual courts.

python3 -c 'import json;print(sum(x[7] for x in json.load(open("padel/facilities.json"))["rows"]))'

Source https://www.openstreetmap.org/

1,748

NYC restaurants on file

New York City

THE TABLE lists 1,748 New York restaurants across all five boroughs and 213 named neighbourhoods.

python3 -c 'import json;print(len(json.load(open("nyc/restaurants.json"))["rows"]))'

524

Michelin-starred rooms

Yum

Yum’s world collection holds 524 Michelin-starred restaurants — 256 with one star, 129 with two and 139 with three.

python3 -c 'import json;print(sum(1 for r in json.load(open("yum/restaurants.json")) if r["michelin_stars"]))'

518

Kosher rooms registered

Yum

A second, separate register of 518 kosher restaurants in 100 towns across 27 countries sits beside the main collection.

python3 -c 'import json;print(len(json.load(open("yum/kosher.json"))))'

24

Display typefaces

Logo Lab

The Logo Lab sets a wordmark in any of 24 display families, each requested at the single weight that actually exists on Google Fonts rather than a browser-synthesised bold.

python3 -c 'import re;t=open("dina/assets/js/type.js").read();i=t.index("var FONTS = [");print(len(re.findall(r"^ F\(",t[i:t.index(chr(10)+" ];",i)],re.M)))'

39

Filter looks

Multipics

Multipics carries 39 named colour looks — VINTAGE, FROST, MATRIX, TOXIC, VOID and the rest — any of which can be laid over a multi-layer photographic composite.

python3 -c 'import re;t=open("multi/multi.php").read();i=t.index("const normalFilters = [");print(len([x for x in re.findall(r"name: \"([^\"]+)\"",t[i:t.index("];",i)]) if x != "OFF"]))'

20

Measured palettes

NEXUS

NEXUS carries ten colour themes and authors each one twice — once for paper, once for dark — because a colour that reads on black is washed out on white.

python3 -c 'import re;t=open("nexus/js/nexus.js").read();i=t.index("var THEMES = [");print(len(re.findall(r"id: \x27",t[i:t.index(chr(10)+"];",i)]))*2)'

13

Canvas transitions

Media Wall

The Media Wall’s slideshow moves between collages with 13 canvas transitions, including a pixel dissolve, a psychedelic warp and three levels of heavy digitisation.

python3 -c 'import re;t=open("mediawall/mediawall.php").read();i=t.index("const transitions = [");print(len([x for x in re.findall(r"type: \"(\w+)\"",t[i:t.index(chr(10)+"];",i)]) if x != "none"]))'

8

Colour modes

Illusion

Illusion paints its nested particle spheres by one of eight colour modes — rainbow, position, time, neon, pastel, fire, mono and galaxy — and the mode is what makes the depth flip easy to trigger.

python3 -c 'import re;print(len(re.search(r"modes=\[([^\]]*)\]",open("illusion/index.html").read()).group(1).split(",")))'

10,911

Objects propagated

ORBIT

ORBIT ships the catalogue itself — 21 stations, 157 naked-eye objects and 10,733 Starlink satellites, 10,911 in all — and propagates every one of them in the browser with the SGP4 model the elements are published for. No server does the orbital arithmetic.

python3 -c 'import json;t=open("orbit/assets/js/orbit-data.js").read();d=json.loads(t[t.index("{"):t.rindex("}")+1]);print(sum(v.count(chr(10)+"1 ") for v in d["groups"].values()))'

Source https://celestrak.org/NORAD/elements/

157

Bright enough to see

ORBIT

Of everything ORBIT tracks, 157 are on Celestrak’s visual list: the objects a person standing outside can actually see cross the sky without a telescope.

python3 -c 'import json;t=open("orbit/assets/js/orbit-data.js").read();d=json.loads(t[t.index("{"):t.rindex("}")+1]);print(d["groups"]["visual"].count(chr(10)+"1 "))'

Source https://celestrak.org/NORAD/elements/gp.php?GROUP=visual

242

Countries drawn

ATLAS

Every country ATLAS draws has its area computed spherically from the very polygons on screen rather than copied from a table, so the figure and the shape can never disagree — Nepal comes out at 147,194 km² against the 147,181 the country publishes, which is 0.009% out.

python3 -c 'import json;t=open("atlas/assets/js/atlas-data.js").read();print(len(json.loads(t[t.index("{"):t.rindex("}")+1])["countries"]))'

Source https://www.naturalearthdata.com/

217

Countries reporting

ATLAS

Twenty-one World Bank indicators reach 217 of the 242 countries ATLAS draws, each stamped with the year that country last reported it. The 25 the Bank does not carry get no block at all rather than a grid of dashes.

python3 -c 'import json;t=open("atlas/assets/js/atlas-data.js").read();print(sum(1 for c in json.loads(t[t.index("{"):t.rindex("}")+1])["countries"] if c.get("ind")))'

Source https://data.worldbank.org/

216

Dial combinations

Clockwork

Clockwork draws its clock faces from scratch on canvas: 18 dials named after real horological types and 12 hand shapes, which is 216 different ways for a clock on the page to look.

python3 -c 'import re;t=open("clockwork/assets/js/app.js").read();f=t.index("var FACES");h=t.index("var HANDS");print(len(re.findall(r"\{ id: \x27",t[f:h]))*len(re.findall(r"\{ id: \x27",t[h:h+40000])))'

85

Cities on the road desk

Traffic

The traffic desk watches 85 cities on six continents, and every single one of them has its own administrative boundary drawn on the map — no tile provider and no mapping library anywhere on the page.

grep -c "^ id: '" traffic/assets/js/cities.js

40

Named lunar features

The Moon

The moon on the page is drawn, not stencilled: 27 named seas, 7 ray craters and 6 dark-floored craters are each projected onto the disc from their real selenographic latitude and longitude.

python3 -c 'import re;t=open("assets/js/moon-core.js").read();print(sum(len(re.findall(r"\[\x27",re.search(r"var "+k+r" = \[(.*?)\];",t,re.S).group(1))) for k in ("MARIA","RAYS","DARKC")))'

177

Country outlines

Traffic

The world map behind the traffic desk is 177 country polygons from Natural Earth, encoded as delta rings and stroked by hand onto a canvas rather than fetched as map tiles.

grep -c '{ n: "' traffic/assets/js/world.js

Source https://www.naturalearthdata.com/

410

Hand-written stories

Joke Vault

The joke vault holds 410 long-form story jokes, ten in every category, all written by hand — the generator builds one-liners and never touches these.

grep -c '^ "' joke/stories.js

24

Comic forms

Joke Vault

The joke engine composes from 24 named comic forms — the definition, the rule of three, false precision, the epitaph, the whodunnit — and a shape meter throws away the attempts that score badly.

sed -n '/^ var FORMS = {/,/^ };/p' joke/engine.js | grep -c "^ [a-zA-Z_]*: function"

20

Languages, written native

Joke Vault

480 of the jokes are written out in 20 languages — 24 per language, retold as the joke would be told there rather than machine-translated, with Hebrew, Arabic, Persian and Yiddish laid out right-to-left.

grep -c "endonym: '" joke/native.js

31

Opening book lines

Chess

The chess bots open out of a book of 31 catalogued positions, so the first eight plies vary instead of replaying one line every game.

sed -n '/^ var BOOK = {/,/^ };/p' chess/chess-app.js | grep -c "':"

4

Vegas house decks

Cards

Cards ships four period casino decks — Golden Nugget filigree, Bellagio guilloche, Flamingo deco, the Sands atomic — with every face, pip and back drawn as SVG and not one card image in the folder.

sed -n '/^ const DECKS = {/,/^ };/p' cards/index.html | grep -cE "^ [a-z]+: *\{"

26

Leagues on the wire

EZ Score

EZ Score reads twenty-six leagues from a single keyless public scoreboard — the American majors and their college divisions, eleven football leagues and the European cups, ATP and WTA — and renders only what comes back.

python3 -c 'import re;t=open("ezscore/assets/js/ezscore.js").read();i=t.index(" var LEAGUES = {");print(len(re.findall(r"^ [a-z0-9]+: *\{[^}]*path: *\x27",t[i:t.index(chr(10)+" };",i)],re.M)))'

Source https://site.api.espn.com/apis/site/v2/sports/

20

Rule test positions

Backgammon

The backgammon move generator ships with a self-test of twenty hand-checked positions — entering from the bar, the dance, the forced higher die, overshoot bearing off, the hit — that anyone can run from the browser console.

grep -o '/\* C[0-9]* —' backgammon/assets/js/app.js | wc -l

33,144

Zip centroids shipped

Rx.Luxury

Rx.Luxury carries the latitude and longitude of every one of America’s 33,144 ZIP Code Tabulation Areas in the page itself, so "clinicians within ten miles of 11201" is arithmetic rather than a network call.

python3 -c 'import re;print(len(re.search(r"var BLOB = \"([^\"]*)\"",open("rxluxury/js/zips.js").read()).group(1))//18)'

Source https://www.census.gov/geographies/reference-files/time-series/geo/gazetteer-files.html

1,248

Symptom descriptions

Rx.Luxury

The condition table is written in 1,248 distinct clinical phrases — not "chest pain" but "crushing, squeezing or heavy pain or pressure in the centre of the chest".

python3 -c 'import json;t=open("rxluxury/js/conditions.js").read();s=t[t.index("=",t.index("var CONDITIONS ="))+1:].strip();d=json.loads(s[:s.rindex("]")+1]);print(len({y for x in d for y in x["symptoms"]}))'

932

Red-flag lines

Rx.Luxury

Every one of the 219 conditions carries its own written red flags — 932 lines in all — and they are printed above the candidate list, never inside it.

python3 -c 'import json;t=open("rxluxury/js/conditions.js").read();s=t[t.index("=",t.index("var CONDITIONS ="))+1:].strip();d=json.loads(s[:s.rindex("]")+1]);print(sum(len(x["redFlags"]) for x in d))'

219

Conditions on the table

Rx.Luxury

The symptom checker narrows against a hand-built table of 219 conditions across eight body systems, 38 of them graded as emergencies.

python3 -c 'import json;t=open("rxluxury/js/conditions.js").read();s=t[t.index("=",t.index("var CONDITIONS ="))+1:].strip();print(len(json.loads(s[:s.rindex("]")+1])))'

85

Symptom chips

Rx.Luxury

The whole checker is driven by 85 plain-English symptom chips spread over 22 body regions, and tapping the drawn figure lights the same chip.

python3 -c 'import json,re;t=open("rxluxury/js/conditions.js").read();S=json.loads(re.search(r"var SYMPTOMS = (\{.*?\});"+chr(10),t,re.S).group(1));print(sum(len(v) for v in S.values()))'

75

NUCC specialty strings

Rx.Luxury

Each condition names the exact federal NUCC taxonomy strings that find the right kind of doctor — 75 of them across the primary field and the also-see list — because the NPPES register matches on that wording and nothing else.

python3 -c 'import json;t=open("rxluxury/js/conditions.js").read();s=t[t.index("=",t.index("var CONDITIONS ="))+1:].strip();d=json.loads(s[:s.rindex("]")+1]);print(len({x["taxonomy"] for x in d if x.get("taxonomy")}|{a for x in d for a in x.get("alsoSee",[])}))'

Source https://npiregistry.cms.hhs.gov/

8

Federal facility files

Rx.Luxury

The facilities desk searches eight separate federal registers — hospitals, health centres, rural clinics, surgery centres, dialysis, hospice, home health and skilled nursing — each with its own field names checked on arrival.

sed -n '/var FACILITY_KINDS = \[/,/^ \];/p' rxluxury/js/app.js | grep -c 'id: "'

Source https://data.cms.gov/provider-data/

16

MRI phantom slices

Rx.Luxury

The imaging lab can generate its own 16-slice, 256x256 Shepp-Logan MRI study in the browser from ten ellipses, so there is something to scroll and window without uploading a real scan.

python3 -c 'import re;print(re.search(r"for \(let z = 0; z < (\d+); z\+\+\)",open("rxluxury/js/dicom.js").read()).group(1))'

18

Surveillance queries

Hanta

Hanta’s outbreak archive sweeps eighteen different news queries in parallel every run — by agency, by country, by strain and by syndrome — and keeps up to a thousand deduplicated articles.

grep -c 'news.google.com/rss/search?q=' hanta/HantaProbe.js

165

Domains for sale

Buy Domains

The sales desk lists a portfolio of 165 real domain names, spread across 45 different endings.

python3 -c 'import io,re;print(len(re.findall(r"\"[^\"]+\"",re.search(r"var ALL_DOMAINS\s*=\s*\[(.*?)\];",io.open("buydomains/index.html",encoding="utf-8").read(),re.S).group(1))))'

110

TLDs checked at once

Domain Names

The domain checker sweeps a name across 110 top-level domains, and tags each one as ICANN-contracted or not — because a "not found" from a country registry cannot honestly be read as "free".

python3 -c 'import re;t=open("domains/assets/js/app.js").read();b=t[t.index("var TLD_SETS = {"):t.index("/* The registrable suffix")];print(len(dict.fromkeys(re.findall(r"\x27\.([a-z.]+)\x27",b))))'

75

Sites swept worldwide

Network

The global test times a real request to each of 75 named websites — six to twenty-five per continent, across all six.

python3 -c 'import re;b=re.search(r"var CONTINENTS = \[(.*?)"+chr(10)+r" \];",open("network/assets/js/app.js").read(),re.S).group(1);print(len(re.findall(r"\x27[a-z0-9.-]+\.[a-z]{2,}\x27",b)))'

50

Wire actions

Chat

A chat room speaks to its server in 50 named actions — post, react, poll, vote, pin, edit, redact, knock, admit, kick, lock, guard and the rest.

python3 -c 'import re;print(len(set(re.findall(r"[$]action\s*===\s*.([a-z]+).",open("chat/chat-sync.php").read()))))'

42

Ports named

TAP

TAP reads a raw packet capture in the browser and turns 42 port numbers into named services, deciding port 443 by protocol — UDP is QUIC, TCP is HTTPS.

python3 -c 'import re;print(len(re.findall(r"(\d+): *\"",re.search(r"PORTMAP = \{(.*?)"+chr(10)+r" \};",open("tap/assets/js/tap-engine.js").read(),re.S).group(1))))'

29

Accented domains

Buy Domains

29 of the names on the sales desk are internationalized — ė.tv, ü.art, zöe.co, láb.com — domains written outside the plain ASCII alphabet.

python3 -c 'import io,re;print(len([n for n in re.findall(r"\"([^\"]+)\"",re.search(r"var ALL_DOMAINS\s*=\s*\[(.*?)\];",io.open("buydomains/index.html",encoding="utf-8").read(),re.S).group(1)) if any(ord(c)>127 for c in n)]))'

2,000

Certificates per read

Paper Trail

Paper Trail reads the public Certificate Transparency log for any domain you name and draws its newest 2,000 certificates on a timeline, one lane per issuing authority.

python3 -c 'import re;print(re.search(r"[$]cap *= *(\d+);",open("papertrail/ct-proxy.php").read()).group(1))'

Source https://crt.sh/

197

Builds compared

The Build Record

The changelog was not written from memory — 197 shipped archives were opened and compared to the one before them, file by file, on the checksum of every file inside.

python3 -c 'import re,json;t=open("changelog/assets/js/builds.js").read();b=re.sub(r"([{,])(\w+):","\\1"+chr(34)+"\\2"+chr(34)+":",t[t.index("[",t.index("window.LABS_BUILDS")):t.rindex("]")+1]);print(len(json.loads(b)))'

2,238

Source changes

The Build Record

Across those builds, 2,238 individual source files were changed — counting only a property’s own JavaScript, CSS, PHP and Python, with shared chrome and restamped HTML deliberately left out.

python3 -c 'import re,json;t=open("changelog/assets/js/builds.js").read();b=re.sub(r"([{,])(\w+):","\\1"+chr(34)+"\\2"+chr(34)+":",t[t.index("[",t.index("window.LABS_BUILDS")):t.rindex("]")+1]);print(sum(x["w"] for x in json.loads(b)))'

48

Properties born

The Build Record

48 property directories that did not exist at the start of the record existed by the end of it, each one dated to the exact build it first appeared in.

python3 -c 'import re,json;t=open("changelog/assets/js/builds.js").read();b=re.sub(r"([{,])(\w+):","\\1"+chr(34)+"\\2"+chr(34)+":",t[t.index("[",t.index("window.LABS_BUILDS")):t.rindex("]")+1]);print(len({n for x in json.loads(b) for n in x["n"]}))'

82

Desks worked on

The Build Record

82 different properties received deep source work somewhere in the run, so the record names not just how much changed but exactly which desk it changed on.

python3 -c 'import re,json;t=open("changelog/assets/js/builds.js").read();b=re.sub(r"([{,])(\w+):","\\1"+chr(34)+"\\2"+chr(34)+":",t[t.index("[",t.index("window.LABS_BUILDS")):t.rindex("]")+1]);print(len({p for x in json.loads(b) for p in x["p"]}))'

128

Framed in turn

In-House

The walk opens 128 of the site’s own properties one at a time in a frame on the page — every property served from this host except the page you are standing on.

python3 -c 'import json,re;d=json.loads(re.search(r"\[[\s\S]*\]",open("assets/js/portfolio-data.js").read()).group(0));print(len([p for p in d if p.get("label") and not p.get("external") and not p.get("stripRoom")])-1)'

Source assets/js/portfolio-data.js

6

Frame verdicts

In-House

A property that will not load in the frame never leaves a blank rectangle: the walk has six separately named verdicts and prints the matching sentence plus a working link.

python3 -c 'import re;Q=chr(39);t=open("in-house/assets/js/app.js").read();print(len(set(re.findall("why = "+Q+"([^"+Q+"]+)"+Q,t))|set(re.findall("failed"+chr(92)+"([^,]+, "+Q+"([^"+Q+"]+)"+Q,t))))'

22

Citable clauses

Legal

The legal page hands out 22 permanent addresses — thirteen numbered clauses plus nine sub-clauses — so a specific sentence can be cited rather than the whole document.

python3 -c 'import re;t=open("legal/index.html").read();print(len(re.findall(r"<section class=\"band[^\"]*\" id=\"[a-z0-9-]+\"",t))+len(re.findall(r"<h3 id=\"[a-z0-9-]+\"",t)))'

5

Places data leaves

Legal

The privacy clause names exactly five things on the whole site that send anything out of your browser, and says what each one sends and why.

python3 -c 'import re;t=open("legal/index.html").read();i=t.index("id=\"privacy-sends\"");print(len(re.findall(r"<li>",t[i:t.index("</ul>",i)])))'

7

Wiring surfaces

Shipwright

The method holds that a property exists on seven surfaces or not at all — register, site index, generator, menus, sitemaps, page head and cache stamps.

python3 -c 'import re;t=open("shipwright/index.html").read();i=t.index("id=\"wiring\"");print(len(re.findall(r"class=\"sv__c\"",t[i:t.index("</section>",i)])))'

8

Traps disarmed

Shipwright

Eight traps that were actually sprung on this estate are written down on the page so nobody springs them a second time.

python3 -c 'import re;t=open("shipwright/index.html").read();i=t.index("id=\"lore\"");print(len(re.findall(r"<li>",t[i:t.index("</section>",i)])))'

7,661

Listings on the wheel

Stocks

The stocks desk carries every common listing on the NYSE and Nasdaq taken from the SEC’s own exchange file, and its roulette button draws one of the 7,661 completely at random — shipping trusts, closed-end funds and SPAC warrants included.

python3 -c 'import json;t=open("stocks/universe.js").read();print(len(json.loads(t[t.index("["):t.rindex("]")+1])))'

Source https://www.sec.gov/files/company_tickers_exchange.json

10

Rinse components

Stocks

The Rinse Detector scores how much you are overpaying for an entry from ten independent measurements — stretch, position, heat, room, volatility, friction, lockout, effort, passenger and valuation — re-weighted for each of four holding horizons, with every horizon’s weights summing to exactly 100.

python3 -c 'import re;print(len(re.findall(r"\w+:",re.search(r"d7: *\{([^}]*)\}",open("stocks/assets/js/rinse.js").read()).group(1))))'

15

GAAP tags tried

Stocks

Six financial figures are pulled straight out of SEC XBRL filings rather than a vendor summary, and because US GAAP has renamed several of them, each figure is tried against up to four different tag names — fifteen in all — with the freshest filing winning rather than the first tag that answers.

python3 -c 'import re;print(len(re.findall(r"\x27[A-Z][A-Za-z]+\x27",re.search(r"[$]CONCEPTS = \[(.*?)"+chr(10)+r"\];",open("stocks/sec-proxy.php").read(),re.S).group(1))))'

Source https://data.sec.gov/api/xbrl/

26

Hero pitches dealt

Investor

The investor data room re-deals its own sales pitch on every load: twenty-six complete hero variants — each with its own badge, headline, subheadline, trust line and valuation line — drawn from two pools, one weighted and one uniform, and never the same one twice in a row.

The hero pool lives in the data room’s own page script rather than in a data file this tree can count, and no grep over it separates a variant from the machinery that deals one. It is the last figure on the band without a command, and it is flagged here rather than given a number nothing can check.

31

Currencies named

Money

The FX board quotes thirty-one currencies against any base you pick off the European Central Bank’s daily reference fixings, keyless and read by the page itself, with a code the feed sends that isn’t on the list shown by its code alone rather than guessed at.

python3 -c 'import re;print(len(re.findall(r"[A-Z]{3}:",re.search(r"var NAMES=\{(.*?)\};",open("money/assets/js/app.js").read(),re.S).group(1))))'

Source https://www.ecb.europa.eu/stats/eurofxref/

66

News wires read

News Hub

The News Hub pulls from 66 distinct named news feeds — eleven Washington desks, twenty-three world bureaux weighted Europe-first, and the business, AI and technology wires — and files every story it gets into a desk itself.

grep -c "=> 'https" newshub/feed-sources.php

63

Market instruments

News Hub

One batched request fills the console’s market boards with 63 live instruments: 39 world stock indices across 31 countries, 18 front-month commodity futures, and 6 benchmark yields and currency pairs.

python3 -c 'import re;t=open("newshub/console-classic-paper.html").read();print(sum(len(re.findall(r"s: \x27",t[t.index("const "+k+" = ["):t.index(chr(10)+" ];",t.index("const "+k+" = ["))])) for k in ("MARKETS","COMMODITIES","RATESFX")))'

22

Artist themes

News Hub

The live news console can be repainted in 22 named palettes — Dalí, Van Gogh, Chagall, Picasso, Klimt, Hokusai among them — and each one is re-inked for both the paper and the dark edition.

python3 -c 'import re;t=open("newshub/console-classic-paper.html").read();i=t.index("const ARTIST_THEMES = [");print(len(re.findall(r"\{ *id:",t[i:t.index(chr(10)+"];",i)])))'

1,073

Domains in the probe pool

Tech News

The network probe on the tech desk carries a hand-curated pool of 1,073 distinct high-traffic domains, spanning every populated continent, and times the handshake to whichever of them it is pointed at.

python3 -c 'import re;print(len(re.findall(r"\"[^\"]+\"",re.search(r"const sitePool = \[(.*?)"+chr(10)+r"\];",open("newsy/sites-global-1000.js").read(),re.S).group(1))))'

20

Named grounds

Newsy

Newsy lets the reader set the page’s own ground from a ten-step ladder in each edition — 20 named greys in all, from Chalk down to Stone and from Void up to Steel, each with its ink contrast solved for it.

python3 -c 'import re;print(len(re.findall(r"\[\x27[A-Z][a-z]+\x27, *\x27#",open("newsysite/newsy2.js").read())))'

51

State outlines drawn

Press Room

The Press Room draws all fifty states and the District of Columbia as traced outlines, then asks the Library of Congress one separate faceted question per state to ink a single word across the map.

grep -c '^{n:"' press/assets/js/states.js

Source https://www.naturalearthdata.com/

174

Years of newsprint

Press Room

A word typed into the Press Room is searched across 174 years of digitised American newspaper pages, 1789 to 1963, the full span the Library’s Chronicling America collection covers.

python3 -c 'import re;m=re.search(r"v<(\d{4})\|\|v>(\d{4})",open("press/assets/js/app.js").read());print(int(m.group(2))-int(m.group(1)))'

Source https://www.loc.gov/collections/chronicling-america/

2,421

Artists named

Song

Across those five eras the register names 2,421 distinct artists, from doo-wop groups to techno producers.

python3 -c 'import glob,json,re;print(len({x[0] for f in sorted(glob.glob("song/*.llc/assets/data/*.js")) for x in json.loads(re.search(r"=(\[.*\]);?\s*$",open(f).read().strip(),re.S).group(1))}))'

90

Synth patches

Songbuilder

Songbuilder’s instrument cabinet holds 90 hand-tuned patches spread over nine synthesis engines, and not one of them is a sample.

python3 -c 'import re;t=open("songbuilder/js/voices.js").read();i=t.index(" var P = [");print(len(re.findall(r"\{ n: \x27",t[i:t.index(chr(10)+" ];",i)])))'

24

Singers and rappers

Songbuilder

Songbuilder can put words to a track in 24 different deliveries: thirteen rap voices paced against the bar and eleven sung ones, each with its own octave, vibrato and rasp.

python3 -c 'import re;t=open("songbuilder/js/lyrics.js").read();print(sum(len(re.findall(r"\{ k:\x27",t[t.index("var "+k+" = ["):t.index(chr(10)+" ];",t.index("var "+k+" = ["))])) for k in ("RAP","SING")))'

44

Audio-reactive modes

VIZZI

VIZZI draws what it hears 44 different ways — thirty-four of its own, from a triggered oscilloscope and a vectorscope to metaballs, a cellular automaton ruled by the spectrum and the real moon, plus the ten reactors lifted whole out of the audio deck.

python3 -c 'import re,glob;n=sum(len(re.findall(r"M\.register\(\{",open(f).read())) for f in glob.glob("vizzi/assets/js/*.js"));t=open("vizzi/assets/js/audiomodes.js").read();print(n-1+len(re.findall(r"^ \[\x27[a-z]{2,4}\x27, \x27",t,re.M)))'

46

Formats read from bytes

OmniFile

The converter identifies forty-six file formats from their magic bytes rather than their names, so a mislabelled file is caught before anything is converted.

python3 -c 'import re;t=open("omnifile/assets/js/app.js").read();i=t.index(" var TYPES = {");print(len([x for x in re.findall(r"^ ([a-z0-9]+): *\{",t[i:t.index(chr(10)+" };",i)],re.M) if x != "unknown"]))'

112

Filename extensions

OmniFile

One hundred and twelve distinct filename extensions are mapped to the format they claim to be, so the tool can say when a name and its bytes disagree.

python3 -c 'import re;t=open("omnifile/assets/js/app.js").read();i=t.index(" var TYPES = {");b=t[i:t.index(chr(10)+" };",i)];print(len({e for m in re.finditer(r"ext: \[([^\]]*)\]",b) for e in re.findall(chr(39)+"([^"+chr(39)+"]+)"+chr(39),m.group(1))}))'

62

EXIF fields named

Glass

The photograph reader carries its own TIFF walker that decodes sixty-two EXIF, IFD0 and GPS tags by name — camera, lens, serial numbers, timestamps and coordinates — entirely inside the page.

python3 -c 'import re;t=open("glass/assets/js/app.js").read();print(sum(len(re.findall(r"\x27[A-Za-z]",re.search(r"var "+k+r"=\{(.*?)\};",t,re.S).group(1))) for k in ("TAGS_IFD0","TAGS_EXIF","TAGS_GPS")))'

57

Lookalike letters

Watermark

Fifty-seven Cyrillic, Greek, Armenian and Cherokee characters are mapped to the Latin letters they impersonate, which is how a spoofed domain in a pasted sentence gets caught.

python3 -c 'import re;t=open("watermark/assets/js/app.js").read();print(len(re.findall(r"\x27[^\x27]+\x27 *:",re.search(r"var CONFUSABLE = \{(.*?)"+chr(10)+r"\};",t,re.S).group(1))))'

12

Handoff destinations

Search

Whatever is in the search box can be handed off in one tap to twelve other places — seven AI assistants and five classic engines — in a new tab, with nothing stored.

python3 -c 'import re;t=open("search/assets/js/app.js").read();print(sum(len(re.findall(r"\{ n: \x27",re.search(r"var "+k+r" = \[(.*?)\];",t,re.S).group(1))) for k in ("AI","ENG")))'

10

Search lenses

Search

Ten named lenses — places, books, art, news, social, images, academic, code and two more — each ask a different subset of the feeds, so the same query gets a different panel of sources.

sed -n '/^ var LENSES = {/,/^ };/p' search/assets/js/app.js | grep -cE "^ [a-z]+: *"

6

Filename match modes

File Search

A filename can be matched six different ways against your own disk — contains, starts, ends, exact, regular expression and fuzzy — with nothing ever leaving the machine.

grep -c 'data-name-mode="' filesearch/index.html

4,853

Family nodes

Tongues

Every language on the page shows its full descent, drawn from a tree of 4,853 named family and subgroup nodes.

python3 -c 'import json;t=open("tongues/assets/js/languages.js").read();print(len(json.loads(t[t.index("{"):].rstrip().rstrip(";"))["nodes"]))'

Source https://glottolog.org/

26

Deepest family chain

Tongues

The longest classification chain in the register descends twenty-six named levels before it reaches a single language.

python3 -c 'import json;t=open("tongues/assets/js/languages.js").read();d=json.loads(t[t.index("{"):].rstrip().rstrip(";"));print(max(len(r[3].split("/")) for r in d["rows"] if r[3]))'

Source https://glottolog.org/

1,239

Marked extinct

Tongues

1,239 of the languages in the register carry Glottolog’s ‘extinct’ endangerment status, and the page inks each one on its map.

python3 -c 'import json;t=open("tongues/assets/js/languages.js").read();d=json.loads(t[t.index("{"):].rstrip().rstrip(";"));e=d["aes"].index("extinct");print(sum(1 for r in d["rows"] if r[8]==e))'

Source https://glottolog.org/

636

Free works shelved

The Stacks

The Stacks is a hand-checked reading list of 636 books and recordings, every one legitimately free at the source it links to.

grep -o 'u:"' 007/assets/js/library-data.js | wc -l

304

Source domains

The Stacks

Those entries point at 304 different hosts — university pages, standards bodies, conference archives and authors’ own sites — not one publisher’s catalogue.

grep -o 'u:"https\?://[^/"]*' 007/assets/js/library-data.js | sed 's|.*//||' | sort -u | wc -l

7

Relation drawers

Word Lab

Word Lab opens seven drawers on one word at once: perfect rhymes, near rhymes, sounds-like, means-like, adjectives for it, and the words most often found before and after it.

python3 -c 'import re;print(len(re.findall(r"\{",re.search(r"var DRAWERS=\[(.*?)\];",open("wordlab/assets/js/app.js").read(),re.S).group(1))))'

60

Seed words

Word Lab

The deal button draws from a curated list of sixty words, picked because their drawers come back full.

python3 -c 'import re;print(len(re.findall(r"\x27[a-z]+\x27",re.search(r"var SEEDS=\[(.*?)\];",open("wordlab/assets/js/app.js").read(),re.S).group(1))))'

27

Cover motifs

Books

A book the library holds no photograph of gets a drawn cover instead, its emblem chosen from twenty-seven line motifs by the words in the title itself.

python3 -c 'import re;t=open("books/assets/js/app.js").read();i=t.index("var GEN_MOTIFS = {");print(len(re.findall(r"^ [a-z]+: *.<",t[i:t.index(chr(10)+"};",i)],re.M)))'

Run them

Nothing here needs a key or a network.

Every command reads files that ship with the site. Open a shell at the root of the tree — the directory holding index.html and assets/ — and paste one. It prints one number. If that number is not the one printed beside it on this page, the figure is wrong and the figure is what gets fixed.

To run all of them at once: python3 tools/mkfigures.py --check. It executes every command against the tree, compares each answer to the figure the register carries, and exits non-zero on the first one that disagrees — then re-renders this table into both editions and fails if what is shipped is not what the register now says. It reads the tree, never a file it wrote itself, so it cannot agree with itself into a wrong answer.

Python 3 and a POSIX shell are the whole toolchain for this table: nothing on this page is compiled, and nothing has to be installed to run a command off it. The estate as a whole is not quite free of a build step, and it is better to say so here than to let somebody find it — eight pages still pull the Tailwind CDN at runtime, the News Hub’s classic console links a purged Tailwind stylesheet in both its editions, and the root package.json still declares the npm script that builds one. Not one figure in this table depends on any of that.

About

Why a figure carries its own arithmetic.

A number written into a page is true on the day it is written and unverifiable every day after. It does not decay loudly: the register gains a property, a data file gains rows, a table is rebuilt with more conditions in it, and the sentence beside the old number goes on reading perfectly well. Nothing on the page can tell you it has stopped being true.

Writing the command down changes what the number is. It stops being a claim and becomes a derivation, and a derivation can be re-run. The first run of these commands moved eighteen figures on this estate — the clock wall was reading 64 against a register of a hundred cities, the symptom checker was reading 148 conditions against a table of 219, and the “90-second refresh” the front page had promised for a year was one desk’s cadence and nobody else’s.

What cannot be recomputed says so. A valuation is a judgement. Ownership is a fact about registrar accounts. The Library of Congress’s page count is the Library’s, not ours. The national debt lives at the Treasury and moves every business day. Those figures carry prose instead of a command, and the prose is printed on this page beside them — because a gap where a command should be reads as an oversight, and a sentence saying “no command can produce this, and here is why” reads as what it is. Questions to labs@labs.llc.