Files
Michess/Plan.md
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

190 lines
5.7 KiB
Markdown

# 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
- [x] chessu (MIT) als Basis klonen
- [x] Brain.md & Plan.md erstellen
- [ ] Git remote auf `https://git.mischlabs.de/MrDiderot/MiChess.git` setzen
- [ ] Initaler Push (chessu-Basis + eigene Dateien)
### 1.2 Rebranding chessu → MiChess
- [ ] `package.json` Namen 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.example` erstellen 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
```sql
-- 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
- [ ] `stockfish` npm-Paket als Server-Dependency
- [ ] `server/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
- [ ] `isAdmin` Middleware für `/v1/admin/*`
- [ ] `GET /v1/admin/users` — alle Nutzer auflisten (paginiert)
- [ ] `PATCH /v1/admin/users/:id` — Nutzer sperren/entsperren, Rolle ändern
- [ ] `DELETE /v1/admin/users/:id` — Nutzer löschen
- [ ] `POST /v1/admin/update` — git pull + trigger restart
- [ ] `GET /v1/admin/stats` — Nutzerzahl, Spiele, etc.
### 4.2 Frontend
- [ ] `/admin` Route (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_EMAIL` env-Variable
- [ ] Beim Server-Start: wenn User mit dieser E-Mail existiert → Role = 'admin'
- [ ] Alternativ: `ADMIN_SETUP_TOKEN` fü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/ablehnen
- [ ] `GET /v1/friends` — eigene Freundesliste
- [ ] `DELETE /v1/friends/:id` — Freundschaft beenden
- [ ] `GET /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:
1. `email + password` → Account erstellt (noch kein Nutzername)
2. Weitergeleitet zu "Nutzername wählen" (einmalig, nicht änderbar)
3. Nutzername prüfen: verfügbar? gültig? → bestätigen
4. Account aktiv
- [ ] `name` Feld nullable machen in DB (bis Schritt 2)
- [ ] `POST /v1/auth/choose-username` Endpoint
- [ ] "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)
```bash
# 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.de` als Feature-Tracker
- Commit-Messages: `feat:`, `fix:`, `admin:`, `docker:`, `ui:` Prefixe
---
## Prioritäten (Reihenfolge)
1. **P0**: Foundation + Docker + Git (läuft auf NAS)
2. **P0**: Stockfish AI (Kernfeature)
3. **P1**: Admin-Panel (Verwaltbarkeit)
4. **P1**: Freundessystem (Social)
5. **P2**: Registrierungs-Flow verfeinern
6. **P3**: Zeitkontrolle + Rating