The Tower – Stats & Analysis App¶
A stats‑tracking and analysis app for The Tower mobile game.
Battle history can be imported as raw text, then explored through charts and read-only progress dashboards — without guesswork or prescriptive advice.
Links¶
- App (Railway): https://thetowerstats.up.railway.app/
- Docs: https://mahbam42.github.io/theTowerStats/
TL;DR — Product Philosophy¶
This app helps you understand your own Tower runs.
It turns Battle Reports into history, charts, and comparisons so you can see what changed, when it changed, and under what conditions.
- No leaderboards
- No “best build” claims
- No hidden assumptions
- No telling you how to play
Everything is based on your data, shown with clear context and stated assumptions. If there isn’t enough data to support a conclusion, the app says so explicitly.
It’s a mirror, not a meta.
Guiding principles:
- Raw Battle Reports are the source of truth
- Context defines scope, not meaning
- Trust and explainability come before cleverness
What This App Does¶
📥 Import Battle History¶
- Paste raw Battle Report text directly from the game
- Automatic deduplication (no accidental double imports)
- Gracefully handles new or unknown stat labels after game updates
- Each signed-in account is isolated; your imports are scoped to your user.
- Optional Recovery Packages column in Battle History (hidden by default).
📊 Track Progress Over Time¶
- Coins per hour and other precomputed series (no client-side math)
- Per-hour metrics for cells, reroll shards, and enemies destroyed
- Filter charts by date range, tier, preset, patch boundary windows, and overlays
- Exclude one or more presets to remove runs from the chart scope
- Save ordered favorite charts and reusable Chart Builder entries per player
- Apply snapshot filters and past-N-run scopes alongside date ranges
- Default chart window uses the current Event window, with navigation controls
- Default chart granularity is By battle log, with an optional switch to By date
- Chart run labels follow Battle History ordering for consistent comparisons
- Export derived metrics to CSV and download chart images as PNG snapshots
- Full-screen chart modal and tooltip links to open Battle Report details
- Guided walkthrough available in demo mode or on first login
- Compare scopes by tier, preset, patch boundary windows, tournament rank, or custom run selections
🔎 Explore Dashboard¶
- Build player-authored queries to aggregate run metrics without changing Battle History
- Use the Explore DSL to filter, group, and summarize your imported runs (including patch boundary windows)
- Preview Explore output in the Query Explorer modal from Battle History or Charts
- Save named Explore queries for reuse
- Use shared Query Templates as starter queries and reopen them after successful runs when needed
- Aggregate supported metrics with sum, count, average, and percent-of-total outputs
📈 Lifetime Stats¶
- Review economy, combat, and utility totals across all runs or a selected date window
- Use Lifetime Stats as a quick metric reference before deeper Explore analysis
🧮 Calculator Tools¶
- Game Speed calculator based on a selected run and Wave Accelerator card level
- Labs Speed Up calculator with Event window deadlines and cell cost estimates
🎯 Goals Dashboard¶
- Track upgrade targets across bots, guardian chips, and ultimate weapons
- See level targets, current vs target deltas, and estimated costs
🧮 Analysis (Deterministic, Traceable Outputs)¶
- Computes rates, totals, deltas, and comparisons from your imported runs
- Keeps outputs explainable by showing the scope (filters and included runs)
- Uses descriptive language for summaries (never “best”, “optimal”, or “you should”)
🧩 Card, UW, Guardian, and Bot Tracking¶
- Read-only dashboards for cards, ultimate weapons, guardian chips, and bots
- See unlocks, parameter levels, and last-updated timestamps
- Cards dashboard includes a usage modal summarizing card and preset usage across visible runs
- Guardian chips track active slot limits and unlock costs
- Bot Respec resets tracked bot unlocks, bot parameter levels, and bot goals to match an in-game respec
- Wiki‑derived data is versioned and attributed, never overwritten
🗂 Presets (Player Intent, Not Strategy)¶
- Group cards into named presets that match your play style
- Use presets as filters for analysis and charts
- The app never tells you what’s “best” — it shows you what happened
🌙 Foundation-powered UI¶
- Dark theme UI with consistent tables, callouts, and navigation styling
- Improved callout and help-text contrast in dark theme
- Shared dashboard shell with top navigation, global search, and consistent callouts
- Account menu includes Lifetime Stats plus a direct bug report / feature request link
- Foundation grid/forms for Battle History, Charts, and progress dashboards
- Clear charts designed to answer real questions quickly
- Optional demo dataset (early, mid, and late game samples) for safe exploration without importing your own data
What This App Is Not¶
- ❌ A strategy guide
- ❌ An auto‑optimizer
- ❌ Real‑time wiki scraper
Any future advice or recommendations are explicitly out of scope unless added later.
Why This Exists¶
The Tower exposes a huge amount of data — but very little context.
This app is about: - remembering what you’ve tried, - seeing how changes affect outcomes over time, - and giving you trustworthy numbers to support your own decisions.
Current Progress¶
- Current development: v0.12.0
- Latest release: v0.12.0
- Changelog:
CHANGELOG.md - Stable: Battle Report import, Battle History, Charts (including snapshots and compare scopes), Explore, Lifetime Stats, Calculator Tools, and collection progress dashboards
- Multi-user: Each signed-in account has its own isolated dataset
- Adoption features: A read-only demo dataset and lightweight export tools (CSV and PNG)
See the User Guide and Development sections in /docs (or the published site) for deeper detail.
Testing¶
Tests are run in CI and during development.
Production deployments install runtime dependencies only and do not execute tests.
Maintainers can preview wiki diffs before rebuilds with rebuild_wiki_definitions --diffs.