Compare commits
4 Commits
feat/p2p-p
...
proposal-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e30de01c86 | ||
|
|
2490a267ee | ||
|
|
2af5da59c4 | ||
|
|
4a208ba05b |
39
README.md
39
README.md
@@ -1 +1,40 @@
|
|||||||
# P2P Poll App
|
# 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
|
||||||
|
|||||||
Reference in New Issue
Block a user