Releases: ag-tech-group/aoe2-live-standings-api
Releases · ag-tech-group/aoe2-live-standings-api
v1.0.0 — King's Gauntlet launch
First stable release of aoe2-live-standings-api. Ships the live-standings backend for The King's Gauntlet (Hera Streamer Invitational 2026 — 2026-06-02 launch).
What's in v1.0.0
Multi-tournament FastAPI + Postgres backend on Cloud Run, with a dedicated polling worker that mirrors the Relic upstream into per-tournament read endpoints.
- Read surface —
/v1/tournaments/{slug}/{standings,live,teams/standings,matches,progression,players}, plus thecurrentmagic slug that resolves to the active tournament for tournament-agnostic probes. - Management API — tournament + team + roster + ownership CRUD gated by
criticalbit_accessJWT (POST /v1/tournamentsis open to authenticated users;PATCH/DELETEare owner-gated). - Polling worker — separate Cloud Run service running player stats (~30s), recent matches (~60s), live matches (~15s), Twitch live (~60s, opt-in), YouTube live (~30m, quota-bound, opt-in). Last poll surfaces via
last_polled_aton every envelope. - Cache architecture — auth-aware
Cache-Controlsplit: viewers getpublic, s-maxage=15for read coalescing; admins getprivate, no-storefor read-after-write freshness. Static cache for tournament config. - Infra — Cloud Run + Cloud SQL + Cloudflare in front, Cloud Monitoring uptime checks + alert policies, billing budgets + dashboards via Terraform, Sentry-via-Pub/Sub for capacity alerts.
Notable design choices
- Multi-tournament from the ground up —
Tournamentis a first-class entity; the worker polls the union of every tournament's roster. - Slugs are immutable —
TournamentUpdatedeliberately excludesslugso URL contracts don't break under organizer edits. currentalias —/v1/tournaments/currentresolves to the most-recently-started tournament so external uptime probes survive event rollovers without infra redeploys.- Team standings rank by peak — per-tournament team aggregates use lifetime
max_rating, consistent with how per-player Peak is scored. - No seed bootstrap — fresh deploys serve no data until an operator explicitly creates a tournament via the management API. (The original bootstrap defaults were the source of the
defaultslug nonsense; removed pre-1.0.)
Operational notes
- Live at
https://aoe2-live-standings-api.criticalbit.gg. - API + worker deploy on every push to
mainvia GitHub Actions OIDC → Artifact Registry → Cloud Run. - Health:
GET /healthfor liveness; deeper signal vialast_polled_aton/v1/tournaments/current/standings(uptime probe target).
🎮 Ship date: 2026-06-02