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