User-Portal
Uebersicht
Das User-Portal ist die Hauptansicht fuer Spieler. Es ist unter / erreichbar und erfordert eine Anmeldung.
Tabs
Schedule
14-Tage Kalenderansicht mit Team-Verfuegbarkeit.
Features:
- Tageseintraege mit Grund (Training, Premier, Off-Day, etc.)
- Spieler-Matrix mit Verfuegbarkeiten
- Eigene Verfuegbarkeit direkt setzen
- Zeitfenster-Eingabe mit Zeitzonen-Konvertierung
- Farbkodierte Status-Indikatoren
- Abwesende Spieler markiert
API-Aufrufe:
GET /api/schedule/next14- Schedule ladenPOST /api/schedule/update-availability- Verfuegbarkeit setzen
Availability
Verfuegbarkeits-Management fuer kommende Tage.
Features:
- Schnelle Zeiteingabe fuer mehrere Tage
- Zeitzonen-Konvertierung (User → Bot)
- Visuelle Zeitfenster-Anzeige
Recurring
Woechentliche Verfuegbarkeits-Muster.
Features:
- 7-Tage-Wochen-Matrix
- Pro Tag: Zeitfenster oder "nicht verfuegbar"
- Aenderungen werden auf zukuenftige leere Slots angewendet
API-Aufrufe:
GET /api/recurring-availabilityPOST /api/recurring-availabilityDELETE /api/recurring-availability/:day
Absences
Abwesenheits-Verwaltung.
Features:
- Datum-Bereich waehlen (Start + Ende)
- Optionaler Grund
- Liste aller eigenen Abwesenheiten
- Bearbeiten und Loeschen
API-Aufrufe:
GET /api/absencesPOST /api/absencesPUT /api/absences/:idDELETE /api/absences/:id
Matches
Scrim-Uebersicht und -Verwaltung (geteilt mit Admin).
Siehe Matches & Statistiken.
Stratbook
Team-Strategien (geteilt mit Admin).
Siehe Stratbook.
Statistics
Scrim-Statistiken und Charts (geteilt mit Admin).
Siehe Matches & Statistiken.
Layout
Sidebar
Die User-Sidebar zeigt:
- Team-Branding (Name, Logo, Tagline)
- Navigation (alle Tabs)
- User-Info (Name, Rolle, Avatar)
- Logout-Button
- Theme-Toggle (Dark/Light)
Responsive Design
- Auf kleinen Bildschirmen (< 768px) wird die Sidebar zu einem Hamburger-Menu
useIsMobile()Hook fuer responsive Logik- Sheet-basierte mobile Navigation
Authentifizierung
Beim Laden der Seite wird:
- Token aus localStorage gepreuft
- Token gegen Server validiert (
/api/auth/user) - Bei Fehler: Redirect zu
/login - Rolle wird server-seitig synchronisiert (kein localStorage-Vertrauen)
