A real-time peer-to-peer planning poker application for agile teams to estimate story points using the Fibonacci sequence. No server required!
- Peer-to-Peer: Direct browser-to-browser communication using WebRTC
- No Server Needed: Host and join rooms without any backend
- Fibonacci Sequence: 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ?
- Real-time Updates: Instant synchronization across all participants
- Vote Reveal/Hide: Control when estimates are shown
- Reset Rounds: Start new voting sessions
- Voting Statistics: Average, range, and distribution
- Responsive Design: Works on mobile and desktop
- GitHub Pages Compatible: Deploy for free on GitHub Pages
- Frontend: HTML5, CSS3, Vanilla JavaScript
- P2P Communication: PeerJS (WebRTC wrapper)
- Deployment: GitHub Pages (or any static host)
- Host: Open the app and click "Create Room"
- Share: Copy the room link and send it to your team
- Join: Others click the link and enter their names
- Vote: Everyone selects their estimate
- Reveal: Click "Reveal Votes" to see results
Simply open index.html in your browser - no build step required!
Or use a simple HTTP server:
# Python 3
python -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000
# Node.js (if you have http-server installed)
npx http-server -p 8000Then open http://localhost:8000 in your browser.
- Click "Create Room"
- Enter your name
- Click "Create & Host"
- Copy the room link or Room ID
- Share with your team
- Click "Continue to Room"
Important: As the host, keep your browser tab open. If you close it, the room will disconnect for everyone.
- Click "Join Room"
- Enter your name
- Paste the Room ID or use the shared link
- Click "Join Room"
- Click any Fibonacci card to vote
- Your vote is hidden until revealed
- Green dot shows who has voted
- Click "Reveal Votes" to show everyone's estimates
- Click "Reset" to start a new round
- Push this repo to GitHub:
git add .
git commit -m "Initial commit"
git push origin main- Go to Settings → Pages on GitHub
- Under Source, select branch (e.g.,
main) and folder/(root) - Click Save
- Your app will be live at
https://[username].github.io/[repo-name]/
Done! Share the URL with your team.
For custom domains or more control, use GitHub Actions with a deploy workflow.
┌─────────────┐
│ Host │ ← Creates room, manages state
│ (Browser) │ ← Must stay connected
└──────┬──────┘
│
├──── WebRTC P2P ────┐
│ │
┌──────▼─────┐ ┌──────▼─────┐
│ Peer 1 │ │ Peer 2 │
│ (Browser) │ │ (Browser) │
└────────────┘ └────────────┘
- Host: First person to create the room becomes the host
- PeerJS Cloud: Free TURN/STUN servers for NAT traversal
- Direct P2P: All communication is browser-to-browser
- No Database: State is held in the host's browser
- Room Lifespan: Room exists as long as host keeps tab open
- Host creates a Peer with unique ID
- Peers connect to Host using that ID
- WebRTC establishes direct P2P connection
- Host broadcasts game state to all peers
- Peers send votes/actions to Host
- Host updates state and re-broadcasts
- Host Dependency: If host closes their browser, room ends
- Connection Success Rate: ~95% (NAT/firewall issues in ~5% of cases)
- Scalability: Works well for 2-15 participants
- No Persistence: State is lost when host disconnects
- Check if Room ID is correct
- Ensure host's browser tab is still open
- Try creating a new room
- Check your internet connection
- Ensure you haven't lost connection to host
- Check browser console for errors
- Some corporate networks block WebRTC
- Try using a different network or VPN
- PeerJS uses free STUN/TURN servers which may be blocked
Works in all modern browsers:
- Chrome 56+
- Firefox 44+
- Safari 11+
- Edge 79+
Requires WebRTC support.
- No Server Storage: All data is in browser memory only
- P2P Only: Data flows directly between browsers
- No Analytics: No tracking or data collection
- Ephemeral: All data is lost when host closes tab
MIT
Contributions welcome! Please open an issue or pull request.
- PeerJS: Simplified WebRTC wrapper
- PeerJS Cloud: Free STUN/TURN servers