# Kaizen — Android Native Android-App für Kaizen (Jetpack Compose + Kotlin). Kein WebView, kein Tauri. ## Phase 1 — echtes Backend (aktiv) Der Feel-Prototyp redet jetzt mit dem **echten Kaizen-Backend** — echte, gestreamte Antworten statt `fakeReply`. Die App ist **deployment-agnostisch**: ein Binary, das auf die offizielle Instanz ODER jeden Self-Host zeigt, über einen einheitlichen `Authorization: Bearer`-Contract. SaaS vs. Self-Host ist nur „welche Base-URL". Drin: - **In-App-Login** (`auth/LoginScreen.kt`): Server-URL (Default = offizielle Instanz, editierbar = die „offiziell/Self-Host"-Adresse) + E-Mail + Passwort → `POST {baseUrl}/api/v1/auth/token` → `kzn_`-Token. Kein Token-Copy-Paste. - **Sichere Token-Ablage** (`net/SecureStore.kt`): `EncryptedSharedPreferences` (AES-256-GCM, Schlüssel im Android-KeyStore/StrongBox) — der Token liegt nie im Klartext, auch nicht auf gerooteten Geräten. - **Modell vom Server** (`net/SessionViewModel.kt`): nach dem Login holt die App per `GET /api/v1/me` das vom Nutzer unter `/settings/models` gewählte Default-Modell — kein hartgecodetes Modell. - **Echtes Streaming** (`net/KaizenApi.kt` + `net/StreamConsumer.kt`): `POST /api/v1/chat`, liest den `text/plain`-Chunked-Stream inkrementell und strippt die Sentinels (Port von `lib/chat/stream-consumer.ts` aus dem Backend, JVM-unit-getestet). - Design + Haptik + Orb unverändert — **nur die Datenquelle hat sich geändert**. Bewusst **noch nicht** drin (siehe `LATER.md`): Conversation-History vom Server, Passkey-Login nativ, Bild/Video, Biometric-Lock, WebSocket-Streaming. ## Bauen & laufen > **Wichtig:** Auf dem **echten S25 Ultra** laufen lassen, nicht im Emulator — > der Emulator kann keine echte Haptik, und genau die wollen wir fühlen. 1. Projekt in Android Studio öffnen, **Gradle syncen** (neue Deps: OkHttp, kotlinx-serialization, security-crypto + INTERNET-Permission). 2. S25 Ultra per **Wireless Debugging** oder USB verbinden. 3. Run ▶ auf das Gerät → Login-Screen erscheint. Server-URL prüfen, einloggen. `DEFAULT_BASE_URL` (`net/ServerConfig.kt`) ist die vorausgefüllte Instanz-Adresse — bei Domainwechsel hier anpassen. ## Der Test Eine Woche nutzen. Geht der Finger anfangen hierher statt zu Gemini → wir bauen voll aus (History, Passkey, Medien = Phase 2). Wenn nicht → wir wissen billig, woran's liegt.