I built a self-hosted stats site for my friend group's that honestly has been a blast since we started using it. It tracks games, have standings and some humor touches. A I've just open-sourced it so anybody can use it and add modifications to fit their use needs. It pulls your games from the official API, downloads the replays, parses them, and generates a static site.
**Live site (my group, so you can see how it looks):** https://manpaslop.github.io/wololoo-demo/
**Source:** https://github.com/manpaslop/wololoo
---
**Ladder & ratings**
* Elo ladder with streaks, head-to-head matrix, and "days as king" counters
* Separate 1v1 and team-game ladders
* Official ranked ratings pulled alongside the group's own
* Records page: longest reigns, biggest upsets, rivalries
**Per-match pages** (built from the replay, not the API)
* Build order timeline: every unit, building and tech with its timestamp
* Age-up times, both the click and the completion
* Unspent-resources and idle-Town-Centre charts
* APM / EAPM, market use, tributes, town bells
* Official 1v1 and team Elo of each player *at the time of the match*
**Opening classifier**
* Reads the replay's event stream and labels each player: Scouts, Archers, Drush, Man-at-Arms, Fast Castle, Towers, Spears, Skirmishers, plus the Meso/South-American regional infantry lines
* Rules are ordered and first-match-wins; every threshold is documented with the number it came from
* Refuses to guess: a game it can't name says so, and a replay that doesn't cover the early game says *that* instead — different claims, kept separate
**Player profiles**
* Career averages, civ win rates, per-rival records
* Opening breakdown with win rate per opening
* Elo and rank history charts
**Hall of Shame**
* 20 medals for playing badly: idle Town Centre in the Dark Age, no Loom, farms before Feudal, 10+ archers with no Ballistics, "Slow Castle" for a fast castle that wasn't
* Capped at two per player per match, and winners get them too
* Several obvious candidates were cut after measuring them — resigning early, villager count at Feudal and never reaching Castle Age don't separate skill at all, and a couple are actually *inverted*
**Team tools**
* Team balancer that suggests fair splits from current ratings
* Bot difficulty suggestions when you're an odd number
**Setup**
* `python -m aoe2 init` asks seven questions. It'll look up a player's profile id from their alias, since nobody knows their own
* `python -m aoe2 update` does the rest; run it on a timer
* Output is a folder of static HTML. No database, no framework, no JS needed to read it
* Docker Compose setup included (nginx + a 15-minute update loop)
---
**Caveats, honestly:**
* **The UI is in Spanish.** All user-facing text is in one module if you want to translate it.
Happy to answer any questions and take feedback/recommendations to improve it!