A referee-friendly web application that integrates True Finals tournament data with OBS streaming to manage match-to-arena assignments in real-time.
During tournaments, referees use their phones to:
- Select available matches from the tournament bracket
- Assign matches to specific arenas
- Automatically update OBS overlays with player info and bracket details
nextup/
├── frontend/ # Svelte + Vite web application
├── backend/ # Cloudflare Worker API + D1 Database
├── .env.template # Environment variables template
└── TOURNAMENT_ASSIGNMENT_DESIGN.md # Detailed architecture docs
- Node.js 18+ and pnpm
- Cloudflare account (for deployment)
- True Finals API credentials
- OBS with WebSocket plugin enabled
-
Install dependencies:
pnpm install
-
Configure environment:
cp .env.template .env # Fill in your API keys and configuration -
Set up backend:
cd backend pnpm install pnpm wrangler d1 create tournament-assignments # Update wrangler.toml with database_id pnpm wrangler d1 execute tournament-assignments --file=schema.sql
-
Run development servers:
# From root directory pnpm dev # Run frontend only pnpm dev:worker # Run worker only pnpm dev:all # Run both in parallel
- Frontend: Svelte + Vite + TypeScript
- Backend: Cloudflare Workers + D1 (SQLite)
- APIs: True Finals REST API, OBS WebSocket
- Deployment: Cloudflare Workers, Vercel/Netlify/Cloudflare Pages
See TOURNAMENT_ASSIGNMENT_DESIGN.md for:
- Complete architecture details
- API specifications
- OBS integration setup
- Frontend component design
- Deployment instructions
pnpm dev- Start frontend dev serverpnpm dev:worker- Start Cloudflare Worker locallypnpm build- Build frontend for productionpnpm deploy:worker- Deploy worker to Cloudflare
This project uses GitHub Actions for automated testing and deployment.
-
Test (.github/workflows/test.yml) - Runs on every push and pull request
- Frontend build and tests
- Backend type checking and tests
- Linting and formatting checks
-
Deploy (.github/workflows/deploy.yml) - Runs on push to
main- Deploys Cloudflare Worker
- Deploys frontend to Cloudflare Pages (or Vercel/Netlify)
Before deployment works, you need to configure GitHub secrets. See .github/SECRETS.md for detailed instructions.
Required secrets:
CLOUDFLARE_API_TOKEN- Cloudflare API tokenCLOUDFLARE_ACCOUNT_ID- Cloudflare account IDVITE_TF_USER_ID- True Finals user IDVITE_TF_API_KEY- True Finals API keyVITE_WORKER_URL- Deployed worker URLVITE_OBS_URL- OBS WebSocket URLVITE_OBS_PASSWORD- OBS WebSocket password (optional)
You can also trigger deployments manually:
- Go to the "Actions" tab in GitHub
- Select "Deploy" workflow
- Click "Run workflow"
ISC