A real-time planning poker application for agile estimation, deployable via Docker. No login required - each session creates a unique game URL that can be shared with team members.
- π― Real-time voting with WebSocket communication
- π Multiple card decks: Fibonacci, T-shirt sizing, Powers of 2, Linear, or create your own
- ποΈ Watcher mode for observers who can reveal votes and reset games
- π Shareable game URLs - no login required
- π± Responsive design that works on desktop and mobile
- π Light and dark modes with theme toggle
- π³ Docker deployment ready
- β‘ Instant updates when players join, vote, or reveal results
- β³ 24-hour game persistence: sessions stay active for 24 hours so teams can rejoin later without losing progress, with plans to consider extending persistence even longer
0, 1, 2, 3, 5, 8, 13, 21, 34, 55, β, ?, β
XS, S, M, L, XL, XXL, ?, β
0, 1, 2, 4, 8, 16, 32, ?, β
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ?, β
Create your own custom deck to use during the game
Special cards:
β- Too complex to estimate?- Need more informationβ- Take a break
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
The Docker image is published as a multi-arch build and works on:
- x86_64 (Intel/AMD servers, PCs, cloud instances)
- ARM64 (Apple Silicon, Raspberry Pi 4/5, ARM servers)
The easiest way to deploy the application is with Docker Compose. The sample docker-compose.yml file also has an optional healthcheck.
- Create a docker-compose.yml with the following content (replace /path/to/data with what you set above). The sample docker-compose.yml file also has an optional healthcheck.
services:
planning-poker:
image: ghcr.io/andrewbusbee/planning-poker:latest
ports:
- "3001:3001"
environment:
- PORT=3001
- LOG_LEVEL=INFO # Options: DEBUG, INFO, WARN, ERROR, SILENT
restart: unless-stopped
volumes:
- data:/app/data
volumes:
data: - Start the container:
docker compose up -d- Open http://localhost:3001 in your browser.
- Run the container (replace /path/to/data with what you set above)
docker run -d \
--name planning-poker \
-p 3001:3001 \
-e PORT=3001 \
-e LOG_LEVEL=INFO \
--restart unless-stopped \
-v data:/app/data \
ghcr.io/andrewbusbee/planning-poker:latest- Open http://localhost:3001 in your browser.
PORT- Server port (default: 3001)LOG_LEVEL- Application logging level (default: INFO).
See Log Level Descriptions for details.
- Most verbose logging level
- Shows detailed debugging information including file paths, connection details, and internal state
- Includes data directory setup, file operations, and connection cleanup details
- Useful for development and troubleshooting issues
- Example:
Data directory: /app/data, Connection details: socket123, Transport: websocket
- Standard operational logging (recommended for production)
- Shows important application events and status updates
- Includes server startup, game creation/joining, player actions, and system metrics
- Provides good visibility into application behavior without overwhelming detail
- Example:
Game created and saved to disk: abc123, Player joined: John Doe
- Warning messages for potential issues
- Highlights concerning situations that don't stop the application
- Includes high latency connections, corrupted game data, and cleanup operations
- Indicates issues that should be monitored but aren't critical
- Example:
High latency detected: socket123, Latency: 2500ms, Failed to deserialize game data
- Error conditions that need attention
- Shows critical errors that affect functionality
- Includes file system errors, connection failures, and data corruption
- Indicates problems that may impact user experience or data integrity
- Example:
Cannot write to data directory, Game not found: invalid-id
- No logging output
- Completely disables all logging
- Useful for environments where logging is handled externally
- Minimal resource usage but no visibility into application behavior
- Use a reverse proxy (nginx, Traefik) for SSL termination
- Consider setting up additional logging and monitoring
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
For issues and questions, please create an issue in the repository.
MIT License - see LICENSE file for details
This project was built with the support of modern AI coding tools to accelerate prototyping and implementation.
- AI was used to generate scaffolding, boilerplate, and draft functions.
- All code has been curated, reviewed, and tested by a human before release.
- The use of AI allowed for faster iteration and a focus on architecture, usability, and overall project quality.
Community contributions and reviews are encouraged to further strengthen and expand the project.






