The entire UI + chess rules/validation run in the browser (static HTML/CSS/JS). WebRTC signaling is done through a small set of endpoints (create room, store offer/answer, delete room). After signaling, the connection is direct peer-to-peer via SimplePeer.
There's a known limitation where connection doesn't work with both players connected to the same network.
Demo: https://www.adriclumma.com/projects/chessOnline/
Code: https://github.com/ALumma/chessOnline
Let me know what you think!