The gameState stream event does not carry player names, so snapshot.white/black
were always undefined and the UI fell back to the literal strings "Black" and
"White". Fix by fetching the full game object (GET /api/tournament/{id}/game/{gameId})
on page load, which includes BotRef with real names, and storing them in
dedicated whiteName/blackName fields.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #15
Servers are now env-var configured; the Servers dialog, add form,
remove buttons, and TournamentServerService are all deleted.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
openJoinDialog now fetches user bots and official bots in parallel via
forkJoin. Each section shows its own empty state independently.
Official bot difficulty buttons are hidden when no official bots are
registered. User bots empty state links to /bots to create one.
Disables all join buttons while any join is in progress.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Map raw backend response (evaluation/continuationMoves) to frontend
model (eval/winChance/continuations). Add getFenHistory() call after
loading a game or PGN so runAnalysis() gets per-ply FEN history and
triggers analyzeGame() instead of falling back to single-position
analysis. Remove !hasAnnotations guard so positionAnalysis card shows
even when a game is loaded.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
User Profile info, no game before login/register, menu bar
---------
Co-authored-by: Lala, Shahd <Shahd.Lala@sybit.de>
Co-authored-by: shahdlala66 <shahd.lala66@gmail.com>
Reviewed-on: #2