# Frontend Status Report & Architecture Update **Datum:** 08.01.2026 **Von:** Senior Frontend Developer (KMP/Compose) **An:** Lead Software Architect ## 1. Executive Summary Das Frontend-System ("Meldestelle Portal") wurde erfolgreich auf eine moderne, zukunftssichere **Kotlin Multiplatform (KMP)** Architektur migriert, die echte Offline-Fähigkeit im Web (via Wasm/JS) und Desktop (JVM) unterstützt. Kritische Blockaden im Build-System (Room-Inkompatibilität mit JS) wurden durch einen strategischen Wechsel zu **SQLDelight** gelöst. Das Dependency-Management wurde zentralisiert und bereinigt. **Status:** Frontend-Build ist stabil (nach Fixes in `core-utils`). Backend-Anpassungen sind erforderlich. --- ## 2. Durchgeführte Maßnahmen ### 2.1 Architektur & Persistenz (Offline-First) * **Problem:** Die ursprünglich geplante Nutzung von **Room** erwies sich als Blocker für die Web-Targets (JS/Wasm), da Room derzeit nur JVM/Android/Native unterstützt. * **Lösung:** Migration zu **SQLDelight 2.2.1**. * Ermöglicht echte Cross-Platform-Persistenz. * **Web (JS/Wasm):** Nutzung von `WebWorkerDriver` in Kombination mit **OPFS (Origin Private File System)** für performante, persistente Speicherung im Browser. * **Desktop (JVM):** Nutzung von `JdbcSqliteDriver` mit Java 25 Virtual Threads für nicht-blockierende I/O. * **Async-First:** Die Datenbank-Schnittstellen wurden auf `suspend` (asynchron) umgestellt (`generateAsync = true`), um die strikten Anforderungen des Browsers zu erfüllen. ### 2.2 Build-System & Dependency Management * **Single Source of Truth:** Die `libs.versions.toml` wurde komplett refaktoriert. * Klare Trennung zwischen **Frontend (KMP)** und **Backend (Spring/Infra)** Dependencies. * Einführung von **Bundles** (`kmp-common`, `ktor-client-common`, `compose-common`) zur massiven Reduktion von Boilerplate in den `build.gradle.kts` Dateien. * **Wasm-Support:** Fehlende Plattform-Konfigurationen (`PlatformConfig.wasmJs.kt`) wurden ergänzt. * **Bereinigung:** Veraltete und nicht genutzte Dependencies wurden entfernt. ### 2.3 Infrastruktur & Web-Integration * **Webpack Konfiguration:** Hinzufügen von `opfs-headers.js`, um die notwendigen HTTP-Header (`Cross-Origin-Opener-Policy`, `Cross-Origin-Embedder-Policy`) für `SharedArrayBuffer` und OPFS im Dev-Server zu setzen. * **Web Worker:** Implementierung eines Custom Workers (`sqlite.worker.js`), der die Datenbank im Hintergrund-Thread verwaltet. --- ## 3. Auswirkungen auf das Backend & Core (Action Required) Während der Frontend-Optimierung wurden Inkonsistenzen im Shared-Code (`core:core-utils`) aufgedeckt, die das Backend betreffen. ### 3.1 `core:core-utils` Kontamination * **Problem:** Das Modul `core:core-utils` ist als KMP-Modul konfiguriert, enthielt aber JVM-spezifischen Code für **Exposed** (JDBC-basiertes ORM), der im Frontend (JS/Wasm) nicht kompilierbar ist. * **Temporäre Lösung:** Die Datei `DatabaseUtils.kt` (Exposed-Helper) wurde **auskommentiert**, um den Frontend-Build zu retten. * **TODO Backend:** 1. Prüfen, ob `DatabaseUtils.kt` im Backend essenziell ist. 2. Falls ja: Verschieben in ein reines Backend-Modul (z.B. `:backend:common` oder `:backend:infrastructure:persistence`). 3. `core:core-utils` muss "rein" bleiben (nur KMP-kompatibler Code), wenn es vom Frontend konsumiert werden soll. ### 3.2 API-Verträge * Durch den Wechsel auf SQLDelight und die Async-First Architektur im Frontend ändert sich nichts an der REST-API, aber die Erwartungshaltung an die Synchronisation (Sync-Logik) wird wichtiger. --- ## 4. Nächste Schritte (Frontend Roadmap) 1. **Navigation:** Implementierung einer robusten Navigationslösung (Type-Safe, Deep-Linking-fähig), die sowohl Desktop als auch Web (Browser-History) sauber bedient. 2. **Sync-Logik:** Implementierung des Datenaustauschs zwischen lokaler SQLDelight-DB und Backend-APIs (Offline-Sync). 3. **UI-Integration:** Anbindung der neuen asynchronen Datenbank-Repositories an die Compose-ViewModels (`Flow` -> `State`). --- **Empfehlung an Lead Architect:** Bitte weisen Sie den **Senior Backend Developer** an, das Modul `core:core-utils` zu bereinigen und die auskommentierte Datenbank-Logik in ein geeignetes Backend-Modul zu migrieren. Das Frontend ist nun stabil und bereit für die Feature-Entwicklung.