~ $ cd projects/architecture && cat README.md
How this site is built
The code of this site is written by an AI — Claude, in Claude Code — from what I ask of it. I say what the site is and how it should be made; it writes the program, and the tests.
The picture is that program. Every ball is a file, every box a folder of the frame or a feature, and every arrow a box that needs another. It is read from the source by the TypeScript compiler, at every commit that changed it. Play it and watch it grow; tangle it to see the same files with nobody saying where anything goes, and untangle it again. Put the tests in, and every file with something in it to run that no test imports directly is drawn as a ring. Point at a file, and its own arrows come out: what it needs, and what needs it.
src features platform features/adventure → platform/browser: 1 features/adventure → platform/markdown: 2 features/adventure → platform/plugin: 2 features/air-quality → platform/browser: 2 features/air-quality → platform/charts: 1 features/air-quality → platform/data: 3 features/air-quality → platform/plugin: 2 features/allFeatures.ts → features/adventure: 1 features/allFeatures.ts → features/air-quality: 1 features/allFeatures.ts → features/architecture: 1 features/allFeatures.ts → features/developer-meetings: 1 features/allFeatures.ts → features/fibergochi: 1 features/allFeatures.ts → features/first-network: 1 features/allFeatures.ts → features/fish-market: 1 features/allFeatures.ts → features/headline: 1 features/allFeatures.ts → features/lagoon: 1 features/allFeatures.ts → features/maze: 1 features/allFeatures.ts → features/next-word: 1 features/allFeatures.ts → features/packages: 1 features/allFeatures.ts → features/portfolio: 1 features/allFeatures.ts → features/post-tests: 1 features/allFeatures.ts → features/rocket: 1 features/allFeatures.ts → features/sky: 1 features/allFeatures.ts → features/technical-debt: 1 features/allFeatures.ts → features/theme: 1 features/allFeatures.ts → features/thesis-results: 1 features/allFeatures.ts → features/weather: 1 features/allFeatures.ts → features/world: 1 features/allFeatures.ts → platform/plugin: 1 features/architecture → platform/browser: 2 features/architecture → platform/markdown: 2 features/architecture → platform/plugin: 2 features/developer-meetings → platform/browser: 2 features/developer-meetings → platform/charts: 1 features/developer-meetings → platform/plugin: 1 features/fibergochi → platform/browser: 2 features/fibergochi → platform/markdown: 1 features/fibergochi → platform/plugin: 2 features/first-network → platform/browser: 1 features/first-network → platform/markdown: 1 features/first-network → platform/plugin: 2 features/first-network → platform/random: 2 features/fish-market → platform/browser: 1 features/fish-market → platform/markdown: 1 features/fish-market → platform/plugin: 2 features/fish-market → platform/random: 1 features/headline → platform/plugin: 1 features/lagoon → platform/browser: 1 features/lagoon → platform/markdown: 1 features/lagoon → platform/plugin: 2 features/maze → platform/browser: 1 features/maze → platform/plugin: 2 features/next-word → platform/browser: 1 features/next-word → platform/markdown: 1 features/next-word → platform/plugin: 3 features/packages → platform/browser: 1 features/packages → platform/data: 2 features/packages → platform/plugin: 2 features/portfolio → platform/plugin: 1 features/post-tests → platform/browser: 1 features/post-tests → platform/markdown: 2 features/post-tests → platform/plugin: 2 features/rocket → platform/browser: 4 features/rocket → platform/plugin: 2 features/rocket → platform/program: 4 features/sky → features/world: 2 features/sky → platform/plugin: 1 features/technical-debt → platform/charts: 2 features/technical-debt → platform/plugin: 1 features/technical-debt → platform/program: 2 features/theme → platform/plugin: 1 features/theme → platform/shell: 2 features/thesis-results → platform/plugin: 1 features/weather → platform/browser: 2 features/weather → platform/charts: 2 features/weather → platform/data: 3 features/weather → platform/plugin: 2 features/world → platform/browser: 3 features/world → platform/plugin: 2 features/world → platform/random: 1 main.ts → features/allFeatures.ts: 1 main.ts → platform/browser: 8 main.ts → platform/flags: 2 main.ts → platform/plugin: 1 main.ts → platform/shell: 1 platform/browser → platform/content: 6 platform/browser → platform/data: 1 platform/browser → platform/flags: 1 platform/browser → platform/page: 4 platform/browser → platform/plugin: 3 platform/browser → platform/program: 12 platform/browser → platform/shell: 10 platform/data → platform/markdown: 1 platform/flags → platform/markdown: 1 platform/flags → platform/shell: 2 platform/page → platform/content: 7 platform/page → platform/markdown: 4 platform/page → platform/shell: 2 platform/plugin → platform/content: 2 platform/plugin → platform/data: 1 platform/plugin → platform/flags: 1 platform/plugin → platform/program: 4 platform/plugin → platform/shell: 2 platform/program → platform/shell: 1 platform/shell → platform/content: 4 platform/shell → platform/markdown: 5 main allFeatures sky adventure air-quality architecture developer-meetings fibergochi first-network fish-market headline lagoon maze next-word packages portfolio post-tests rocket technical-debt theme thesis-results weather world browser plugin flags page program data shell markdown content charts random main.ts features/allFeatures.ts features/sky/browser/followTurning.ts features/sky/browser/Starfield.ts features/sky/skyFeature.ts features/adventure/ADVENTURE_ICONS.ts features/adventure/Adventure.ts features/adventure/adventureFeature.ts features/adventure/adventureStill.ts features/adventure/browser/mountAdventure.ts features/adventure/Charted.ts features/adventure/englishWorld.ts features/adventure/LIFE.ts features/adventure/originalWorld.ts features/adventure/pixelIcon.ts features/adventure/renderAdventure.ts features/adventure/renderMap.ts features/adventure/renderSeen.ts features/adventure/World.ts features/air-quality/airQualityFeature.ts features/air-quality/aStation.ts features/air-quality/browser/mountNo2.ts features/air-quality/flatSums.ts features/air-quality/no2AnnualMeans.ts features/air-quality/no2Colour.ts features/air-quality/no2Grid.ts features/air-quality/no2ScaleTop.ts features/air-quality/No2Selection.ts features/air-quality/no2Source.ts features/air-quality/No2Station.ts features/air-quality/no2Stations.ts features/air-quality/no2Still.ts features/air-quality/renderNo2Figure.ts features/air-quality/renderNo2Heatmap.ts features/air-quality/renderNo2Years.ts features/air-quality/tallies.ts features/air-quality/wholeRecord.ts features/architecture/architectureFeature.ts features/architecture/architectureStill.ts features/architecture/Body.ts features/architecture/boxCycles.ts features/architecture/boxOf.ts features/architecture/browser/ArchitectureScene.ts features/architecture/browser/mountArchitecture.ts features/architecture/Coverage.ts features/architecture/coverageOf.ts features/architecture/decodeHistory.ts features/architecture/encodeHistory.ts features/architecture/graphOf.ts features/architecture/History.ts features/architecture/importsOf.ts features/architecture/Layout.ts features/architecture/layoutArchitecture.ts features/architecture/Metrics.ts features/architecture/metricsOf.ts features/architecture/onlyTypes.ts features/architecture/reachedByTests.ts features/architecture/readGraph.ts features/architecture/readSources.ts features/architecture/renderArchitectureCaption.ts features/architecture/renderArchitectureFigure.ts features/architecture/renderArchitectureSvg.ts features/architecture/renderMetricsSparks.ts features/architecture/Snapshot.ts features/architecture/SourceGraph.ts features/architecture/springTowards.ts features/architecture/tangleStep.ts features/architecture/valueExportsOf.ts features/developer-meetings/browser/heatGrid.ts features/developer-meetings/browser/mountDeveloperMeetings.ts features/developer-meetings/developerMeetingsFeature.ts features/developer-meetings/featureSizeScale.ts features/developer-meetings/simulateMeetings.ts features/developer-meetings/summariseMeetings.ts features/developer-meetings/WORK_WEEK.ts features/fibergochi/browser/mountFibergochi.ts features/fibergochi/Fibergochi.ts features/fibergochi/fibergochiFeature.ts features/fibergochi/FibergochiState.ts features/fibergochi/fibergochiStill.ts features/fibergochi/ODDS.ts features/fibergochi/readKept.ts features/fibergochi/renderFibergochi.ts features/fibergochi/Sprite.ts features/first-network/browser/mountLetters.ts features/first-network/firstNetworkFeature.ts features/first-network/firstReader.ts features/first-network/glyphs.ts features/first-network/LetterReader.ts features/first-network/lettersStill.ts features/first-network/Network.ts features/first-network/readOwnShapes.ts features/first-network/renderLetters.ts features/first-network/Shape.ts features/first-network/shapeProblem.ts features/fish-market/Bidder.ts features/fish-market/browser/mountFishMarket.ts features/fish-market/DutchAuction.ts features/fish-market/fishMarketFeature.ts features/fish-market/fishMarketStill.ts features/fish-market/fixedMargin.ts features/fish-market/Lot.ts features/fish-market/Market.ts features/fish-market/marketMargin.ts features/fish-market/openAuction.ts features/fish-market/ownBidder.ts features/fish-market/ownBidderSource.ts features/fish-market/planner.ts features/fish-market/randomLots.ts features/fish-market/renderFishMarket.ts features/fish-market/Sale.ts features/fish-market/Standing.ts features/fish-market/theTable.ts features/fish-market/Turn.ts features/fish-market/vicente.ts features/fish-market/wanda.ts features/headline/browser/mountHeadline.ts features/headline/Headline.ts features/headline/headlineFeature.ts features/headline/headlineRounds.ts features/headline/headlines.ts features/headline/shuffled.ts features/headline/typewriterFrames.ts features/lagoon/alone.ts features/lagoon/browser/mountLagoon.ts features/lagoon/Fisher.ts features/lagoon/lagoonFeature.ts features/lagoon/lagoonStill.ts features/lagoon/ownFisher.ts features/lagoon/ownFisherSource.ts features/lagoon/playRound.ts features/lagoon/renderLagoon.ts features/lagoon/Round.ts features/lagoon/starters.ts features/lagoon/theLagoon.ts features/lagoon/titForTat.ts features/lagoon/Tournament.ts features/lagoon/Week.ts features/maze/browser/mountMaze.ts features/maze/Cell.ts features/maze/describeWay.ts features/maze/FIRST.ts features/maze/growMaze.ts features/maze/JavaRandom.ts features/maze/Maze.ts features/maze/mazeFeature.ts features/maze/mazeStill.ts features/maze/OPEN.ts features/maze/renderMaze.ts features/maze/wayOut.ts features/next-word/browser/mountNextWord.ts features/next-word/closestWord.ts features/next-word/nextWordFeature.ts features/next-word/NextWordModel.ts features/next-word/nextWordStill.ts features/next-word/pickWord.ts features/next-word/renderNextWord.ts features/next-word/sentenceOf.ts features/next-word/smallCorpus.ts features/next-word/withTemperature.ts features/next-word/wordsOf.ts features/packages/browser/mountPackages.ts features/packages/NpmDownloads.ts features/packages/npmPackages.ts features/packages/npmSource.ts features/packages/packageNotes.ts features/packages/packagesFeature.ts features/packages/packagesStill.ts features/packages/renderPackages.ts features/portfolio/portfolioFeature.ts features/post-tests/browser/mountPostTests.ts features/post-tests/compilePost.ts features/post-tests/examplePosts.ts features/post-tests/postTestsFeature.ts features/post-tests/postTestsStill.ts features/post-tests/renderCompiledPost.ts features/rocket/browser/mountRocket.ts features/rocket/browser/mountStarMap.ts features/rocket/destinations.ts features/rocket/firstShip.ts features/rocket/nearStars.ts features/rocket/projectStars.ts features/rocket/renderVoyages.ts features/rocket/rocketFeature.ts features/rocket/rocketProgram.ts features/rocket/saidSpeed.ts features/rocket/saidTime.ts features/rocket/saidTonnes.ts features/rocket/Ship.ts features/rocket/shipOf.ts features/rocket/voyage.ts features/rocket/whereAt.ts features/technical-debt/simulateTechnicalDebt.ts features/technical-debt/technicalDebtFeature.ts features/technical-debt/technicalDebtProgram.ts features/theme/browser/BrowserTheme.ts features/theme/browser/mountThemeToggle.ts features/theme/browser/settleTheme.ts features/theme/Theme.ts features/theme/ThemeChoice.ts features/theme/themeCommand.ts features/theme/themeFeature.ts features/thesis-results/graphMatchingRuns.ts features/thesis-results/machines.ts features/thesis-results/renderRuns.ts features/thesis-results/thesisResultsFeature.ts features/weather/aWeatherStation.ts features/weather/browser/mountWeather.ts features/weather/countDays.ts features/weather/daysPerYear.ts features/weather/firstQuestion.ts features/weather/histogramOf.ts features/weather/questionInWords.ts features/weather/renderDaysCalendar.ts features/weather/renderWeatherFigure.ts features/weather/steadyYear.ts features/weather/twoHalves.ts features/weather/weatherFeature.ts features/weather/weatherPresets.ts features/weather/WeatherQuestion.ts features/weather/weatherSource.ts features/weather/WeatherStation.ts features/weather/weatherStations.ts features/weather/weatherStill.ts features/weather/weatherVariables.ts features/world/acrossFace.ts features/world/browser/favicon.ts features/world/browser/headerWorld.ts features/world/browser/mountHeaderWorld.ts features/world/browser/mountWorlds.ts features/world/browser/spinPlanet.ts features/world/emptyWorld.ts features/world/filters/colourise.ts features/world/filters/fractalise.ts features/world/filters/sea.ts features/world/filters/temperatures.ts features/world/generateWorld.ts features/world/growWorld.ts features/world/icosahedron.ts features/world/latitudeOfVertex.ts features/world/Mesh.ts features/world/meshOf.ts features/world/nearestVga.ts features/world/PIPELINE.ts features/world/positionOf.ts features/world/quantizeToVga.ts features/world/radiusOfFace.ts features/world/renderSphere.ts features/world/SphereOptions.ts features/world/SphereRaster.ts features/world/subdivide.ts features/world/TextCell.ts features/world/textCells.ts features/world/textWorldHtml.ts features/world/turning.ts features/world/vgaPalette.ts features/world/withMesh.ts features/world/World.ts features/world/worldFeature.ts features/world/WorldRecipe.ts platform/browser/appsOf.ts platform/browser/askProgram.ts platform/browser/BrowserFlags.ts platform/browser/carriedLine.ts platform/browser/el.ts platform/browser/ModelContext.ts platform/browser/modelContextHere.ts platform/browser/mountApps.ts platform/browser/mountNavigation.ts platform/browser/mountProgram.ts platform/browser/mountTerminal.ts platform/browser/offerTools.ts platform/browser/PROGRAM_ASKED.ts platform/browser/PROGRAM_RAN.ts platform/browser/siteInBrowser.ts platform/browser/sourceLineOf.ts platform/browser/watchOnScreen.ts platform/plugin/commandsOf.ts platform/plugin/Feature.ts platform/plugin/programStill.ts platform/plugin/Signal.ts platform/plugin/stillsOf.ts platform/flags/Flag.ts platform/flags/flagsCommand.ts platform/flags/flagsInAddress.ts platform/flags/FlagStore.ts platform/page/APPEARANCE.ts platform/page/bookSchema.ts platform/page/declaredAppearance.ts platform/page/fillStills.ts platform/page/formerAddresses.ts platform/page/isHere.ts platform/page/placeholderDisc.ts platform/page/renderDocument.ts platform/page/renderMain.ts platform/page/renderRedirect.ts platform/program/aProgram.ts platform/program/ChoiceParameter.ts platform/program/commandLineOf.ts platform/program/initialValues.ts platform/program/inputSchemaOf.ts platform/program/NumberParameter.ts platform/program/Parameter.ts platform/program/Program.ts platform/program/programCommand.ts platform/program/ProgramRun.ts platform/program/readOptions.ts platform/program/settleValues.ts platform/program/sliderOf.ts platform/program/Values.ts platform/program/wordOf.ts platform/data/layeredJson.ts platform/data/missingYears.ts platform/data/refreshSource.ts platform/data/renderSourceLine.ts platform/data/socrataUrl.ts platform/data/YearlySource.ts platform/shell/Command.ts platform/shell/CommandHistory.ts platform/shell/commands/cat.ts platform/shell/commands/cd.ts platform/shell/commands/clear.ts platform/shell/commands/find.ts platform/shell/commands/grep.ts platform/shell/commands/help.ts platform/shell/commands/ls.ts platform/shell/commands/pwd.ts platform/shell/commands/siteCommands.ts platform/shell/editLine.ts platform/shell/Outcome.ts platform/shell/parseCommandLine.ts platform/shell/plainTextOf.ts platform/shell/promptPath.ts platform/shell/resolvePath.ts platform/shell/Shell.ts platform/shell/suggest.ts platform/shell/typedLines.ts platform/markdown/escapeHtml.ts platform/markdown/flow/layoutFlow.ts platform/markdown/flow/parseFlow.ts platform/markdown/flow/renderFlow.ts platform/markdown/highlight.ts platform/markdown/renderBars.ts platform/markdown/renderInline.ts platform/markdown/renderMarkdown.ts platform/markdown/renderMath.ts platform/markdown/slugOf.ts platform/content/nameOf.ts platform/content/Page.ts platform/content/pageShowing.ts platform/content/parentOf.ts platform/content/parseFrontMatter.ts platform/content/routeOf.ts platform/content/Site.ts platform/charts/barChart.ts platform/charts/CHART.ts platform/charts/chartFrame.ts platform/charts/ChartLabels.ts platform/charts/fixed.ts platform/charts/lineChart.ts platform/charts/niceTicks.ts platform/charts/Series.ts platform/charts/yearBars.ts platform/charts/yearFrame.ts platform/charts/yearLine.ts platform/random/randomOf.ts c862b80 27 September 2026 — The sixty-four rooms drawn as rooms: walls where there is no way out, a door that wants a key marked until it is opened, what each room holds now as a picture, the player standing in it, and the life left as hearts. The game's own words and its status line are as it printed them366 files in 34 boxes, 156 tests · 209 arrows between boxes, 325 of all 802 onto a type · a test reaches 188 of the 316 files with something to test · no boxes in a circle files arrows between boxes
The arrows point one way
A rule written in a document is a rule that can be missed, by a person or by an AI. So the rules of this code are not in a document: they are tests it has to pass. architecture.test.ts reads the same graph this picture draws, and fails when
a file outside a folder named browser/ touches the page, the frame imports a feature, two boxes need each other round in a circle, a file exports more than one value, a feature is missing from the diagrams in ARCHITECTURE.md.
The dashed arrows need only a type: a box that depends on an interface, not on what implements it. That is dependency inversion, and it is what lets a feature be removed by removing its folder.
8 September 2026
On its first day the source was sorted by kind of file: a core and a ui. On the second it was sorted by what the site is — a frame, and the features standing in it — in one commit: The folders say what the site is, not what kind of file each one holds . Drag the slider back to it and watch the files cross.