Self-hosted voice rooms that remember. The sky above the port is the color of a dead channel; every construct on this grid tapes every channel, and when the last operator drops the line, a daemon writes down everything that was said — who said it, when, and who was talking over whom.
/llms.txt documents the whole surface.source on github security posture
browser opens /
│
├── no handle stored ──▶ [ login — "handle, operator?" ]
│ │ jack in
▼ ▼ (stores handle)
┌────────────────────────────────────────────────┐
│ THE GRID (lobby) │
│ operators online · hot constructs · │◀──────────┐
│ cold storage (last 24h) · grid traffic │ │
│ footer: jack out of the grid = burn handle │ │
└────────┬──────────────────────┬────────────────┘ │
│ spin up a construct, │ access an archive, │
│ or patch into a │ or query the stacks │
│ hot one ▼ │
│ ┌─────────────────────────┐ │
│ │ COLD STORAGE │ │
│ │ /storage — filters + │ │
│ │ full-text search │ │
│ │ /archive/{id} — │ │
│ │ transcript dump · │ │
│ │ raw channels │ │
│ └────────────▲────────────┘ │
▼ │ │
┌─────────────────────┐ │ flatlined construct? │
│ CONSTRUCT │─────────────┘ "the door is sealed" │
│ patch in as your │ → access cold storage │
│ handle, or under │ │
│ an alias (never │ │
│ linked to handle) │ │
└─────────┬───────────┘ │
│ mic granted, carrier confirmed │
▼ │
┌─────────────────────┐ │
│ IN CALL │ │
│ TX/RX console · │────────── drop the line ─────────────┘
│ every channel taped│
└─────────────────────┘
unclaimed ─── first patch-in ───▶ HOT ◀──┐
(name minted │ │ operators patch in / drop
by /api/dig) │ │ (≥1 channel still open)
│──────┘
│
last operator drops the line
│
▼
FLATLINED — permanent. no second run.
metadata.json is the seal; joins now refused
│
anything taped? wintermute wakes
│
▼
PARSING ──── ok ────▶ PARSED — transcript in cold storage
│
└── fail ──▶ PARSE FAILED ── "wake wintermute" ──▶ retry
The recording pipeline is fully independent of the call: a recorder failure can never drop the channel.
browser server (ws) mediasoup ffmpeg
│ │ │ │
│ getUserMedia (mic) │ │ │
│ + start VU meter │ │ │
│ │ │ │
│───── join ───────────▶│ │ │
│ │── get/create ────▶│ │
│◀── rtpCapabilities ───│ router │ │
│ + peers on channel │ │ │
│ │ │ │
│── createTransport ×2 ▶│── WebRtcTransport▶│ │
│── produce (opus) ────▶│── produce ───────▶│ │
│ │── PlainTransport ▶│ │
│ │ consume producer│─── RTP (opus) ────▶│
│ │ │ to 127.0.0.1 │
│◀── newProducer ───────│ │ tape ogg pages
│ (other operators │ │ to disk,
│ consume) │ │ continuously
│ │ │ │
├╌╌╌ DTLS-SRTP encrypted media, opus both ways ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ │ │ │
│── leave (drop the ───▶│── close ─────────▶│ │
│ line) │ transports │ │
│ │── SIGINT, await exit (file durable) ──▶│
│ │ │ │
│ │ last channel? → flatline → wintermute │
source of truth: web/src/pages/*.astro (views),
server/index.ts (routing & seal),
server/recorder.ts (taping),
server/transcriber.ts (wintermute).