0d971745a6cd3081d6f9ad065f8402133d9c9010
- 4 practice modes: Timed (SVG ring), Endless (3 lives), Category Drill, Speed Run
- Practice settings modal (timer duration, difficulty) with localStorage persistence
- History view: paginated table, SVG score chart, best-times-per-stratagem
- ELO rating system with server-side K=32 calculation and rank tiers PRIVATE–GENERAL
- Post-match result modal with ELO delta and round history
- Challenge modal showing challenger name + ELO (replaces toast)
- Dashboard hero card with ELO rank icon and daily sequence preview
- Leaderboard tabs: Practice Score / ELO / Speed Run
- Mobile hamburger nav drawer with slide-in animation
- DB migration: elo column, mode column, stratagem_stats table
- WS lobby-update now sends {name, elo, rank} objects
- View fade transitions, danger vignette at ≤5s, streak fire glow, combo badge
- Esc/Enter keyboard shortcuts for modals and practice
HELLDIVERS 2 – Stratagem Trainer
Trainings- und Wettkampf-App für Helldivers 2 Stratagems. Erkennt Arrow-Key-Eingaben, bewertet Geschwindigkeit und Genauigkeit, ermöglicht 1v1-Matches in Echtzeit.
Features
- Practice Mode – 97 Stratagems aus 15 Kategorien, 30s Timer, Streak-Multiplikator
- 1v1 Arena – Echtzeit-Matches via WebSocket, Best-of-10 Runden (first to 5)
- Dashboard – eigene Stats, Tages-Challenge, Online-Status anderer Spieler
- Leaderboard – Top-20 nach Gesamtpunktzahl
- Admin Panel – User anlegen/löschen, Temp-Passwörter vergeben
Stack
- Node.js / Express 5
- SQLite (
better-sqlite3, WAL-Modus) - WebSocket (
ws) - Session-Auth (
express-session+bcryptjs) - Vanilla JS, kein Frontend-Framework
Setup
npm install
node server.js
Beim ersten Start werden admin und jeremy mit zufälligen Temp-Passwörtern angelegt (Ausgabe in der Konsole).
Port
3012 — konfigurierbar via PORT-Umgebungsvariable
PM2
pm2 start ecosystem.config.js
Datenbankschema
Drei Tabellen in data/helldivers.db:
| Tabelle | Inhalt |
|---|---|
users |
Username, Passwort-Hash, Rolle, mustChange-Flag |
practice_sessions |
Stratagem, Kategorie, Zeit, Score, Timestamp |
matches |
Gewinner, Verlierer, Rundenstand, Timestamp |
Scoring
score = round((100 + (30 - elapsedSecs) × 3) × (1 + streak × 0.1))
- Basis: 100 Punkte
- Zeitbonus: bis zu 90 Punkte (bei < 1s)
- Streak-Multiplikator: +10 % pro korrektem Stratagem in Folge
Description
Languages
JavaScript
58%
CSS
27.4%
HTML
14.4%
Shell
0.2%