Summary
Add a WebRTC signaling server to JSS. The server handles matchmaking between peers — the actual media/data flows peer-to-peer via the browser's built-in WebRTC API.
Phased approach
- Signaling server — WebSocket route that relays SDP offers/answers and ICE candidates between authenticated users
- TURN relay — fallback for firewalled users who can't connect directly
- Multi-party / rooms — group calls
- Call history — store session metadata in
/db/
- Data channels — peer-to-peer file transfer
- WebTorrent — seed pod files via WebRTC-based torrents
Phase 1 scope
- New WebSocket route (
/.webrtc or similar)
- Relay SDP offers/answers between two WebID-authenticated users
- Forward ICE candidates
- Simple call model: caller targets a callee's WebID
- Similar in scope to the existing nostr relay plugin (~100-150 lines)
Why JSS is a good fit
- WebSocket infrastructure already exists (notifications plugin)
- WebID authentication gives identity for free
- WAC can control who can call whom
/db/ route available for call history/metadata
- Pod profiles (
foaf:knows) provide natural contact lists
Summary
Add a WebRTC signaling server to JSS. The server handles matchmaking between peers — the actual media/data flows peer-to-peer via the browser's built-in WebRTC API.
Phased approach
/db/Phase 1 scope
/.webrtcor similar)Why JSS is a good fit
/db/route available for call history/metadatafoaf:knows) provide natural contact lists