# P2P Poll App A peer-to-peer polling app where users can add options and vote on them. All data syncs directly between browsers using WebRTC — no central server stores any poll data. ## How It Works - **Yjs CRDTs** handle shared state — concurrent edits from different peers merge automatically without conflicts - **y-webrtc** establishes direct WebRTC connections between browsers (a public signaling server is used only for peer discovery) - Each user gets a stable random ID (stored in localStorage) ensuring one vote per user per option - Polls are identified by room name, shareable via URL ## Getting Started ```bash npm install npm run dev ``` Open `http://localhost:5173` in your browser. To share a specific poll, use the `?room=` query parameter: ``` http://localhost:5173/?room=my-poll ``` Share this URL with others to join the same poll. ## Cross-Device Testing ```bash npm run dev -- --host ``` Then open `http://:5173/?room=test` on another device on the same network. ## Tech Stack - [Yjs](https://yjs.dev/) — CRDT library for conflict-free shared state - [y-webrtc](https://github.com/yjs/y-webrtc) — WebRTC provider for P2P connectivity - [Vite](https://vite.dev/) — Dev server and bundler - Vanilla JS — No framework dependencies