World of Warcraft · DPS Simulator
SimCraft
Web
SimulationCraft · FastAPI · Alpine.js · Battle.net OAuth2
Browser-based DPS simulator powered by SimulationCraft.
Login with Battle.net, import your character, simulate your best performance.
What it does
Every Feature You Need
SimCraft Web wraps the SimulationCraft engine in a clean web interface — no terminal, no local install. Log in with Battle.net, pick a character and get your DPS report in seconds.
Armory Simulations
Log in via Battle.net OAuth2. Your characters are fetched automatically from the Blizzard Armory API — no copy-pasting required.
Addon Export Support
Don't want to log in? Paste your SimulationCraft addon export text directly and run a full simulation without a Battle.net account.
Great Vault Finder
Paste your addon export with the Great Vault open in-game. The app auto-detects all vault items, simulates each as an upgrade and ranks them by DPS gain.
DPS Trend Chart
Track your DPS over time per character and fight style. Charts rendered server-side to PNG via Plotly/kaleido, embedded directly in the result page.
Rankings
Top 10 DPS leaderboard with a 🥇🥈🥉 podium on the home page. Filterable by fight style, class and spec. One entry per unique character.
i18n PL / EN
Full internationalization with a language switcher, browser auto-detection and localStorage persistence. Adding a new language takes only one JSON file.
Emoji Reactions
React to any simulation result with 🔥💪😢💀🤣. Toggle or swap reactions — logged-in users only. Reaction counts shown in profile history.
Admin Panel
Keycloak-secured panel for managing news, appearance, simulation limits, active jobs, user list and structured logs — including frontend JS errors.
Social Sharing
Every result has a unique URL with OG meta tags for rich previews on Discord and Twitter. Public profiles at /u/{bnet_id} with per-character privacy controls.
How it works
Clean Request Flow
The browser talks to a FastAPI backend over REST. The backend spawns the
simc binary as a subprocess, stores results in PostgreSQL
and renders charts server-side. Jobs are polled — no persistent WebSocket needed.
Battle.net OAuth2 handles login · Keycloak secures the admin panel · Sessions stored in PostgreSQL
REST API
Key Endpoints
Every simulation result, ranking and profile is publicly accessible via a stable URL. The full API reference is available in the README.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/simulate |
Run a simulation |
| GET | /api/job/{job_id} |
Poll job status (running / done / error) |
| GET | /api/result/{job_id}/json |
Full simulation results as JSON |
| GET | /api/result/{job_id}/dps-chart.png |
DPS breakdown chart as PNG |
| POST | /api/vault/start |
Start a Great Vault group simulation |
| GET | /api/rankings |
Top 10 DPS leaderboard (filterable) |
| GET | /api/profile/{bnet_id} |
Public user profile |
| GET | /api/history/trend |
DPS over time for a character |
| PATCH | /admin/api/appearance |
Update app appearance (admin only) |
Under the Hood
Technology Stack
Python on the backend for rapid iteration, Alpine.js on the frontend for a lightweight reactive SPA without a heavy build step. The entire stack runs in Docker Compose — one command to start everything.