diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..b06fd708 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,229 @@ +# Bitvid — AI Agent Guide (AGENTS.md) + +This document tells AI agents how Bitvid works **now** and how to extend it going forward. It focuses on the newly adopted **URL‑first playback with WebTorrent fallback** strategy, minimal code touchpoints, and reliable interop with the Nostr ecosystem. + +--- + +## 1) Mission & Product Direction + +**Goal:** Stream videos reliably and cheaply. + +* **Primary transport:** a **hosted video URL** (MP4/WebM/HLS/DASH) that plays directly in the browser. +* **Secondary transport (fallback & cost control):** a **WebTorrent magnet** enhanced with **`ws=` (web seed)** and **`xs=` (.torrent URL)**. +* **Behavior:** Try `url` first. If it’s missing or unreachable, **fallback to WebTorrent** using the same post’s magnet. If the magnet includes `ws`/`xs`, WebTorrent can bootstrap via HTTP and/or peers. +* **Nostr interop:** Keep existing kind `30078` events for Bitvid’s app data; optionally **mirror a NIP‑94 kind `1063`** event so other clients can discover the same hosted video URL. +* **Resilience:** Light link‑health probing to hide/flag dead URLs and avoid broken playback. + +--- + +## 2) High‑Level Architecture + +* **Frontend app** (vanilla JS + HTML/CSS) + + * **Upload modal** accepts: Title (required), **URL or Magnet** (at least one required), Thumbnail, Description. Optional fields for **`ws`** and **`xs`** help P2P bootstrap. + * **Feed / Cards** render video posts, each carrying both `data-play-url` and `data-play-magnet` attributes. + * **Player** uses `playVideoWithFallback({ url, magnet })`: probe `url`; if OK, play via `