# ECP-0068: Iroh Control To Web Directory Bridge Status: Implemented ## Decision Add a first-class bridge from iroh control gossip to the public website directory: 1. `ec-node control-bridge-web`: - subscribes to control announcements on `every.channel/control/v1`, - selects relay transports (`relay_url` + `broadcast_name` + `track_name`), - upserts them into the website API (`/api/stream-upsert`). 2. Extend the Cloudflare Worker API with: - `POST /api/stream-upsert` (optional bearer token auth), - `GET /api/public-streams` (read-only list for browsers). 3. Extend the web watcher UI to render `Live Now` from `/api/public-streams`, with one-click watch. ## Motivation The site currently requires manual broadcast names even when streams are already announced over iroh control gossip. This bridge makes `every.channel` discoverable from published control state and gives browser users a single “open site and click watch” flow. ## Scope In scope: - Control gossip -> web directory bridge command. - Worker storage/API for public stream entries. - Browser UI list and refresh loop. - Control gossip join behavior updated to work without bootstrap peers (`subscribe` without blocking join). Out of scope: - Browser-native iroh direct playback. - Signed/authenticated control announcements. - Replacing relay playback with direct iroh in browsers. ## Alternatives considered - Keep manual stream naming/link entry on the website. Rejected because it blocks one-click discovery. - Bridge directly from browser clients instead of a node command. Rejected because browser trust/availability constraints are higher. ## Rollout / Reversibility - Additive change; existing `/api/directory` and watch-by-link behavior remain intact. - Bridge can be disabled by stopping `control-bridge-web`. - Public listing auth can be tightened by setting `EC_STREAM_UPSERT_TOKEN`.