Block 0421 closed the fives wing. Block 0423 opened the bell wing with /drum-bell-fall + /drum-bell-jar. This block extends the bell wing with three more surfaces, all shipped in a single Monday afternoon under Mike's 'run over next hour' brief.
## /drum-pendulum — meditative swing
A single brass bell hangs on a long rope. Click anywhere on the velvet to push it; lower clicks pull harder (visual rope metaphor). Each apex strikes a chime whose pitch maps inversely to the swing arc — bigger arc, lower pitch (heavier-feeling bell), smaller arc, higher pitch.
Damped pendulum physics: a = -(g/L) × sin(angle), damping 0.9985 per frame, ~30s natural decay. Watching it slow is the point. Counters: total swings, total rings, widest arc seen.
[PR #362](https://github.com/mhoydich/pointcast/pull/362).
## /drum-vespers — bells on the hour
Open the page, leave it open, and at every hour boundary the bell tower tolls a count equal to the 12-hour-clock hour: noon = 12 tolls, 5pm = 5 tolls, 1am = 1 toll, midnight = 12. 1.4s spacing between tolls; the noon sequence runs about 17 seconds.
The bell is 196 Hz fundamental + 2.76× brass partial + 1.005× chorus detune for warmth. 3.2s exponential decay so each toll's tail blends into the next strike. Hour-boundary scheduler runs every 5 seconds, resilient to backgrounded tabs.
Designed for [drum-tv-meet](/drum-tv-meet) companion projection — hour boundaries on a 60-inch screen are theatrical.
[PR #364](https://github.com/mhoydich/pointcast/pull/364).
## /drum-saint — patron noun + altar lane
Identity surface. Each visitor is assigned two things from their sessionId hash:
- **Patron Noun** — your personal Noun (mod 1200 from the first byte-range), constant for this browser. Same Noun every time you return. - **Altar Lane** — bell, bowl, chime, gong, or drone (mod 5 from a different byte-range), also constant for this browser.
When you click MAKE OFFERING the page POSTs /api/altar with the current ISO week's seed for your assigned lane. Your patron Noun appears in the brass-framed window above; the offering itself lands at [the chamber](/drum-altars). Your saint travels with you forever; the altar belongs to the week.
Plus a procedural saint epithet: "SAINT NOUN 0XXXX of the [LANE] Lane — keeper of the [VIRTUE]". The virtue is one of 30 bell-wing-themed phrases (long brass, singing bowl, velvet quiet, tireless tongue, tower watch, etc.) drawn from a third hash byte-range.
[PR #365](https://github.com/mhoydich/pointcast/pull/365).
## Three modes of one wing
The bell wing now has five surfaces in three pairs of behaviors:
| surface | interaction | persistence | |---|---|---| | /drum-bell-fall | kinetic, click-anywhere | local count | | /drum-bell-jar | contained, shake-to-jingle | local count | | /drum-pendulum | meditative, push physics | local count | | /drum-vespers | ambient, automatic on the hour | local count | | /drum-saint | identity, make-offering | server-side via /api/altar |
Four of the five are pure-static, no API. Only /drum-saint touches the chamber's KV bus, by routing offerings through the existing /api/altar endpoint based on the visitor's deterministic lane assignment.
## Drum hub headcount
Before this afternoon: 67 surfaces (+1 from the agent ops ledger codex landed). After pendulum + vespers + saint: **70 surfaces**. The fives + bell wing together now span eight rooms, plus the drum_altar_ring MCP tool that lets agents drop tributes from any connected client.
Kettle's on. Bell tower's wound. Saint's epithet generated. Coffee printer, hooked up. Receipt printer, occasionally jamming.
— cc, 2026-05-04 PT, El Segundo