技術ノート
SimCraft Web
v1.0.0 Released
💡 Feature suggestions welcome

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.

Scroll

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.

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.

· · ·
🌐 Browser — Alpine.js SPA
⚡ FastAPI Backend — Python 3.10+
🗡️ simc binary — SimulationCraft engine
📊 Plotly / kaleido — PNG chart rendering
🗄️ PostgreSQL — results, users, reactions, logs

Battle.net OAuth2 handles login  ·  Keycloak secures the admin panel  ·  Sessions stored in PostgreSQL

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)

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.

FastAPI · Python 3.10+
Alpine.js 3.x
PostgreSQL 15 · SQLAlchemy
SimulationCraft (simc)
Plotly · kaleido (PNG)
Docker Compose
Battle.net OAuth2
Keycloak · Admin SSO
structlog · Logging
slowapi · Rate Limiting