# ECP-0048: Bootstrap WebRTC Directory API via Cloudflare Containers ## Why The website at `every.channel` is static, but we still need a minimal rendezvous surface so browsers can: - see a public list of live streams, and - exchange WebRTC offers/answers without copy/paste. We already have a `/api/*` shape (ECP-0046). The intent is explicitly limited: **bootstrap WebRTC only**. Using a Container lets us serve those endpoints from a normal Rust HTTP server (portable, no Workers-specific runtime), while keeping the main site static and keeping the surface area small. ## Proposal Keep the public `/api/*` endpoints, but implement them as: - a single named Cloudflare Container instance (`global`) running a tiny Rust server; and - a Worker Durable Object wrapper (implemented via `@cloudflare/containers`) that forwards `/api/*` requests into the container on port `8080`. Endpoints (unchanged): - `GET /api/health` - `GET /api/directory` - `POST /api/announce` `{stream_id,title,offer,expires_ms?}` - `POST /api/answer` `{stream_id,answer}` - `GET /api/answer?stream_id=...` (one-shot consume) Constraints: - TTL + size caps. - No additional API endpoints. - Container internet egress disabled. - This is not spam-resistant or censorship-resistant; it is an interim bootstrap. ## Reversibility High. The website and node code depend on the `/api/*` shape, not the backing implementation. We can replace this with a decentralized rendezvous or native browser transport later.