# 🎨 [Frontend Expert] — Zwischenstand & Roadmap > **Stand:** 3. April 2026 > **Rolle:** KMP, Compose Desktop, State-Management, Navigation, Backend-Anbindung --- ## ✅ Erledigte Sprints ### Sprint A — Abgeschlossen - [x] **A-1** | ViewModel-Architektur definieren & Referenz-Implementierung - [x] MVVM mit UDF als verbindliches Muster festgelegt - [x] `Intent`/`State`-Struktur definiert (Sealed Classes) - [x] `VeranstalterViewModel` als vollständige Referenz-Implementierung - [x] Muster-Dokument in `docs/06_Frontend/` abgelegt - [x] **A-2** | Abteilungs-Logik im Bewerb-Dialog - [x] CSN-C-NEU: Automatischer Vorschlag der Pflicht-Teilung mit 4 Abteilungen - [x] AssistChip „Pflicht-Teilung vorgeschlagen" bei erkanntem Typ - [x] Abteilungs-Typen `SEPARATE_SIEGEREHRUNG` / `ORGANISATORISCH` in UI ### Sprint B (Teilweise) — Abgeschlossene Punkte - [x] **B-1** | ViewModels für alle V3-Screens - [x] `TurnierViewModel`, `BewerbViewModel`, `PferdProfilViewModel` - [x] `ReiterProfilViewModel`, `VereinsViewModel`, `FunktionaerViewModel` - [x] `AbteilungViewModel` (Startliste, Ergebnisse) ### Zusätzlich erledigt (Session 02.04.2026) - [x] Navigation V2 / Back-Stack-System implementiert - [x] Profil-Cards mit Edit-Dialog (Veranstalter, Pferd, Reiter, Verein, Funktionär) - [x] Onboarding: State-Lift via `rememberSaveable` (Gerätename, Sicherheitsschlüssel) - [x] Veranstaltungs-Wizard: Bestätigungs-Dialog mit Daten-Vorschau vor finalem Anlegen - [x] Breadcrumbs und Zurück-Navigation korrigiert --- ## 🔴 Sprint B — Offen (höchste Priorität) - [ ] **B-2** | Ktor-Clients & Repositories für Backend-Anbindung - [x] `HttpClient`-Factory zentral konfiguriert (Auth, Timeout, JSON, Logging, Retry) - [x] `VeranstalterRepository` (Interface + Default-Impl mit Ktor) vollständig - [x] `TurnierRepository` Interface in commonMain vorbereitet - [x] Fehler-Mapping HTTP → Domain-Errors einheitlich - [ ] `BewerbRepository` und `AbteilungRepository` anlegen - [ ] Koin Feature-Module: Repository-Interfaces auf Default-Impl binden - [ ] `AuthApiClient`-Integration: Token-Provider injizierbar - [ ] Turnier/Bewerb/Abteilung Backend-Endpunkte verdrahten - [ ] `StoreV2` schrittweise ablösen (Feature-für-Feature, Toggle `useRealBackend`) - [ ] Akzeptanz-Tests per Fake-Server (Mock Engine, happy + error paths) - [ ] Dokumentation `docs/06_Frontend/Networking.md` - [ ] **B-3** | Validierungs-Live-Feedback in Edit-Dialogen - [ ] `MsValidationWrapper`: `Error.short` inline, `Error.long` als Tooltip - [ ] `isValid` im ViewModel für Speichern-Button-State nutzen - [ ] OEPS-Nummer: Inline-Validierung beim Tippen - [ ] FEI-ID: Inline-Validierung beim Tippen - [ ] Lizenzklasse × Bewerbs-Klasse: Warnung wenn nicht erlaubt - [ ] Altersklasse Pferd: Warnung wenn nicht kompatibel - [ ] Basis: `OetoValidatorsTest.kt`-Grenzfälle als Akzeptanzkriterien - [ ] **B-4** | Kassa-Screen: Veranstaltungs-Kassa - [ ] Gesamt-Saldo-Ansicht (Salden aus allen Turnieren der Veranstaltung) - [ ] Turnier-übergreifender Zahlvorgang (eine Zahlung, mehrere Rechnungen) - [ ] Rechnungsvorschau je Turnier --- ## 🟠 Sprint C — Priorität 2 (nächste Woche) - [ ] **C-1** | `StoreV2` vollständig ablösen - [ ] Alle verbleibenden `StoreV2`-Referenzen durch echte Repositories ersetzen - [ ] `StoreV2` entfernen nach vollständiger Migration - [ ] **C-2** | VeranstalterNeu: Vereinssuche & Daten-Übernahme - [ ] Vereins-Suche implementieren (Suche, Auswahl, Mapping) - [ ] Validierung und Fehleranzeigen - [ ] **C-3** | LAN-Sync-UI vorbereiten (ADR-0022 ✅ freigegeben) - [ ] `SyncEvent`-Datenmodell aus `core`-Modul einbinden (KMP-shared) - [ ] `originNodeId`-Generierung und -Persistierung beim App-Start - [ ] WebSocket-Client auf Richter-Turm-Desk (Ktor-Client/KMP): HELLO/SYNC_PUSH/SYNC_ACK - [ ] Geräte-Discovery-UI (gefundene Geräte im LAN via mDNS anzeigen) - [ ] Sync-Status-Indicator in der Hauptnavigation (verbunden / getrennt / ausstehende Events) - [ ] Offline-Indikator: ausstehende lokale Events sichtbar machen - [ ] Domänen-Mastership beachten: Richter-Turm schreibt nur Bewertungen/Ergebnisse - [ ] **C-4** | Lint-Bereinigung & Code-Qualität - [ ] Ungenutzte Imports/Parameter entfernen - [ ] `Long → Duration`-Konvertierungen modernisieren - [ ] Redundante Not-null-Calls vereinfachen > ⏸️ **USB-Stick Fallback (Export/Import UI)** — Separate Besprechung (Sprint B/C) --- ## 📌 Abhängigkeiten | Warte auf | Von wem | Betrifft | |----------------------------------------|-------------------|----------------------------| | Reiter/Pferde/Vereine/Funktionäre APIs | 👷 Backend B-1 | B-2 Repository-Verdrahtung | | Rulebook Validierungs-Spezifikation | 📜 Rulebook B-2 | B-3 Live-Validierung | | Kassa-Service API | 👷 Backend B-2 | B-4 Kassa-Screen | | ~~ADR-0022 LAN-Sync~~ | ✅ Erledigt | C-3 Sync-UI freigegeben | | Wireframes Edit-Dialoge / Kassa | 🖌️ UI/UX B-1/B-3 | B-3, B-4 Implementierung | --- ## 💡 Empfehlungen (nach Priorität) 1. **B-2 Repository-Verdrahtung** — Bewerb/Abteilung-Repos und StoreV2-Ablösung sind der kritische Pfad für echte Daten im Frontend. 2. **B-3 Live-Validierung** — Rulebook hat Spezifikation übergeben (Sprint B-1 ✅); Frontend kann sofort mit `OetoValidators` loslegen. 3. **C-2 VeranstalterNeu** — Offener Punkt aus Session 02.04; Vereinssuche fehlt noch für vollständigen Onboarding-Flow.