Skip to content
All docs

Architecture

Browsers carry the call. Servers coordinate the call.

WebRTC — audio is sent peer-to-peer using RTCPeerConnection. We use opus codec and audio-first by default.

STUN — helps browsers discover their public IP. Public Google STUN is fine for dev; bring your own in production.

TURN — only used when peer-to-peer cannot connect (strict NATs, corporate firewalls, blocked UDP). Configure NEXT_PUBLIC_TURN_URL/USERNAME/CREDENTIAL.

Signaling — Socket.io server on a separate port. It only exchanges setup messages (offer, answer, ICE candidates, call state). It never sees audio.

AI receptionist — when AI answers, the browser opens an OpenAI Realtime session over WebRTC using a short-lived client secret. The AI joins the call as a regular peer.

woic.ai — your private call link