Compare commits

..

1 Commits

Author SHA1 Message Date
Patrick Charrier
a621cc4483 Implement P2P polling app with Yjs and WebRTC
Uses Yjs CRDTs for conflict-free shared state and y-webrtc for
peer-to-peer data exchange. Users can add poll options and vote/unvote,
with all changes syncing in real-time across connected peers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 04:32:06 +01:00

View File

@@ -1,40 +1 @@
# 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://<your-local-ip>: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
# P2P Poll App