# LiveKit — local dev

Self-hosted SFU for voice + video. Runs in Docker on host-network mode so
WebRTC UDP ports work natively.

## Start / Stop

```bash
# from repo root
docker compose -f infra/livekit/docker-compose.yml up -d
docker compose -f infra/livekit/docker-compose.yml logs -f livekit
docker compose -f infra/livekit/docker-compose.yml down
```

## Endpoints

| Purpose       | URL / Port            |
|---------------|-----------------------|
| Signaling WS  | `ws://localhost:7880` |
| TCP fallback  | `tcp://localhost:7881`|
| UDP RTC       | `50000-50100/udp`     |
| coturn        | `3478/udp+tcp`        |

## Dev keys

Baked into `livekit.yaml`:

- `LIVEKIT_API_KEY=devkey`
- `LIVEKIT_API_SECRET=devsecret-at-least-32-bytes-long-please`
- `LIVEKIT_URL=ws://localhost:7880`

Same values go into `apps/desktop/.env` (via `VITE_LIVEKIT_URL`) and into the
edge function's `supabase/functions/.env`.

## Prod (later)

Same image on the Hetzner VPS. Caddy terminates TLS at
`wss://livekit.netralax.cloud`. coturn exposed on `turn.netralax.cloud:5349`
(TURNS). Secrets generated via `openssl rand -hex 32` and stored in the server
env + Supabase edge secrets.
