# Changelog ## [Unreleased] ### Changed - Release-Automation ergänzt: `npm run release:sync`, `npm run release:verify`, `.githooks/pre-commit` und versionsbasiertes Cache-Busting aus `package.json` – helldivers-trainer - Practice- und Match-Flow wirken jetzt deutlich spielerischer mit Deployment-Countdown, Fokusbereich, direkter Feedback-Anzeige und staerkeren Mobile-HUDs - Stratagem-Icons wurden breit ueberarbeitet und koennen ueber das neue Wiki-Download-Skript einfacher aktualisiert werden - Admin-Bereich zeigt mehr Nutzer- und Aktivitaetsdaten, inklusive Sessions, letzter Aktivitaet, Passwort-Reset und Rollenpflege ## [2.1.3] – 2026-03-31 ### Fixed - **Schwarzes Blob hinter Stratagem-Icon**: `::before` Pseudoelement ohne `position: relative` am Parent positionierte sich falsch und wurde als schwarzer Kreis gerendert — entfernt - **Tabellen-Spaltenumbrüche**: `stratagem-icon-sm` wieder auf 22px (von 26px) damit Stratagemnamen in der History-Tabelle nicht umbrechen --- ## [2.1.2] – 2026-03-31 ### Changed - **Stratagem main icon**: Größer (86→110px, mobil 70→88px), hellerer Gold-Filter mit `drop-shadow` Glow, leuchtender Kreis-Hintergrund für besseren Kontrast - **Queue preview**: Icons größer (36→44px), Labels wrappen jetzt über 2 Zeilen statt abzuschneiden, Breite von 60→72px pro Item, Abstufung der Opazität (75%/55%/40% statt 70%/45%) - **Dashboard/Tabellen-Icons** (`-md` und `-sm`): Größer (40→52px / 22→26px), stärkerer Gold-Filter, höhere Opazität (0.85→1 / 0.7→0.9) für bessere Erkennbarkeit --- ## [2.1.1] – 2026-03-31 ### Fixed - **Speedrun scores never saved**: Individual scores were blocked by `if (mode !== 'speedrun')` guard; now saved per-stratagem like other modes. Final bulk-save with invalid `__speedrun__` stratagem name removed (was causing 400 errors). - **Dashboard recent-sessions icons missing**: `r.icon` was always `undefined` since the server doesn't store icon paths in the DB. Now looks up icon from `state.stratagems` by name. - **Variable shadowing in `renderDashboard`**: Outer `const r = eloRankFor(...)` was shadowed by `recent.map(r => ...)`. Renamed outer to `myRank`. - **N+1 DB queries in `broadcastLobbyUpdate`**: Was running one `SELECT elo` per online user. Now batches into a single `WHERE username IN (...)` query. - **N+1 DB queries in dashboard endpoint**: Same pattern fixed for the `/api/dashboard` online-users list. - **Unnecessary `typeof` guards**: `typeof u === 'object'` checks in lobby/dashboard removed — `lobby-update` always sends objects, never plain strings. - **Duplicate `else if (mode === 'endless')` branch in `nextStratagem`**: Was identical to the `else` branch below it; merged. --- ## [2.1.0] – 2026-03-31 ### Added - **Stratagem icons**: 65 SVG icons downloaded from community icon set, served as static files under `/icons/`; icon download script at `scripts/download-icons.js` - **Gold CSS filter** on all stratagem icons to match the game's yellow accent theme - **Session summary modal**: opens after stopping practice or finishing a drill/speedrun — shows score, completed count, accuracy, best time, and top 5 stratagems - **Queue preview strip**: shows next 3 upcoming stratagems (with icons) below the active stratagem - **Score popup animation**: floating `+N pts` text appears on every correct completion - **Shake animation on wrong input**: stratagem icon shakes on incorrect arrow key - **Icon complete pulse**: stratagem icon scales + brightens when sequence is completed correctly - **ELO rank icon** in post-match result header (matches rank tier badge) - **Inline icons** in history table rows, best-per-stratagem table, and leaderboard - `scripts/download-icons.js` — automated icon fetcher from GitHub community SVG repo ### Changed - `index.html` fully rewritten: new elements for icon display, queue, score popup, session summary modal - `app.js` fully rewritten (~1100 lines): icon helpers, queue builder, popup system, session stats, improved match/lobby flows - `server.js` STRATAGEMS array: all 65 entries now have `icon` field (or `null` for missing ones) - `broadcastLobbyUpdate()` now sends `[{name, elo, rank}]` objects with CSS-safe rank labels - `challenge-received` WS event now includes challenger ELO for display in challenge modal --- ## [2.0.0] – 2026-03-30 ### Added - **4 Practice modes**: Timed (configurable 15/30/45s, SVG ring timer), Endless (3 lives), Category Drill (progress bar), Speed Run (all stratagems, total time) - **Settings modal**: timer duration and difficulty (Easy/Normal/Hard) persisted in localStorage - **History view**: paginated session table with mode/category filters, SVG polyline score chart, best-time-per-stratagem table - **ELO rating system**: server-side ELO (K=32) calculated after every match; rank tiers PRIVATE → GENERAL - **Post-match result modal**: ELO delta display (`before → after +N`), round-by-round history - **Challenge modal**: incoming challenge shows challenger name and ELO; replaces toast notification - **Dashboard hero card**: ELO rank badge, rank icon, daily sequence preview arrows, mode column in recent sessions - **Leaderboard tabs**: Practice Score / ELO Rating / Speed Run with correct column headers per tab - **Mobile hamburger nav**: slide-in drawer with overlay backdrop, Esc key closes modals - **DB migration**: `elo` column on users, `mode` column on practice_sessions, `stratagem_stats` table - **Lobby redesign**: ELO + rank shown per player, 2-column layout (Online + Incoming Challenges) - View fade transitions on every view switch - Danger vignette flash at ≤5s timer remaining - Streak fire glow effect (streak ≥ 5), combo multiplier badge (×N, streak ≥ 2) - Keyboard shortcuts: `Esc` stops practice / closes modals, `Enter` starts practice - `aria-label` on all D-pad buttons, modals with `role="dialog"` and `aria-modal="true"` ### Changed - Full CSS redesign (~700 → ~1200 lines): glassmorphism cards, new design tokens, SVG timer ring, skeleton shimmer, animated modals - Dashboard online list now shows ELO; lobby shows ELO + rank per player - WS `lobby-update` now sends `[{name, elo, rank}]` objects instead of plain usernames - WS `challenge-received` now includes challenger ELO - Practice leaderboard query joined with `users.elo` for rank badge display --- ## [1.0.0] – 2026-03-30 ### Added - Initial release - Session-based auth with admin and user roles (mustChange password flow) - Admin panel: create/delete users, view temp passwords - Practice mode: randomized stratagem training with 30s timer, streak scoring - Category filters for practice mode - 1v1 mode via WebSocket: challenge system, lobby, real-time match (first to 5 rounds) - Dashboard: personal stats, daily challenge, online users, recent sessions - Leaderboard: top-20 by total score, sessions, match win rate - SQLite database (WAL mode) for users, practice sessions, matches - Helldivers 2 military UI theme (dark, yellow accents, grid overlay, scanlines) - Mobile D-pad support - Arrow key input with correct/wrong animations