Tournament engine (pools, single/double elimination, standings with proper tiebreaks, withdrawals, two-court queue with ETAs and alerts), a single-process Node server with SQLite via node:sqlite and a WebSocket live board, organizer desk, QR landing page that follows the tournament phase, Dockerfile and compose with cloudflared, and documentation for deploying and running a day. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01MB7nCCAscYsb3zzkT6LHZi
1.6 KiB
1.6 KiB
Deploy checklist (for a person or an automated agent)
Follow in order. Full explanations are in DEPLOY.md.
- Host has Docker with Compose v2:
docker compose version. git clone https://gitea.cloudfreeiot.com/bkvargyas/courtside.git && cd courtsidecp .env.example .envand set:ADMIN_PASSWORD— strong password for/admin.SESSION_SECRET—openssl rand -hex 32.CLOUDFLARE_TUNNEL_TOKEN— from Cloudflare Zero Trust → Networks → Tunnels → your tunnel → connector token. The tunnel's public hostname must route tohttp://app:3000.TRUST_CF_ACCESS— leavefalseunless an Access policy protects/adminon that hostname.
docker compose up -d --build- Verify:
docker compose ps→apphealthy,cloudflaredrunning.docker compose exec app wget -qO- http://127.0.0.1:3000/healthz→{"ok":true,...}.docker compose logs cloudflared | grep -i "registered tunnel connection".curl -sI https://<hostname>/→200.https://<hostname>/adminshows the login page and acceptsADMIN_PASSWORD.
- Optional: seed the demo tournament to give the site something to show:
docker compose stop app && docker compose run --rm app node scripts/seed-demo.js && docker compose start appthen openhttps://<hostname>/t/demo-labor-day-2s. Delete it later from the desk's Danger zone. - Back up: the named volume
courtside-data(one SQLite file). See DEPLOY.md §5. - Update later:
git pull && docker compose up -d --build.
Nothing else is required. No host ports are published; no reverse proxy, TLS certificate, or database server is involved.