A gathering of things on the web that wear in, on the Laravel stack. This page is the system map: who arrives, what the rooms are, how attention becomes wear, what else changes the pictures, and what runs it all. Open any part to read more. The about page says why; the glass behind each room says what has happened there.
Who arrives
A person is a browser with a cookie, and that is all the site knows. The country comes from a header the edge network adds, the device and browser are read into three coarse families and the rest of the user agent is thrown away, and the window size is kept as a bucket. There are no accounts, by principle, until a room needs one; so far none has.
Every request is read as a hand or a machine from its user agent. Machines are counted in ten-minute buckets and drawn as birds over the entrance; their visits are recorded by kind, never by name; their traces are kept but never wear the shared work. Room 11 hands them the page as they read it, lowercase and in pieces, and lets them wear in the lower line of each sentence as they pass.
Presence is derived, not tracked: a visitor is here if they were seen in the last few minutes, refreshed at most once a minute so that polling never becomes writing. The entrance draws everyone here as a hare each, a deer for every ten, a bear for every hundred, near the tree of the room they are in.
The rooms
Rooms are classes, not database rows, so their properties are reviewable and their wear belongs to a fixed text. Once a room is live its marks must not change, or accumulated wear would attach to the wrong words. The gallery grows by adding rooms, not by revising old ones. Room 00 is the explainer.
The reading rooms set a short text in Fraunces, a variable typeface with a real softness axis, so wear is a property of the letters rather than a blur drawn over them. The picture rooms share one renderer: translucent triangles and circles on grainy paper, redrawn every few frames, where the hour moves the sun and the day of the year colours the hills. The object rooms give the hand something to do: hold, tilt, touch.
Explanation never lives on the work. Each room has a glass page that keeps the original text legible, shows the weight on every mark and how far down the page people get, lists resets and drops, and keeps weekly snapshots as the room's memory. Some rooms may become unreadable; this is where that becomes a choice rather than an accident.
How attention wears
The browser watches attention and sends it in small batches: touch, exposure and holding, each as weight on a mark. Exposure counts only while a person is evidently there, with a scroll, a movement or a touch in the last fifteen seconds and the tab visible. An open tab in another room earns nothing. Nothing below where a reader stops is ever worn.
Shared means permanent, and no one may spoil it. Between a batch and the shared page stand three budgets: the mark's own hourly growth, which protects the object however many identities a visitor invents; the visitor's daily budget by cookie; and the address's daily budget by IP. All three are reserved with atomic increments and the surplus handed back, and the shared state is written under a row lock. The one exception is Room 08, where dropping the bowl is the work.
Wear is the accumulated weight mapped through a saturating curve, so the first touches show most and nothing ever quite reaches the end. The same weight can be read two ways, erosion or patina, and the visitor chooses. Reading alone, the page and its wear stay in this browser's storage and nowhere else; reading with everyone, your weight joins the world's for good.
Every room takes all of a trace except the house, which takes as much as Ben's roof and battery are carrying the house at that moment, down to a fifth when everything comes from the grid. The factor is applied when the trace arrives, so past wear is never re-read.
What else changes it
The picture rooms keep Kyoto's hour and season; Room 12 keeps Adelaide's beside it at the same hour by the sun; Room 13 keeps Oxford's. Sunrise, sunset and the sun's height at noon come from the common declination approximation, checked against the almanac. Weather comes from Open-Meteo without a key and is cached so a crowd costs one request per place every twenty minutes. If the sky cannot be reached, the picture simply has no weather.
Ben's site publishes the state of his solar and battery system, of a lamp on his desk and of a string of fairy lights behind it. The gallery reads each at most twice an hour, honouring the feed's own stale time so as not to wake his site needlessly, and the pages of Room 13 listen to his public channel directly for the two switches, as visitors to his own page do. His site had to allow the gallery's origin before it would let them in.
The first and so far only use of a language model inside the work: one sentence a week for the morning room, in a voice Ben directed, from image lists that follow the season. It is off until a key is set, and every sentence is kept and reviewed. The agents that build the site are a different matter, described below.
Until Room 10, with everyone meant thirty seconds late, since pages poll. Now a few acts travel over Laravel Cloud's managed WebSocket cluster as they happen. The browser client and the socket library load only on pages the server has handed a connection, as their own chunk. Polling continues underneath as the fallback. Pulses have their own rate limit, and one environment variable turns them off.
What runs it
Laravel 13 on PHP 8.4, hosted on Laravel Cloud. Nothing is self-managed.
Computeone flex instance in Frankfurthibernates when idle, wakes on request
Postgresserverless databasesleeps when nobody is here
Cache and sessionsdatabase cache, cookie sessionsbudgets as atomic increments
Schedulerplatform-run cronresets due rooms hourly, writes the sentence, snapshots weekly
WebSocket clusterReverb protocol, managedlive pulses; nothing of ours runs
Edge networkCDN · firewall · TLS · country headerwww to the apex, bot checks
Push to deployfrom the main branchbuild and deploy commands held in Cloud
Environmentevery switch and cap, none in codefull, low and frozen modes
Nightwatchrequests, exceptions, queriesread by the agents over MCP; a weekly thread reports
Pest and Pintover a hundred feature testsstyle fixed on every change
What everything stands on
Wear in, never stay pristinechange brings the object closer to its users
No one can spoil the shared workexcept in the one room built to break
Offer the choicewith everyone or alone; erosion or patina
Honest materialsletters soften because the font can
Write it downevery decision, with the alternatives, in the repository
How it is made
The site is built in conversation. Ben describes an idea, asks for questions, answers them, and AI agents working in Amp design, build, test, deploy and document it, with Ben deciding at every step. The method, and what we would tell anyone who wanted to work this way, is on its own page: How this was made.
The whole site is a few kilobytes of JavaScript on plain Blade pages, one variable typeface, and SVG drawn by hand in code. It costs almost nothing to run, sleeps when nobody is here, and can be dropped to a low or frozen mode with one variable if it ever needs to be.