Local-first planner for choosing the next best permanent workshop upgrade in The Tower.
iOS App Store: The Tower - Idle Tower Defense
Live app: tower-upgrade-advisor.vercel.app
The Tower's workshop upgrades compete for the same coin budget, but their effects use different units: damage, attack speed, health, recovery, free upgrades, level skips, and more. Tower Upgrade Advisor gives players a clear next-buy recommendation without hiding the assumptions behind a single magic score.
If you are tracking a build and want to compare upgrade efficiency before spending coins, this is for you. It is not a full run simulator, module planner, or replacement for in-game judgment.
- Complete public workshop coverage - validates all 48 upgrades exposed by the public workshop calculator.
- Transparent next-buy ranking - ranks upgrades by marginal benefit per coin with visible Attack, Defense, and Utility weights.
- Reference DPS check - compares attack recommendations against the public DPS formula source where that model applies.
- Local profile tracking - stores multiple build profiles as local JSON files during local use.
- Readable data browser - shows per-level cost and effect tables with category coverage status.
- Repeatable verification - includes linting, type checks, tests, data validation, public-site coverage checks, and route stress tests.
Use it when you want to decide what to buy next from the permanent workshop. It is especially useful when you have a coin budget and want to compare attack, defense, and utility priorities without hand-checking dozens of tables.
Look elsewhere if you need exact hidden game internals, wave/run simulation, card/module optimization, or account syncing. The bundled data is based on visible public calculator values and may reflect display rounding at very high costs.
python -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
python app.pyThen open the local Flask URL printed by the server.
Requirements:
| Tool | Version |
|---|---|
| Python | 3.11+ |
| pip | bundled with Python |
| Node.js/npm | optional, only for Playwright scraper tooling |
From source:
git clone https://github.com/Nebulazer123/tower-upgrade-advisor.git
cd tower-upgrade-advisor
python -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"Optional extraction tooling:
make install-extract- Create a profile for a build.
- Enter available coins.
- Fill current workshop levels.
- Open recommendations and adjust Attack, Defense, and Utility weights.
- Use the Reference Check card to compare supported attack picks with the public DPS source model.
The Vercel demo uses ephemeral storage, so public demo profiles are temporary. Local runs save profiles under data/profiles/, which is intentionally ignored by git and Vercel.
Public references:
Current bundled coverage:
| Category | Loaded | Public reference |
|---|---|---|
| Attack | 17 | 17 |
| Defense | 18 | 18 |
| Utility | 13 | 13 |
| Total | 48 | 48 |
The visible-table scraper exists because the public calculator pads raw DOM text with hidden zero-font characters. Use the maintained scraper instead of raw textContent extraction:
python scripts/verify_data_coverage.py --strict
python scripts/verify_site_structure.py
python scripts/scrape_public_workshop_visible.py --mergemake lint
make typecheck
make test
make validate
make coverage-report
make stressDeployment is configured for Vercel Services with app.py as the Flask entrypoint. The production app is currently deployed at tower-upgrade-advisor.vercel.app.
data/raw/,data/profiles/, caches, and local virtual environments are ignored..vercelignorekeeps local profile data out of deployments..github/repo-meta.ymlcontains a proposed GitHub About description, homepage, and topics. Apply it manually or withgh repo editafter maintainer review.- The security contact in SECURITY.md still needs a dedicated maintainer channel or GitHub private vulnerability reporting enabled.
Issues and pull requests are welcome. See CONTRIBUTING.md for setup, verification, and data-change guidance.
MIT - see LICENSE.
