overheard

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.

what it is

source on github security posture

the verb ladder

page & view navigation

 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│
 └─────────────────────┘

construct lifecycle — one way, no second run

 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

jack in — what happens on the wire

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).