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
19 lines
847 B
Bash
19 lines
847 B
Bash
# Copy to .env and fill in. Never commit .env.
|
|
|
|
# Password for the organizer desk at /admin. Required unless TRUST_CF_ACCESS=true.
|
|
ADMIN_PASSWORD=change-me
|
|
|
|
# Random string used to sign the organizer session cookie. Generate one with:
|
|
# openssl rand -hex 32
|
|
# If left empty a random secret is generated at startup (organizers must sign in again after each restart).
|
|
SESSION_SECRET=
|
|
|
|
# Optional. If "true", requests carrying the Cf-Access-Authenticated-User-Email header
|
|
# (set by Cloudflare after an Access policy on /admin*) are treated as organizers.
|
|
# Only enable when the app is reachable exclusively through the tunnel.
|
|
TRUST_CF_ACCESS=false
|
|
|
|
# Cloudflare Tunnel token from Zero Trust → Networks → Tunnels → (your tunnel) → Install connector.
|
|
# The tunnel's public hostname should route to http://app:3000.
|
|
CLOUDFLARE_TUNNEL_TOKEN=
|