- 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>
5.7 KiB
5.7 KiB
Plan.md — MiChess Entwicklungsplan
Vision
MiChess ist eine selbst-gehostete Schachplattform für eine private Community, inspiriert von Lichess.org. Läuft als Docker-Container auf einer Synology/QNAP NAS, komplett ohne Cloud-Abhängigkeit.
Phase 1: Foundation (Basis)
1.1 Projekt-Setup
- chessu (MIT) als Basis klonen
- Brain.md & Plan.md erstellen
- Git remote auf
https://git.mischlabs.de/MrDiderot/MiChess.gitsetzen - Initaler Push (chessu-Basis + eigene Dateien)
1.2 Rebranding chessu → MiChess
package.jsonNamen anpassen- README durch MiChess-README ersetzen
- Alle Titel/Meta-Tags im Frontend ändern
- Logo-Platzhalter anpassen
1.3 Docker NAS-Deployment
docker-compose.ymlüberarbeiten (michess-app, postgres, eigene Secrets).env.exampleerstellen mit allen benötigten Variablen- Stockfish in Docker-Image einbauen (
apk add stockfish) - Update-Script:
scripts/update.sh(git pull + docker restart) - Deployment-README schreiben (einziger Befehl für NAS)
Phase 2: Datenbank-Erweiterungen
2.1 Schema-Änderungen
-- User: Admin-Rolle hinzufügen
ALTER TABLE "user" ADD COLUMN role VARCHAR(16) DEFAULT 'user';
-- Freundschaftsanfragen
CREATE TABLE IF NOT EXISTS "friend_request" (
id SERIAL PRIMARY KEY,
from_id INT REFERENCES "user"(id) ON DELETE CASCADE,
to_id INT REFERENCES "user"(id) ON DELETE CASCADE,
status VARCHAR(16) DEFAULT 'pending', -- pending | accepted | rejected
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(from_id, to_id)
);
-- Freunde (bidirektional, normalisiert als kleinere_id + größere_id)
CREATE TABLE IF NOT EXISTS "friendship" (
id SERIAL PRIMARY KEY,
user_id_1 INT REFERENCES "user"(id) ON DELETE CASCADE,
user_id_2 INT REFERENCES "user"(id) ON DELETE CASCADE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id_1, user_id_2)
);
Phase 3: Stockfish AI-Integration
3.1 Backend
stockfishnpm-Paket als Server-Dependencyserver/src/controllers/stockfish.controller.ts— Stockfish-Prozess-Manager- Schwierigkeitsgrade:
Level Name Stockfish Skill Depth 1 Anfänger 0 1 2 Leicht 3 3 3 Mittel 8 5 4 Fortgeschritten 14 10 5 Experte 18 15 6 Meister 20 20 - Socket-Events:
ai:move,ai:game_start,ai:game_end
3.2 Frontend
- "Gegen KI spielen" Button auf Startseite
- Schwierigkeitsgrad-Auswahl Modal
- KI-Spielpartie-UI (keine zweite Socket-Session nötig, nur lokal)
Phase 4: Admin-Panel
4.1 Backend
isAdminMiddleware für/v1/admin/*GET /v1/admin/users— alle Nutzer auflisten (paginiert)PATCH /v1/admin/users/:id— Nutzer sperren/entsperren, Rolle ändernDELETE /v1/admin/users/:id— Nutzer löschenPOST /v1/admin/update— git pull + trigger restartGET /v1/admin/stats— Nutzerzahl, Spiele, etc.
4.2 Frontend
/adminRoute (nur für Admins sichtbar)- Dashboard mit Statistiken
- Nutzertabelle mit Such-/Filterfunktion
- "Website aktualisieren" Button mit Bestätigung
- Nutzer sperren/entsperren/löschen
4.3 Erster Admin
ADMIN_EMAILenv-Variable- Beim Server-Start: wenn User mit dieser E-Mail existiert → Role = 'admin'
- Alternativ:
ADMIN_SETUP_TOKENfür initiale Admin-Einrichtung
Phase 5: Freundessystem
5.1 Backend
POST /v1/friends/request— Anfrage senden (via Username)GET /v1/friends/requests— eigene Anfragen (eingehend + ausgehend)PATCH /v1/friends/requests/:id— annehmen/ablehnenGET /v1/friends— eigene FreundeslisteDELETE /v1/friends/:id— Freundschaft beendenGET /v1/users/search?q=— Nutzer suchen
5.2 Frontend
- Freundesliste im User-Profil
- "Freund hinzufügen" Button auf fremden Profilseiten
- Benachrichtigungs-Badge bei ausstehenden Anfragen
- "Freund herausfordern" → direktes Spiel erstellen
Phase 6: Registrierungs-Flow
Aktueller chessu-Flow:
name + email + password → Account erstellt
Gewünschter MiChess-Flow:
email + password→ Account erstellt (noch kein Nutzername)- Weitergeleitet zu "Nutzername wählen" (einmalig, nicht änderbar)
- Nutzername prüfen: verfügbar? gültig? → bestätigen
- Account aktiv
nameFeld nullable machen in DB (bis Schritt 2)POST /v1/auth/choose-usernameEndpoint- "Username wählen"-Seite im Frontend
Phase 7: Sonstige Verbesserungen
- Zeitkontrolle für Partien (Bullet/Blitz/Rapid/Classical)
- Rating-System (Elo) für Nutzer-vs-Nutzer
- Rematch-Funktion
- Spectator-Verbesserungen (Live-Zuschauer)
- Mobile-Optimierung
Deployment-Anleitung (Ziel-Zustand)
# Einmalige Erstinstallation auf der NAS:
git clone https://git.mischlabs.de/MrDiderot/MiChess.git michess
cd michess
cp .env.example .env
# .env anpassen (Passwörter, Admin-Email, etc.)
docker compose up -d
# Update (manuell oder per Admin-Panel):
./scripts/update.sh
# oder via Admin-Panel "Website aktualisieren" Button
Git-Strategie
main— Production-Branch (immer deploybar)- Features werden direkt auf main entwickelt (kleines Team)
- Issues aus
git.mischlabs.deals Feature-Tracker - Commit-Messages:
feat:,fix:,admin:,docker:,ui:Prefixe
Prioritäten (Reihenfolge)
- P0: Foundation + Docker + Git (läuft auf NAS)
- P0: Stockfish AI (Kernfeature)
- P1: Admin-Panel (Verwaltbarkeit)
- P1: Freundessystem (Social)
- P2: Registrierungs-Flow verfeinern
- P3: Zeitkontrolle + Rating