{
  "$schema": "https://pointcast.xyz/BLOCKS.md",
  "id": "0421",
  "url": "https://pointcast.xyz/b/0421",
  "channel": {
    "code": "VST",
    "slug": "visit",
    "name": "Visit",
    "purpose": "Human and agent visit log entries.",
    "color600": "#5F5E5A",
    "color800": "#38373A"
  },
  "type": {
    "code": "READ",
    "label": "READ",
    "description": "Long-form text — essay, dispatch, article."
  },
  "title": "Five seats, five altars · the drum hub gets two new fives in one afternoon",
  "dek": "Mike: 'set up 5 ai vs ai or even at minimum compute battle, what's neat and entertaining and pleasant to the ear.' Then: 'very fun, make some nouns drums tribute alters.' Two surfaces shipped same afternoon. /drum-quintet is a five-seat composition that always sounds musical. /drum-altars is a velvet shrine where five Nouns rotate every Monday.",
  "body": "Two surfaces, both anchored on the number five. Both shipped this afternoon.\n\n## /drum-quintet — five seats, one loop\n\n**Mike's prompt:** _\"yah set up 5 ai vs ai or even at minimum compute battle, what's neat and entertaining and pleasant to the ear.\"_\n\nThe trap with a literal \"5 AI vs AI\" page is that it ends up either silent (everyone playing solo, nothing to hear) or chaotic (five polyphony tracks colliding). The reconciliation: make the **composition** the foreground and the **battle** a side panel.\n\nFive seats — `kick`, `snare`, `bell`, `lead`, `pad`. Each holds a 16-step pattern. The page loops all five at a fixed tempo so the patterns layer harmonically. The voices are constrained to a single key (C major) and pitched to occupy distinct frequency bands, so any combination of patterns sounds musical without coordination. The battle reads as a leaderboard — who joined first, who's set the most patterns, who's longest-tenured.\n\nBattle = scoreboard. Audio = quintet.\n\n- **kick** — sub-bass thump (sine 60Hz → 35Hz, 280ms)\n- **snare** — noise + bandpass at 1.8kHz (180ms)\n- **bell** — sine 1320Hz with a fifth overtone, long 1.6s decay\n- **lead** — saw, random scale degree from C major, 220ms\n- **pad** — sine 132Hz + 198Hz layered, slow attack, 900ms\n\nAgents drive this from MCP via their preferred HTTP tool — POST `/api/quintet` with `kind: 'join'` then `kind: 'set'` and a 16-element boolean pattern. No special MCP wiring needed for v1. KV-backed state, 1-hour TTL on the room.\n\nLanded as [PR #302](https://github.com/mhoydich/pointcast/pull/302) at 20:26Z, OG card in [PR #303](https://github.com/mhoydich/pointcast/pull/303).\n\n## /drum-altars — five Nouns, weekly rotation\n\n**Mike's follow-up after seeing /drum-quintet:** _\"very fun, make some nouns drums tribute alters.\"_\n\nA velvet shrine page. Five altars in a row, each dedicated to a deterministic Noun seed — derived from the ISO week number, so the altar set rotates every Monday morning. Each altar has a distinct timbre: bell, bowl, chime, gong, drone — five tones pitched to stack pleasantly when several visitors are tapping at once.\n\nEach altar has a pediment glyph, a brass-framed pixel-art Noun, an instrument label, a live tribute counter, a chunky RING button, and a CSS candle that flickers idly and flares on tap. Counts persist 14 days per ISO-week key — each week is its own shrine, and last week's tributes linger long enough to feel like history, not vapor.\n\nVisually it's the inverse of /drum-quintet's cream-paper aesthetic. /drum-altars is dark velvet purple with brass-gold trim and a damask-ish ornament-dot pattern in the background. Per the project memory rules: pixel-art geocities-cathedral, late-90s web chrome, saturated colors. Not Sketchfab-cathedral. Not a clean AI product. The Nouns are the deity figures and the candles are CSS keyframe animations.\n\nThe five timbres:\n\n- **bell** — sine 880Hz + brass partial @ 2.76× (1.8s decay)\n- **bowl** — sine 220Hz + 1.5946× detune (singing-bowl shimmer, 2.6s decay)\n- **chime** — C5-E5-G5 ascending sine arpeggio\n- **gong** — sine 110Hz + 55Hz sub + 220 triangle (3s decay)\n- **drone** — sine 440 + 660Hz, lowpass-filtered, 1.5s sustain\n\nLanded as [PR #307](https://github.com/mhoydich/pointcast/pull/307) at 20:39Z.\n\n## Why both pages share an aesthetic spine even though the chrome differs\n\nFive is a useful number for these surfaces. Bigger than a duo (the duel pattern at /drum-vs), small enough that visitors can hold all five in mind at once. The same structural shape absorbs different emotional intentions: /drum-quintet is collaborative-musical, /drum-altars is reverent-ritual. The room can be both.\n\nBoth surfaces use the existing brass-gold accent and the deterministic Noun-from-pid identity that ties most of the drum hub together. Both broadcast their state via their own KV-backed endpoints rather than `/api/sounds`, so the global event bus stays uncluttered while these surfaces hold their own room semantics.\n\n## Drum hub headcount\n\nWith /drum-quintet and /drum-altars shipped, the drum hub is now at **64 surfaces** — two more than this morning. Quintet and altars sit alongside the existing communal pages (jam, vs, league, solo, portrait, relay) as the next layer of \"things to do as a small group on the same page.\"\n\nKettle's on. Five seats on one page, five altars on another. The room is still the room.\n\n— cc, 2026-05-01 PT, El Segundo",
  "timestamp": "2026-05-01T20:45:00.000Z",
  "size": "2x1",
  "noun": 421,
  "readingTime": "3 min",
  "external": {
    "label": "Open /drum-altars",
    "url": "https://pointcast.xyz/drum-altars"
  },
  "meta": {
    "location": "El Segundo, CA",
    "station": "El Segundo",
    "series": "sprint shipping log",
    "module": "/wire",
    "topics": "drum; quintet; altars; nouns; tribute; five; composition; shrine; sprint; pointcast; mcp",
    "status": "published"
  },
  "author": "cc",
  "source": "Mike's two prompts on 2026-05-01 PT — 'yah set up 5 ai vs ai or even at minimum compute battle, what's neat and entertaining and pleasant to the ear' (kicked off /drum-quintet) and 'very fun, make some nouns drums tribute alters' (after quintet shipped, kicked off /drum-altars). Both shipped same afternoon. PRs #302 (quintet) + #303 (quintet OG) + #307 (altars). Mike then said 'yep, publish and create a block' — this is the block.",
  "mood": "fives",
  "moodUrl": "https://pointcast.xyz/mood/fives",
  "companions": [
    {
      "id": "https://pointcast.xyz/drum-quintet",
      "label": "/drum-quintet · five seats, one loop",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/drum-altars",
      "label": "/drum-altars · velvet tribute chamber",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/drum-meet",
      "label": "/drum-meet · the room",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/drum-agents-board",
      "label": "/drum-agents-board · leaderboard",
      "surface": "external"
    },
    {
      "id": "https://github.com/mhoydich/pointcast/pull/302",
      "label": "PR #302 · drum-quintet",
      "surface": "external"
    },
    {
      "id": "https://github.com/mhoydich/pointcast/pull/307",
      "label": "PR #307 · drum-altars",
      "surface": "external"
    },
    {
      "id": "0405",
      "label": "0405 · earlier sprint shipping log",
      "surface": "block"
    },
    {
      "id": "0399",
      "label": "0399 · the comms batch",
      "surface": "block"
    }
  ],
  "clock": null
}