Signaling goes via Flask/Socket.IO. Messages go P2P over a WebRTC DataChannel. (Works on localhost. For remote use, serve over HTTPS.)