3.2 KiB
Development Setup
MVP Runtime Path
The current MVP runtime path is the legacy Django host/player UI with USE_SPA_UI=false.
Docker Compose
The fastest MVP path is the legacy UI with MySQL and Redis behind Django:
docker compose up --build
App URLs:
http://localhost:8000/admin/login/http://localhost:8000/lobby/ui/hosthttp://localhost:8000/lobby/ui/player
Compose uses infra/env/.env.dev.example and overrides DB_HOST/CHANNEL_REDIS_HOST inside containers so the same file also works for host-side commands.
If port 8000 is already in use, run with APP_PORT=18000 docker compose up --build and use http://localhost:18000/... instead.
The app container now waits for the database and Redis endpoints before running migrations, so transient Docker DNS startup races do not kill the local stack.
Bootstrap
Create deterministic demo credentials and sample questions with:
docker compose exec app python manage.py bootstrap_mvp
Default output:
- host username:
demo-host - host password:
demo-pass - category slug:
general - questions:
3
You can override the host/category names with --username, --password, --category-slug, and --category-name.
For a quick seeded regression flow, run:
docker compose exec app python manage.py smoke_staging --artifact /tmp/wpp-smoke.json
That creates smoke-host / smoke-pass, ensures one active smoke question exists, and exercises one full round. Use bootstrap_mvp for the reusable local try-out account.
Local MVP Smoke
For a one-command local MVP proof, run:
./scripts/run_local_mvp_smoke.sh
That starts the compose stack, waits for /healthz, runs bootstrap_mvp, executes smoke_staging, and writes a JSON artifact under artifacts/local/.
If port 8000 is busy on your machine, use APP_PORT=18000 ./scripts/run_local_mvp_smoke.sh.
By default the stack stays up after the smoke so you can continue in the browser. Use KEEP_STACK_RUNNING=0 if you want the script to shut the stack down on exit.
Release Gate
Run the full local MVP release gate with:
./scripts/verify_mvp_release.sh
That runs repo lint, shared i18n drift checks, Django checks/tests, both frontend test/build pipelines, and a docker compose config sanity pass.
Optional SPA Shell
To serve the Angular shell as the UI path instead of the legacy templates:
USE_SPA_UI=true docker compose --profile spa up --build
Use these entry points:
http://localhost:4200/for the SPA landing page with host login, host session creation, and player joinhttp://localhost:4200/host?session=ABC123for the host shell after a session existshttp://localhost:4200/player?session=ABC123for the player shell after joinhttp://localhost:8000/lobby/ui/hostandhttp://localhost:8000/lobby/ui/playerif you want Django to render the SPA shell withUSE_SPA_UI=true
The raw SPA container serves the compiled Angular app at / and also proxies /accounts/*, /lobby/*, and other Django endpoints back to http://localhost:8000.
WPP_SPA_ASSET_BASE still points at http://localhost:4200/browser because Django-rendered SPA pages load their static bundles from the compiled Angular browser/ directory.