Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
Pick any Old School RuneScape boss and get the best DPS setup from what's actually in your bank. Plus the mechanics and spec weapons that matter for that fight.
GamesTypeScript · JavaGitHub @ENiceAppsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Pick any Old School RuneScape boss and get a DPS-optimised gear loadout built from your own bank, plus the mechanics and special-attack weapons that matter for the fight.
Not affiliated with Jagex Ltd. Old School RuneScape is a trademark of Jagex. This is a fan-made, third-party tool. All game data comes from the OSRS Wiki.
/boss/[slug]).There's also an item browser (/items) with sortable bonuses and live GE
prices, and shareable loadout links that encode a setup into a URL.
OSRS Wiki Real-time Prices API ──► Next.js app (read-only server proxy adds the
(GE prices, item mapping) wiki-required User-Agent; caches briefly)
│
RuneLite plugin ──► bank.json ──► your browser ──► DPS engine + optimizer
(optional, opt-in) (local file) (reads the file ──► recommended loadout
reads your game in .runelite locally; nothing
state, no network directory is uploaded)
There is no backend that stores or even receives your bank. The plugin writes a file on your machine; the browser reads it locally. Without the plugin (or without connecting the file), the app runs in Budget mode — pick a boss and it builds the best setup for a GP cap, so you can try every feature with no setup.
The RuneScape community rightly scrutinises any tool that reads game data, so here is exactly what happens — see SECURITY.md for the full write-up.
bank.json inside your RuneLite directory. The web
app reads that file in your browser. Nothing is uploaded to any server.plugin/src/.../BankSyncPlugin.java.)plugin/No database, no auth service, no server-side state.
npm install
cp .env.example .env.local # optional — only needed for GE prices / feedback email
npm run dev # http://127.0.0.1:3000
The app runs fully without any env vars — they only enable live GE prices and the feedback email relay.
All optional; documented in .env.example:
| Variable | For | Notes |
|---|---|---|
WIKI_USER_AGENT_CONTACT | GE prices | Contact info the OSRS Wiki requires in the User-Agent. |
RESEND_API_KEY | feedback email | Resend key. Blank in dev → feedback prints to the console. |
EMAIL_FROM | feedback email | Verified sender address. |
FEEDBACK_TO | feedback inbox | Where in-app feedback is emailed. |
No secrets are committed — .env* is gitignored (only *.example is tracked).
app/ Next.js routes & API endpoints
api/ wiki price/mapping proxies (read-only) + feedback relay
boss/[slug]/ the one dynamic boss page every boss shares
components/ React UI (panels, modals, the equipment grid, BankConnect, …)
lib/
dps/ the combat/DPS math engine
optimize/ the bank-driven loadout optimizer
localBank.ts reads the plugin's local bank.json (File System Access API)
liveBank.ts adapts the local bank into the shape the UI consumes
data/ static game data (weapon styles, mechanics, spells, …)
*/catalog.ts GENERATED — do not hand-edit (see below)
scripts/ data-build codegen + the DPS oracle harness
plugin/ the RuneLite local-bridge plugin (Java/Gradle)
tests/ Vitest unit + regression tests
The item and monster catalogs (data/items/catalog.ts,
data/monsters/catalog.ts) are generated from vendored OSRS Wiki data by the
build scripts and regenerated on every build:
npm run build-data # runs automatically before build & test
npm test # Vitest unit + regression suite
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run oracle # cross-check the DPS engine against the real wiki calculator
See SECURITY.md. TL;DR: no backend receives your data, no third-party tracking, and the RuneLite plugin only writes a local file.
See CONTRIBUTING.md.