Files
TSSBOT-web/README.md
T
2026-05-14 20:57:34 +01:00

2.5 KiB

tssbot.web

React + Vite + Tailwind v4 web shell for Toothless' TSS Bot.

Routes:

  • / landing page
  • /teams TSS team leaderboard
  • /teams/:teamname generated team profile with roster, summary, rating history, and battle results
  • /battle-logs Battle Logs

Local development

npm install
npm run dev

The development server runs on http://localhost:3001.

By default, /api/* and /health requests are proxied to http://localhost:6000. Override that with VITE_API_TARGET:

VITE_API_TARGET=http://localhost:8080 npm run dev

Production with PM2

npm install
npm run build
pm2 start ecosystem.config.cjs

The production server runs on http://localhost:3010. It serves /health locally and only proxies the API routes used by the app:

  • GET /api/tss/leaderboard/teams?limit=1..100
  • GET /api/tss/teams/resolve?name=...
  • GET /api/tss/teams/:team
  • GET /api/tss/teams/:team/history
  • GET /api/tss/teams/:team/games

The proxy blocks cross-origin/API-navigation requests, strips CORS headers from the upstream response, rate limits callers, and caches successful GET responses briefly so public page traffic does not hammer the upstream API.

Override the API target before starting PM2 if needed:

API_UPSTREAM=http://127.0.0.1:8080 pm2 start ecosystem.config.cjs

Set PUBLIC_ORIGIN to the public site origin in production, especially behind a reverse proxy:

PUBLIC_ORIGIN=https://your-domain.example pm2 start ecosystem.config.cjs

Optional API protection tuning:

API_CACHE_TTL_MS=15000
API_RATE_LIMIT_WINDOW_MS=60000
API_RATE_LIMIT_MAX=120

GitHub webhook

The webhook process listens on port 3011 at /github. Configure GitHub to send push events there.

Set a webhook secret before starting PM2 if you want signature validation:

GITHUB_WEBHOOK_SECRET=your-secret pm2 start ecosystem.config.cjs

On PowerShell, set $env:GITHUB_WEBHOOK_SECRET = "your-secret" before starting PM2, or put the value directly in ecosystem.config.cjs.

The default deploy flow is:

git pull --ff-only
npm install
npm run build
pm2 reload tssbot-web --update-env

Only processes listed in PM2_RESTART_TARGETS are reloaded. The default is tssbot-web, so unrelated PM2 processes are left alone. The webhook exits after 24 hours so PM2 restarts it cleanly.

The webhook listener reads .env on startup. To send a Discord notification whenever the listener starts or restarts, set:

DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...