diff --git a/docs/superpowers/specs/2026-04-11-phase1-engagement-ux-design.md b/docs/superpowers/specs/2026-04-11-phase1-engagement-ux-design.md new file mode 100644 index 0000000..64716cb --- /dev/null +++ b/docs/superpowers/specs/2026-04-11-phase1-engagement-ux-design.md @@ -0,0 +1,257 @@ +# Phase 1: Engagement & UX-Polish — Design Spec + +**Datum:** 2026-04-11 +**Projekt:** WM 2026 Tippspiel +**Ziel:** Die App von "funktional" zu "macht Spaß" transformieren. Mitarbeiter sollen beim Öffnen lächeln und täglich zurückkommen. +**Zielplattform:** Mobile-First (Staffbase-App auf Smartphone), Desktop als Bonus +**Launch:** Anfang Juni 2026 (Intranet-Post), WM-Start 11. Juni 2026 + +--- + +## 1. Neue Startseite: Dashboard + +Die aktuelle Startseite zeigt 104 Spiele als endlose Liste. Die neue Startseite wird ein persönliches WM-Cockpit. + +### Layout: "Hero + Stats + Nudges" + +**Hero-Bereich (oberes Drittel):** +- Nächstes tippbares Spiel prominent angezeigt mit Team-Flaggen und Countdown-Timer +- Wenn bereits getippt: Tipp anzeigen mit Häkchen ("Dein Tipp: 2:1 ✓") +- Wenn noch nicht getippt: "Jetzt tippen"-Button +- Wenn kein Spiel ansteht: Nächstes Spiel mit Datum ("Nächstes Spiel: Morgen 21:00") + +**Stats-Kacheln (mittleres Drittel):** +- Drei kompakte Kacheln nebeneinander: + - **Dein Rang** (Platzierung mit Pfeil hoch/runter seit letzter Änderung) + - **Punkte** (Gesamtpunktzahl) + - **Streak** (🔥-Counter, aktuelle Serie an abgegebenen Tipps) + +**Nudge-Bereich (unteres Drittel):** +- Kontextabhängige Handlungsaufforderungen: + - "📅 Heute noch 2 Spiele ohne Tipp" → Link zum Spielplan + - "🏆 Max führt mit 15 Punkten" → Link zur Rangliste + - "🎯 Letzte Auswertung: 3 Punkte für Brazil vs Serbia!" → Link zum Ergebnis +- Maximal 2-3 Nudges, priorisiert nach Relevanz + +**Navigationsänderung:** Der volle Spielplan wird zur eigenen Seite "Spiele" in der Navigation. Dashboard ist die neue Startseite. + +--- + +## 2. Bottom Navigation Bar + +Die Header-Navigation wird durch eine feste Bottom Navigation ersetzt (Mobile-First-Standard). + +**4 Haupttabs:** +- 🏠 **Home** — Dashboard (neue Startseite) +- ⚽ **Spiele** — Spielplan mit Smart Sections +- 🏆 **Rangliste** — Leaderboard +- 👤 **Profil** — Persönliche Statistiken + +**Header:** Wird schlank — nur Logo ("WM 2026 Tippspiel"), optional Notification-Badge, Theme-Toggle. + +**Admin:** Nicht mehr in der Hauptnavigation. Nur für Editoren sichtbar als Zahnrad-Icon im Header. Viewer sehen es nicht. + +**Desktop:** Bottom Nav wird zur Standard-Sidebar oder bleibt als Header-Nav — sekundäre Priorität, Mobile-Erlebnis bestimmt das Design. + +--- + +## 3. Smart Sections im Spielplan + +Die 104-Spiele-Liste wird intelligent in Zeitabschnitte gruppiert. + +**Abschnitte (automatisch basierend auf aktuellem Datum):** + +| Abschnitt | Default-Zustand | Inhalt | +|-----------|----------------|--------| +| **Heute** | Expandiert, farbig hervorgehoben | Alle Spiele des Tages | +| **Morgen** | Expandiert | Alle Spiele des Folgetags | +| **Diese Woche** | Kollapsiert, Anzahl angezeigt | Restliche Spiele der Woche | +| **Nächste Woche+** | Kollapsiert | Spätere Spiele | +| **Vergangene Spiele** | Kollapsiert | Letzte Ergebnisse + eigene Punkte | + +**Verhalten:** +- Abschnitte sind auf-/zuklappbar (Accordion) +- "Heute" scrollt automatisch in den Viewport beim Öffnen +- Leerer Abschnitt wird ausgeblendet (z.B. "Heute" wenn kein Spiel) +- Stage-Filter (Gruppenphase, Achtelfinale...) wird zum optionalen Dropdown statt Button-Leiste + +--- + +## 4. Zustandsbasierte Match-Cards + +Jede Match-Card sieht visuell anders aus je nach Spielstatus. Die aktuellen Cards sind identisch unabhängig vom Zustand. + +**5 visuelle Zustände:** + +### ⏳ Offen (tippbar) +- Standard-Design mit Team-Flaggen und Kick-off-Zeit +- "Tipp abgeben"-Button prominent +- Countdown wenn <24h bis Anpfiff +- Pulsierender roter Countdown wenn <1h + +### ✅ Getippt +- Grüner linker Rand / Akzent +- Tipp prominent angezeigt ("Dein Tipp: 2:1") +- "Ändern"-Link statt "Tipp abgeben" +- Häkchen-Icon + +### 🔴 Live (in Spielgang) +- Pulsierender roter Punkt neben "LIVE" +- Aktueller Spielstand (wenn über Sync verfügbar) +- Tipp daneben zum Vergleich +- Tippfenster geschlossen — Schloss-Icon + +### 🏁 Beendet (ausgewertet) +- Endergebnis prominent +- Dein Tipp + Punkte-Badge: + - 🥇 **Gold-Badge (3 Pkt):** Exakter Treffer, goldener Schimmer-Effekt + - ✅ **Grüner Badge (1 Pkt):** Richtige Tendenz + - ❌ **Grauer Badge (0 Pkt):** Falsch getippt + +### 🔒 Verpasst (nicht getippt, Spiel vorbei) +- Ausgegraut / reduzierte Opacity +- "Nicht getippt" Label +- Leichter visueller "Shame-Effekt" als Motivation fürs nächste Mal + +--- + +## 5. Emotionale Momente & Animationen + +5 Schlüsselmomente, die die App lebendig machen. + +### 5.1 Tipp-Bestätigung +- **Trigger:** User klickt "Tipp bestätigen" +- **Animation:** Card pulsiert kurz grün, animiertes Häkchen fliegt rein +- **Text:** "Dein Tipp ist drin! 🎯" als kurze Success-Message +- **Mobile:** Subtiles Haptic-Feedback (Vibration via `navigator.vibrate`) +- **Dauer:** ~1 Sekunde, dann Modal schließt + +### 5.2 Live-Countdown vor Anpfiff +- **Trigger:** Spiel startet in <1 Stunde +- **Anzeige:** Pulsierender roter Countdown-Timer auf der Match-Card ("Noch 12 Min!") +- **Urgency-Stufen:** + - <24h: Countdown in Stunden ("in 5h") + - <1h: Pulsierender roter Countdown in Minuten + - <5min: Schnelleres Pulsieren +- **Nach Anpfiff:** "Tippfenster geschlossen" mit Schloss-Icon, sanfte Transition + +### 5.3 Punkte-Reveal nach Spielende +- **Trigger:** User öffnet App / navigiert zu einem ausgewerteten Spiel, das noch nicht "gesehen" wurde +- **Sequenz (gestaffelt, ~2-3 Sekunden):** + 1. Endergebnis einblenden (z.B. "Brazil 3:1 Serbia") + 2. "Dein Tipp war: 3:1" einblenden + 3. Punkte-Counter animiert hochzählen +- **Varianten nach Ergebnis:** + - **Exakt (3 Pkt):** 🎉 Konfetti-Explosion, goldener "EXAKT!"-Badge, Celebratory-Puls + - **Tendenz (1 Pkt):** 👏 Grüner Puls-Effekt, "Richtige Tendenz!" + - **Falsch (0 Pkt):** 😅 Kurzes Kopfschütteln-Emoji, "Knapp daneben..." +- **"Gesehen"-Flag:** Jeder Reveal wird nur einmal gezeigt (localStorage-basiert) + +### 5.4 Ranglistenveränderung +- **Trigger:** Rang hat sich seit letztem Besuch geändert +- **Anzeige:** Toast-Notification beim App-Öffnen: + - Aufstieg: "⬆️ Du bist auf Platz 3 aufgestiegen!" + - Abstieg: "⬇️ Du bist auf Platz 7 gerutscht — hol dir die Punkte zurück!" + - Knapper Verfolger: "⚠️ Anna ist nur noch 1 Punkt hinter dir!" +- **Speicherung:** Letzter bekannter Rang in localStorage, Vergleich bei jedem Laden + +### 5.5 Streak-Tracker +- **Definition:** Anzahl aufeinanderfolgender Spiele, für die ein Tipp abgegeben wurde (nicht Korrektheit, nur Teilnahme) +- **Anzeige:** 🔥-Counter auf dem Dashboard und im Profil +- **Meilensteine:** + - 3er-Streak: 🔥 Feuer-Icon erscheint + - 10er-Streak: 🔥🔥 Doppel-Feuer + - 20er-Streak: ⚡ Blitz-Icon +- **Streak-Bruch:** "Deine 7er-Serie ist gerissen! Starte eine neue." als Nudge auf dem Dashboard +- **Backend:** Streak wird bei Tipp-Abgabe berechnet (aufeinanderfolgende Spiele nach Kick-off-Datum) + +--- + +## 6. Profil-Seite: Reiches Profil + +Die aktuelle Profil-Seite zeigt Name, Rang und 4 Stat-Boxen. Das Redesign macht sie persönlich und interessant. + +### Layout (von oben nach unten): + +**Header-Card:** +- Initialen-Avatar (bestehendes Design) +- Name + Rang-Badge ("🏆 Platz 5") +- Lieblingsteam mit Flagge (bestehende "Team hinzufügen"-Funktion, prominenter platziert) + +**Stats-Ring:** +- Kreisdiagramm (Donut-Chart) mit Verteilung: Exakt / Tendenz / Falsch +- Gesamtpunktzahl in der Mitte des Rings +- Legende darunter + +**Tipp-Historie:** +- Scrollbare Liste: "Deine letzten 10 Tipps" +- Jeder Eintrag: Teams, dein Tipp, Ergebnis, Punkte-Badge +- Expandierbar auf alle Tipps + +**Fun-Stats:** +- "Dein Lieblings-Tipp: 1:0 (5x getippt)" +- "Du tippst 70% Heimsiege" +- "Längste Streak: 🔥12" +- Rotiert oder zeigt 2-3 gleichzeitig + +**Achievement-Platzhalter (Vorgriff Phase 2):** +- Badge-Leiste am unteren Rand +- Grau/locked wenn noch nicht erreicht, farbig wenn freigeschaltet +- Phase 1: Platzhalter-UI, Logik kommt in Phase 2 + +--- + +## 7. Entfernte / Vereinfachte Features + +### KI-Agent / Expertenblick — ENTFERNT +- Chat-Widget (Fußball-Icon unten rechts) wird entfernt +- "Expertenblick"-Accordion im Tipp-Modal wird entfernt +- Dateien: `AgentChat.tsx`, Agent-Route im Backend (`/api/agent`) können entfernt oder deaktiviert werden +- Begründung: Nice-to-have, lenkt vom Kernflow ab, spart Platz auf Mobile + +### Tipp-Modal — VERSCHLANKT +- **Entfernt:** Gruppeninfo-Header, Kick-off-Datum (steht schon auf der Card), Expertenblick-Accordion +- **Bleibt:** Team-Flaggen + Namen, Score-Picker (+/-), Tendenz-Anzeige, "Tipp bestätigen"-Button +- **Neu:** Erfolgsanimation nach Bestätigung (siehe 5.1) + +### Stage-Filter — VEREINFACHT +- Aktuell: 8 horizontale Filter-Buttons +- Neu: Dropdown/Select im Spielplan-Header +- Smart Sections übernehmen die Hauptnavigation im Spielplan + +### Admin-Navigation — VERSTECKT +- Nicht mehr als Haupttab sichtbar +- Nur für User mit Editor-Rolle: Zahnrad-Icon im Header +- Viewer sehen keine Admin-UI + +--- + +## 8. Technische Hinweise + +### Frontend +- **Framework:** React + Vite + TypeScript (bestehend) +- **Animationen:** CSS-Animationen + `framer-motion` für komplexere Sequenzen (Konfetti, Punkte-Reveal) +- **Konfetti:** Lightweight-Library wie `canvas-confetti` (~3KB) +- **Charts:** Donut-Chart für Profil — entweder SVG-basiert selbst gebaut oder leichtgewichtige Library +- **Haptic:** `navigator.vibrate(50)` für Mobile (Progressive Enhancement, kein Fallback nötig) +- **State:** localStorage für Streak, gesehene Reveals, letzter Rang + +### Backend +- **Streak-Berechnung:** Neue Query oder Service-Funktion, die aufeinanderfolgende Tipps zählt +- **Dashboard-Daten:** Neuer Endpoint `/api/dashboard` der Hero-Spiel, Stats und Nudges gebündelt liefert +- **Cleanup:** Agent-Route kann deaktiviert werden (Feature-Flag oder entfernen) + +### Kein Breaking Change +- Bestehende API-Endpoints bleiben kompatibel +- Datenbank-Schema braucht keine Migration (Streak wird berechnet, nicht gespeichert) +- Bestehende Tipps und Punkte bleiben erhalten + +--- + +## 9. Phasen-Übersicht + +| Phase | Inhalt | Zeitrahmen | +|-------|--------|------------| +| **Phase 1** (dieses Dokument) | Dashboard, Bottom Nav, Smart Sections, Emotionale Momente, Match-Cards, Profil, Cleanup | Vor Launch (bis Ende Mai) | +| **Phase 2** | Badges & Achievements, Wochenwertung, Streak-Meilenstein-Rewards | Zum Launch / erste WM-Woche | +| **Phase 3** | Tipps anderer sehen, Reaktionen/Emojis, Abteilungs-Challenge | Während der WM, iterativ |