PokeTournament is a modern, game-like web app to create and run Swiss-format Pokémon tournaments. It features a BO1 Pick & Ban (PB-2) flow, an integrated Team Builder, and a companion Nuzlocke tracker — all wrapped in a DS-style pixel UI.
- Swiss tournaments with BYE handling and robust standings (OWP → Direct → Random)
- BO1 Pick & Ban (PB-2) with server-side timers and confirmations
- Team Builder (6 slots, Poképaste import/export)
- Nuzlocke runs with encounters, status, and coverage insights
- Clean architecture: Symfony (DDD/CQRS) backend, Next.js Screaming Architecture frontend
- GraphQL API and MongoDB read models for fast UI
- One-time setup
make setup # generates local HTTPS certs- Map local domains (add to /etc/hosts)
sudo sh -c 'echo "127.0.0.1 poketournament.local api.poketournament.local" >> /etc/hosts'- Launch stack
make up # or: docker compose up -d
make ps # check containers- Open the app
- Frontend: https://poketournament.local/ (Next.js)
- Backend Health: https://api.poketournament.local/health (Symfony)
Note: The certs in infra/nginx/certs/ are self-signed. Trust them once on your machine if the browser warns.
backend/ # Symfony app (DDD/CQRS, MongoDB)
frontend/ # Next.js app (Screaming Architecture)
docs/ # Vision, architecture, process (incl. TDD guide)
docker/ # Dockerfiles (php, node, nginx)
infra/nginx/ # NGINX config + local certs
Planned: Monorepo packages/ layout with packages/backend, packages/frontend, and packages/core (framework-agnostic domain).
- Bring services up/down
make up
make down- Tail logs
make logs- Exec into containers
make bash-backend # PHP/Symfony container
make bash-frontend # Node/Next.js container- Backend units/specs (phpspec)
make test-backend- Frontend unit tests (Jest)
make test-frontend- End-to-End (Playwright, official Docker image)
make test-e2eHooks
- Conventional Commits enforced via commitlint on commit-msg
- Unit tests run on pre-push (backend + frontend)
- Backend (Symfony): DDD/CQRS with domain logic extracted to a reusable
core(planned), MongoDB for persistence and read models, GraphQL API - Frontend (Next.js): Screaming Architecture (feature-first), DS-style components, GraphQL client
- NGINX: HTTPS reverse proxy for local domains
Key docs:
- Vision:
docs/vision.md - Monorepo/Architecture:
docs/architecture/monorepo.md,docs/architecture/backend-ddd.md,docs/architecture/frontend-screaming.md - GraphQL & Data Model:
docs/architecture/graphql-and-data-model.md - TDD Guide:
docs/process/tdd.md - Roadmap & DoD:
docs/roadmap.md
- Frontend uses
NEXT_PUBLIC_API_BASE=https://api.poketournament.localin Docker - Backend uses
MONGODB_URLfrom compose; MongoDB and Mongo Express are included for local dev
- Follow TDD: Red → Green → Refactor (see
docs/process/tdd.md) - Use Conventional Commits (e.g.,
feat:,fix:,chore:,test:) - Keep PRs small and focused; include tests and docs updates when applicable
This project is open-source. See LICENSE for details.