Commit Graph

53 Commits

Author SHA1 Message Date
Kroonk
a21e2df6c4 fix: allow SSO with only SSO_CLIENT_SECRET configured, since other env vars have defaults
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 2m35s
2026-05-21 11:23:05 +02:00
Kroonk
d47e87ef82 feat: implement Keycloak SSO integration with JIT provisioning and Next.js login button
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 2m31s
2026-05-21 10:45:30 +02:00
Michess
0b3228c9d7 feat: live game tiles on homepage + bot spectating
- GET /v1/games/live returns all active games with both players assigned,
  including current FEN (computed server-side via chess.js)
- LiveGames component on homepage: mini chessboard tiles (160px) that
  auto-refresh every 3s, clickable to join as spectator
- Tournament page: 'Zuschauen' button for non-players on ongoing rounds
  (bot vs bot, human vs human, human vs bot all spectatable)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:03:26 +02:00
Michess
86fbdd39ed fix: resolve all 3 open Gitea issues
Issue #1 - Bot vs Bot Turnierspiele:
- triggerBotMove ruft sich rekursiv selbst auf wenn der nächste Spieler
  auch ein Bot ist (bot vs bot läuft jetzt vollautomatisch durch)
- startNextRoundGames erstellt aktive Spiele für die nächste Runde wenn
  eine Runde endet; bot vs bot Spiele starten sofort ohne Spectator
- updateRoundResult gibt jetzt die nächste Runden-Daten zurück statt void
- Alle Handler (sendMove, claimAbandoned, claimTimeout, triggerBotMove)
  starten die nächste Runde automatisch

Issue #2 - Bot-Schwierigkeit zu hoch:
- randomChance zu StockfishLevel hinzugefügt: Level 1=80%, 2=50%,
  3=15%, 4=3%, 5-6=0% zufällige Züge statt Stockfish-Best-Move
- Gilt sowohl für Socket-Bot-Züge als auch /v1/ai/move REST-Endpoint

Issue #3 - Turnier beenden + Zurück-Button:
- POST /:code/cancel Endpoint (nur Host), setzt status='finished'
- Turnier-Seite: 'Turnier beenden' Button für Host (rot, outline)
- tournamentCode Feld im Game-Typ; wird beim Erstellen von Turnierspielen
  gesetzt (inkl. Folgerunden)
- GamePage zeigt '← Zur Turnierübersicht' Link wenn tournamentCode gesetzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 07:46:40 +02:00
Michess
536160bba6 feat(elo): add ELO rating system
- DB: elo column on user table (default 1200, added via ALTER TABLE IF NOT EXISTS)
- ELO calculated after every game save (K=32, min 100)
- Bots use their fixed ELO values; only human players' ELO changes
- AI page games save with bot name (e.g. 'Holzpferd Heinz') instead of 'Stockfish'
- User profile shows ELO badge below name
- Header shows current ELO for logged-in users (links to profile)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 07:32:57 +02:00
Michess
157c14c11e feat(bots): add named bot profiles with ELO-based difficulty
- 5 bot profiles (Holzpferd Heinz to Meister Magnus, ELO 200-1400) in
  server/bots.ts and client/bots.ts with emoji + descriptions
- Bot users auto-created in DB on server startup (role='bot')
- AI page replaced difficulty buttons with bot profile cards
- Tournament host can add bots via dropdown (POST /:code/add-bot)
- Bot auto-moves triggered on joinLobby and after each human move
- Fixed clock start order so bot-as-white games initialize correctly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 13:32:43 +02:00
Michess
4825a57a54 feat: add real-time notification system and fix admin login bug
- Fix login: role field was missing from session (admin page inaccessible)
- Add onlineUsers map in socket/state.ts to track connected users
- Join personal user:${id} socket room on connect for targeted notifications
- Emit friendRequestReceived/friendRequestAccepted socket events from friends controller
- Add sendGameInvite socket event handler on server
- New NotificationContext: global socket provider for registered users
- New NotificationPanel: bell icon with unread badge and dropdown in header
- Friends page: inline game invite input per friend with sendGameInvite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 12:35:09 +02:00
Michess
aeb5fe313e feat: add time controls, correspondence games, and tournament mode
**Zeitmodi (Blitz/Rapid):**
- 5, 10, 30 Min Zeitkontrolle bei Spielerstellung
- Server-seitige Uhren: Zeit wird bei jedem Zug abgezogen
- Timeout-Erkennung via claimTimeout Socket-Event
- Schachuhr-Anzeige in GamePage (rot bei < 30s)
- Turnierspiele erhalten automatisch Zeitkontrolle

**Tagespartien (Correspondence):**
- Neue DB-Tabelle correspondence_game
- REST API: erstellen, beitreten, Zug machen, aufgeben
- Seite /correspondence: Liste aktiver Tagespartien
- Seite /correspondence/[code]: Spielen mit interaktivem Brett
- Einladungslink teilen, Gegner tritt via Link bei

**Turniermodus (Round-Robin):**
- Neue DB-Tabellen: tournament, tournament_player, tournament_round
- Round-Robin Paarungen mit Circle-Methode
- Turnier erstellen: /tournament/create
- Turnierliste: /tournament
- Turnierseite /tournament/[code]: Standings, Runden, Spiele
- Automatische Aktivisierung der nächsten Runde
- Turnierspiele werden als normale activeGames erstellt
- Ergebnisse aktualisieren Punkte automatisch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 09:44:35 +02:00
Michess
0cc5a8e99c fix(ai): fix database model mapping for AI matches and missing AI names 2026-04-13 15:06:45 +02:00
Michess
f7b87f2941 fix: use existsSync instead of require(fs) in ESM module 2026-04-13 14:25:31 +02:00
Michess
4bc6ea58e6 fix: handle stockfish process error, try /usr/games/stockfish path 2026-04-13 14:19:58 +02:00
Michess
ebbc8227fd fix: use native stockfish binary via debian image 2026-04-13 13:40:21 +02:00
Michess
6b676d3015 fix: use child_process to spawn stockfish via stdin/stdout 2026-04-13 13:33:26 +02:00
Michess
694177c108 feat: Vollständiges Rebranding zu MiChess, Copyright Tom Misch
- Alle @chessu/ → @michess/ (Package-Namen und Imports)
- Theme-Namen chessuDark/Light → michessDark/Light
- Alle Display-Texte: chessu/Michess → MiChess
- Autor: dotnize → Tom Misch
- Copyright: Nathaniel Tampus → Tom Misch
- README komplett neu (Deutsch, MiChess-spezifisch)
- CONTRIBUTING.md neu
- FUNDING.yml + CODE_OF_CONDUCT.md entfernt
- Fork-Hinweis auf chessu bleibt im README erhalten (MIT-Pflicht)
- pnpm-lock.yaml entfernt (wird beim Build neu generiert)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 10:47:16 +02:00
Michess
50464981c2 fix: Stockfish via npm-Paket statt Alpine apk
- stockfish als npm dependency (kein apk add nötig, portabel)
- Dockerfile: nur noch git via apk, kein stockfish
- docker-compose.yml: version-Zeile entfernt (veraltet)
- Controller auf npm-Package-API umgeschrieben (postMessage/onmessage)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 10:23:33 +02:00
Michess
7dac042d73 feat: Michess – Initiales Setup auf Basis von chessu
- Rebranding: chessu → Michess (Header, Footer, Metadata, Session-Cookie)
- Stockfish KI-Integration: 6 Schwierigkeitsgrade (Anfänger bis Meister)
- Admin-Panel: Nutzerverwaltung, Sperren/Entsperren, Git-Pull-Update
- Freundessystem: Anfragen, Freundesliste, Nutzersuche
- DB-Schema: role, banned, friend_request, friendship Tabellen
- Docker: NAS-optimiertes docker-compose.yml mit PostgreSQL Healthcheck
- Stockfish binary via apk im Alpine-Image installiert
- .env.example für einfaches Deployment
- scripts/update.sh für manuelles NAS-Update
- Brain.md + Plan.md als Projekt-Gedächtnis

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 10:02:52 +02:00
Nathaniel Tampus
c591415e3d fix registration for empty email 2023-08-11 20:46:02 +08:00
Nathaniel Tampus
cf63f73280 fix registration for empty email 2023-06-19 21:57:03 +08:00
Nathaniel Tampus
da7b4c40a3 organize imports 2023-05-01 15:15:49 +08:00
Nathaniel Tampus
2feec2de02 fix id number checks for archived games api 2023-04-07 12:25:40 +08:00
Nathaniel Tampus
bdc8dab1ad api for fetching user profile 2023-04-05 22:29:54 +08:00
Nathaniel Tampus
bec764dcee improve id checks for getting finished games 2023-04-05 22:17:25 +08:00
Nathaniel Tampus
2fadce8ae1 improve checks for update user api 2023-04-05 21:02:49 +08:00
Nathaniel Tampus
577cba6ff4 count game history stats for users 2023-04-02 18:24:21 +08:00
Nathaniel Tampus
5088e25769 route for fetching finished games 2023-04-01 23:42:33 +08:00
Nathaniel Tampus
af25b4ff20 update db models 2023-04-01 23:15:54 +08:00
Nathaniel Tampus
ee8f9a58fd use default import for user model 2023-03-25 19:13:00 +08:00
Nathaniel Tampus
86f4f9d42f Merge branch 'main' into auth 2023-03-20 18:53:35 +08:00
Nathaniel Tampus
17a0befae3 use 204 status to avoid logging 404 to console 2023-03-20 18:22:26 +08:00
Nathaniel Tampus
8a80d6e9fd remove extra imports (finallyyyy)
just went crazy fixing merge conflicts lol
2023-03-19 21:53:08 +08:00
Nathaniel Tampus
6250d90192 Merge branch 'main' into auth 2023-03-19 21:51:22 +08:00
Nathaniel Tampus
9d4198d918 remove extra imports 2023-03-19 21:50:21 +08:00
Nathaniel Tampus
c6bd485d61 update game data on when updating guest names 2023-03-19 21:49:48 +08:00
Nathaniel Tampus
a76f5b3839 remove extra imports 2023-03-19 21:45:43 +08:00
Nathaniel Tampus
496914e14e update game data on when updating guest names 2023-03-19 21:45:15 +08:00
Nathaniel Tampus
2990388247 update deps 2023-03-19 21:45:15 +08:00
Nathaniel Tampus
2921bce6f8 update game data on when updating guest names 2023-03-19 21:43:22 +08:00
Nathaniel Tampus
59dba43257 remove extra imports 2023-03-19 21:41:19 +08:00
Nathaniel Tampus
fcb0fd26fd update game data on when updating guest names 2023-03-19 21:39:51 +08:00
Nathaniel Tampus
dc2f218115 disallow underscores for names 2023-03-19 21:24:41 +08:00
Nathaniel Tampus
9ae628c592 update game data on when updating guest names 2023-03-19 21:23:15 +08:00
Nathaniel Tampus
b6df2c0df1 sync user info in games, adjust game timeout 2023-03-19 21:19:09 +08:00
Nathaniel Tampus
1fab992f53 add auth controllers & validation improvements 2023-03-19 20:52:58 +08:00
Nathaniel Tampus
17ef05b31c sync user info in games, adjust game timeout 2023-03-19 20:51:29 +08:00
Nathaniel Tampus
d9bb753315 log cleanup 2023-03-06 19:58:38 +08:00
Nathaniel Tampus
caa12fd5ce check pattern in backend as well 2023-03-06 18:59:35 +08:00
Nathaniel Tampus
440e8cd540 exclude ended games from public api 2023-03-06 18:43:50 +08:00
Nathaniel Tampus
fd66897ecd start pgn with empty string 2023-03-06 14:35:18 +08:00
Nathaniel Tampus
fe0e045fd8 show player disconnected state 2023-03-06 12:42:49 +08:00
Nathaniel Tampus
f3eaf23a8f use req.params directly 2023-03-04 18:44:20 +08:00