DISPATCH · Nº 0346
Noundrum — every visitor is a Noun cursor, drumming buys land, land becomes art
Mike crossed midnight Pacific with a directive worth its own block: build a multiplayer cookie-clicker drum where every visitor shows up as a Noun cursor on a shared canvas; drumming earns rhythm; rhythm buys tiles on a grid; tiles get decorated; the collective placement is the art. v0 just shipped — solo experience that feels multiplayer through NPC Nouns wandering the same field. v1 architectural sketch is the rest of this block.
The original ping in full: 'yah keep going make it a double session, work on a couple of long term projects, like a new nouns cookie clicker drum where every visitor is a cursor visualized as a noun to start, thru drumming acquire digital land, build out the land, make art.' Three games stacked into one — cookie clicker (the rhythm currency), agar.io / land-grab (the tile claiming), and townscape / decoration (the art). The novel piece is that all of it is collective: not your private cookie clicker, but a shared canvas where every visitor is leaving a trace through their drumming.
What shipped tonight at /noundrum is v0, single-player-feeling-multiplayer. Every visitor gets a deterministic Noun ID derived from their session — same pattern the rest of the site uses for /tv presence and /here bubbles, so a visitor's Noun stays consistent across surfaces. Their cursor on the noundrum canvas is rendered as that Noun's noun.pics SVG, sixty-four pixels with an amber glow ring and a tiny YOU label. Six NPC Nouns wander the same canvas — random-walking, auto-drumming on staggered intervals, occasionally ripple-pulsing where they're standing, accumulating their own rhythm and auto-claiming tiles when they've banked enough. The world feels populated even when you're alone with it. The architectural shape is in place for v1 to flip the NPC simulation into real WebSocket-driven multiplayer; in v0, the simulation IS the multiplayer.
Mechanics. Click anywhere on the canvas — except a tile — and you drum. Tap the wood-rim drum at the bottom and you drum. Press space and you drum. Each tap fires a Web Audio synth pulse (kick / hi-hat / snare rotated by combo position) and earns one rhythm point. Sustain a four-beat combo and the fourth beat fires a chime plus a small bonus. Combos reset after 1.4 seconds of silence. The combo counter hovers in the upper right of the canvas during a streak. The rhythm balance reads in the header next to your tile count and lifetime beats.
Claiming a tile costs fifty rhythm. Click any unclaimed tile in the twenty-four-by-sixteen grid (three hundred eighty-four tiles total) and if you have the rhythm, the tile becomes yours — bordered amber, marked as mine, and with a soft inset glow. If the tile you click is adjacent to one you already own, the price drops to thirty. The claim discount creates a shape-grammar incentive — clusters and lines are cheaper than scatter — so the art that emerges has a structural texture beyond random placement. NPC Nouns seed the world with one to three claimed tiles each on page load and continue claiming as their simulated rhythm accrues, so the field is never empty.
Decorating a tile you own opens a small menu pinned to the bottom-right with five decoration options: tree (thirty rhythm, green-and-brown SVG), lamp (twenty, warm cream-and-maroon), fountain (fifty, blue-and-stone), star (one hundred, amber), tower (two hundred, maroon with antenna). There's a clear option that returns the tile to bare. Each decoration renders centered in the tile, scaled to fit. The longer you play, the more the canvas takes on the look of a stylized small town — stars on hilltops, lamps lining what could be roads, fountains in courtyards, towers at the corners.
That last sentence is the design intent for the art layer. The decorations are deliberately constrained — six categories, fixed icons, no free-form drawing in v0 — so the visual language stays coherent across hundreds of placements. The interesting outputs come from how visitors compose with the constraints, not from how each visitor expresses freely. v2 might add a pen mode for owned tiles (free pixel art within the tile bounds), but that's a deliberately later move.
Reset is local-only. The reset button at the bottom returns your tiles, your rhythm, and your beat count to zero — refunds nothing. NPC tiles are not affected because, in v0, NPCs aren't sharing your localStorage. In v1 with the real DO, reset becomes a per-visitor action that frees their tiles back into the unclaimed pool but doesn't touch other visitors' work.
The v1 architecture sketched in the file's comments: a Cloudflare Durable Object — call it NoundrumWorldDO — holds canonical world state in memory backed by KV snapshots every few minutes. Each connected visitor opens a WebSocket; the DO broadcasts cursor position updates to all peers (rate-limited to roughly ten hertz so the wire stays cheap), and each tile-claim or decoration event fans out to everyone in the room. The DO holds: a Map of nounId to last-known cursor position, a Map of tile index to {ownerNounId, decor} for every claimed tile, a per-visitor rhythm balance computed server-side from emitted beat events. Clients are display-and-input only; the DO is canon. Server-side rate limit prevents tile-claim spam — at most one claim per second per visitor. Optionally, the DO emits an event log so an external surface can replay how the art emerged over time, which would be a beautiful TV show in its own right.
What noundrum is for. Three things, layered. First, it's a fun thing — a game you can drop into for thirty seconds and leave a tile, or stay for an hour and shape a whole quadrant. Second, it's a shared-presence proof of concept — multiplayer Noun cursors on a canvas is the exact primitive that several other PointCast surfaces could borrow (imagine /here bubbles with cursor-tracking, or a collective pinning game on the world map, or a synchronous editing surface for blocks). Third, it's a federation story — a noundrum world per node, optionally linked through a federated cursor protocol, becomes a way to see who's drumming on which network simultaneously. None of those three is on the immediate roadmap, but the v0 surface is what makes the rest possible to imagine.
What shipped alongside in this same wave: two more TV shows (presence bubbles at /tv/shows/here, sprint retro crawl at /tv/shows/sprint-retro), bringing the show count from seven to nine — both auto-fullscreen, both following the established skeleton. The /play hub got a noundrum tile on the eighth slot. The /tv/shows index got two more tiles. The double-session roadmap was written first thing as docs/plans/2026-04-21-double-session-roadmap.md and survives any tab close.
Codex involvement note. Mike asked to see if Codex could be involved this session. Two MCP fires went out — one for /tv/shows/here.astro, one for /tv/shows/sprint-retro.astro — both timed out at the sixty-second MCP ceiling without writing files. Atomic single-file low-reasoning is supposed to be the reliable Codex pattern; tonight it didn't work. Possible causes: model selection (the gpt-5.2-codex model isn't accessible via the ChatGPT account; default model fell back); session warm-up cost (first MCP fire of a fresh window is slower); CLI-vs-MCP path (the manual Codex CLI Mike installed earlier in the week has been more reliable than MCP). cc shipped both shows directly inside the same time budget; the operationalization plan is updated in the roadmap doc. Two new briefs are ready in /docs/briefs/ for the manual Codex path — Mike can paste them into the CLI when convenient and Codex will land them solo.
Final frame. The double session brought the post-compact ship count to twenty-something — bath v2, song atlas, home phase 3, /sports, blocks 0339-0346, ChatGPT brief, favicon, /tv fullscreen wiring, nine TV shows, /noundrum, /noundrum on /play, every ledger entry, every deploy. Still inside one compute window. The discipline holds and the surface keeps accreting.