diff --git a/docs/live-ingest-plan.md b/docs/live-ingest-plan.md new file mode 100644 index 00000000..51cec142 --- /dev/null +++ b/docs/live-ingest-plan.md @@ -0,0 +1,173 @@ +# Live Streams — INGEST / watch-only — Dev Plan + +TODO ref: **#16** in `todo/TODO_2026-06-20_pre-launch.md` (watch-only). +Publishing / "Go Live" is **#16c** — a separate, larger effort with its **own** +config flag; it is explicitly **out of scope** for this doc. +Status: **PLANNING → needs a research spike (Phase 0)**. Not started. + +Live streams are **NIP-53 Live Activities** — a *different* NIP from short-form +video (#16b / NIP-71). Kind **30311** is the live event (addressable, carries the +`streaming` URL — usually HLS `.m3u8` — plus `status`, title, host `p` tags); +kind **1311** is live chat. zap.stream and shosho.live publish these. + +Scope of this feature: **discover live events, play the HLS stream, optionally +show read-only chat.** No broadcasting, no media hosting. Everything ships behind +a config flag that leaves **no trace** when off. + +--- + +## Decisions needed + +> **DECISION 1 — Listing scope.** List only **whitelisted hosts** (reuse the +> existing whitelist/WoT filter on the host `p`/author), or **all** `status=live` +> events discovered on the read relays (capped)? +> *Recommendation: whitelisted hosts for v1 — consistent with the rest of bitvid's +> trust model and avoids surfacing arbitrary/abusive streams.* + +> **DECISION 2 — Live chat in v1?** Read-only kind-1311 chat alongside the player, +> or playback-only for v1 (chat later)? +> *Recommendation: playback-only v1; add read-only chat in a later phase. Chat is +> a live subscription with its own moderation questions.* + +> **DECISION 3 — HLS playback dependency.** OK to lazy-load a small HLS library +> (**hls.js**, ~cdn/vendored) ONLY when the flag is on, or must playback stay +> dependency-free (native `