{"id":41470906,"url":"https://github.com/philipphermes/planning-poker","last_synced_at":"2026-01-23T16:48:27.323Z","repository":{"id":313488013,"uuid":"1039554804","full_name":"philipphermes/planning-poker","owner":"philipphermes","description":"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.","archived":false,"fork":false,"pushed_at":"2025-11-16T10:50:44.000Z","size":3912,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-16T12:07:44.296Z","etag":null,"topics":["nextjs","planning-poker","react","sqlite","typescript","websocket"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/philipphermes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-17T13:47:57.000Z","updated_at":"2025-11-16T10:50:02.000Z","dependencies_parsed_at":"2025-10-06T18:19:20.909Z","dependency_job_id":"0e7aa475-ed50-4754-a7ac-df9351933f45","html_url":"https://github.com/philipphermes/planning-poker","commit_stats":null,"previous_names":["philipphermes/planning-poker"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/philipphermes/planning-poker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philipphermes%2Fplanning-poker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philipphermes%2Fplanning-poker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philipphermes%2Fplanning-poker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philipphermes%2Fplanning-poker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philipphermes","download_url":"https://codeload.github.com/philipphermes/planning-poker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philipphermes%2Fplanning-poker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28696128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T15:57:05.722Z","status":"ssl_error","status_checked_at":"2026-01-23T15:56:27.656Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nextjs","planning-poker","react","sqlite","typescript","websocket"],"created_at":"2026-01-23T16:48:27.241Z","updated_at":"2026-01-23T16:48:27.297Z","avatar_url":"https://github.com/philipphermes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Planning Poker\n\n![CI](https://github.com/philipphermes/planning-poker/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/gh/philipphermes/planning-poker/graph/badge.svg?token=0ZFACR5SCX)](https://codecov.io/gh/philipphermes/planning-poker)\n![License](https://img.shields.io/badge/License-MIT-blue.svg)\n\n## Getting Started\n\n### Install required packages:\n\n```bash\nnpm install\n```\n\n### create a .env from .env.dist and adjust credentials\n\n```bash\ncp .env.dist .env\n```\n\n#### Environment Variables\n\n| Name                        | Description                                          | Required | Default               |\n|-----------------------------|------------------------------------------------------|----------|-----------------------|\n| NEXTAUTH_SECRET             | The Secret for Auth                                  | True     | secret123!            |\n| NEXTAUTH_URL                | The url used for callbacks                           | True     | http://localhost:3000 |\n| NEXTAUTH_SESSION_MAX_AGE    | Session \u0026 JWT max age in seconds                     | False    | 3600/1h               |\n| NEXTAUTH_SESSION_UPDATE_AGE | Session update age in seconds                        | False    | 1800/30m              |\n| NEXTAUTH_EMAIL_MAX_AGE      | Magic Link email max age in seconds                  | False    | 1800/30m              |\n| NEXTAUTH_ALLOWED_DOMAINS    | Allowed domains for emails seperated by \",\"          | False    | test.com,example.com  |\n| EMAIL_SERVER_USER           | Email Server username                                | False    | username              |\n| EMAIL_SERVER_PASSWORD       | Email Server password                                | False    | password              |\n| EMAIL_SERVER_HOST           | Host of the Email Server                             | True     | smtp.example.com      |\n| EMAIL_SERVER_PORT           | Port of the Email Server                             | True     | 587                   |\n| EMAIL_FROM                  | The Sender of emails                                 | True     | noreply@example.com   |\n| EMAIL_FROM_SENDER_NAME      | The Senders name                                     | False    | Example               |\n| DB_URL                      | The path to the sqlite db file                       | True     | file:local.db         |\n| NODE_ENV                    | The projects environment (development or production) | True     | development           |\n| HOSTNAME                    | Hostname                                             | False    | localhost             |\n| PORT                        | Port                                                 | False    | 3000                  |\n| UPLOAD_DIR                  | Directory for uploads                                | True     | uploads               |\n\n### Create sqlite DB\n\n```bash\n npx drizzle-kit push\n```\n\n### run the development server:\n\n```bash\nnpm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\n## Docker files\n- docker-compose.dev.yml\n  - Only mail catcher\n  - `docker compose -f docker-compose.dev.yml up -d`\n- docker-compose.prod-like.yml\n  - Prod like setup with reachable ports for local dev and mail catcher\n  - `docker compose -f docker-compose.prod-like.yml up -d --build`\n- docker-compose.yml\n  - For Prod\n  - `docker compose up -d --build`\n\n## Deployment\n\n### Run build\n\nThis will build the client and the custom server.\nWe used esbuild to build the custom typescript server to commonjs.\nA custom server was needed since we are using websocket for the estimation part.\n\n\u003e [!CAUTION]\n\u003e Change NODE_ENV to production\n\n```bash\nnpm run build\n```\n\n### Start server\n\n```bash\nnpm run start\n```\n\n### Run migrations\n\n```bash\nnpm run migrate:prod\n```\n\n## Testing\n\n### Run tests in watch mode\n\n```bash\nnpm test\n```\n\n### Run tests once\n\n```bash\nnpm run test:run\n```\n\n### Run tests with coverage report\n\n```bash\nnpm run test:coverage\n```\n\n### Run tests with Vitest UI\n\n```bash\nnpm run test:ui\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilipphermes%2Fplanning-poker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilipphermes%2Fplanning-poker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilipphermes%2Fplanning-poker/lists"}