https://github.com/philipphermes/planning-poker
Planning Poker is a lightweight web app for agile teams to collaboratively estimate tasks. Built with Next.js, TypeScript, and WebSockets, it provides real-time updates, secure authentication, and persistent storage with SQLite/Drizzle ORM.
https://github.com/philipphermes/planning-poker
nextjs planning-poker react sqlite typescript websocket
Last synced: 5 months ago
JSON representation
Planning Poker is a lightweight web app for agile teams to collaboratively estimate tasks. Built with Next.js, TypeScript, and WebSockets, it provides real-time updates, secure authentication, and persistent storage with SQLite/Drizzle ORM.
- Host: GitHub
- URL: https://github.com/philipphermes/planning-poker
- Owner: philipphermes
- License: mit
- Created: 2025-08-17T13:47:57.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-11-16T10:50:44.000Z (7 months ago)
- Last Synced: 2025-11-16T12:07:44.296Z (7 months ago)
- Topics: nextjs, planning-poker, react, sqlite, typescript, websocket
- Language: TypeScript
- Homepage:
- Size: 3.73 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Planning Poker

[](https://codecov.io/gh/philipphermes/planning-poker)

## Getting Started
### Install required packages:
```bash
npm install
```
### create a .env from .env.dist and adjust credentials
```bash
cp .env.dist .env
```
#### Environment Variables
| Name | Description | Required | Default |
|-----------------------------|------------------------------------------------------|----------|-----------------------|
| NEXTAUTH_SECRET | The Secret for Auth | True | secret123! |
| NEXTAUTH_URL | The url used for callbacks | True | http://localhost:3000 |
| NEXTAUTH_SESSION_MAX_AGE | Session & JWT max age in seconds | False | 3600/1h |
| NEXTAUTH_SESSION_UPDATE_AGE | Session update age in seconds | False | 1800/30m |
| NEXTAUTH_EMAIL_MAX_AGE | Magic Link email max age in seconds | False | 1800/30m |
| NEXTAUTH_ALLOWED_DOMAINS | Allowed domains for emails seperated by "," | False | test.com,example.com |
| EMAIL_SERVER_USER | Email Server username | False | username |
| EMAIL_SERVER_PASSWORD | Email Server password | False | password |
| EMAIL_SERVER_HOST | Host of the Email Server | True | smtp.example.com |
| EMAIL_SERVER_PORT | Port of the Email Server | True | 587 |
| EMAIL_FROM | The Sender of emails | True | noreply@example.com |
| EMAIL_FROM_SENDER_NAME | The Senders name | False | Example |
| DB_URL | The path to the sqlite db file | True | file:local.db |
| NODE_ENV | The projects environment (development or production) | True | development |
| HOSTNAME | Hostname | False | localhost |
| PORT | Port | False | 3000 |
| UPLOAD_DIR | Directory for uploads | True | uploads |
### Create sqlite DB
```bash
npx drizzle-kit push
```
### run the development server:
```bash
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
## Docker files
- docker-compose.dev.yml
- Only mail catcher
- `docker compose -f docker-compose.dev.yml up -d`
- docker-compose.prod-like.yml
- Prod like setup with reachable ports for local dev and mail catcher
- `docker compose -f docker-compose.prod-like.yml up -d --build`
- docker-compose.yml
- For Prod
- `docker compose up -d --build`
## Deployment
### Run build
This will build the client and the custom server.
We used esbuild to build the custom typescript server to commonjs.
A custom server was needed since we are using websocket for the estimation part.
> [!CAUTION]
> Change NODE_ENV to production
```bash
npm run build
```
### Start server
```bash
npm run start
```
### Run migrations
```bash
npm run migrate:prod
```
## Testing
### Run tests in watch mode
```bash
npm test
```
### Run tests once
```bash
npm run test:run
```
### Run tests with coverage report
```bash
npm run test:coverage
```
### Run tests with Vitest UI
```bash
npm run test:ui
```