1.9 KiB
1.9 KiB
CLAUDE.md — RALPH Android Frontend
Stack
Language: Kotlin UI: Jetpack Compose DB: Room (SQLite) Worker: WorkManager Maps: MapLibre + OpenStreetMap HTTP: Retrofit oder Ktor Client (TBD) Auth: TBD (API-Key vs JWT für Upload)
Kern-Features (Android)
- Background GPS-Tracking (COARSE/FINE + Background permission)
- Offline Queue (Room) + WorkManager Upload (Idempotenz via event_id)
- Manuelle Punkte hinzufügen (lat/lon/timestamp/notiz + Validierung)
- Kartenansicht (MapLibre, Tile-Quelle konfigurierbar)
- Datei-Export (SAF ACTION_CREATE_DOCUMENT)
Architektur-Prinzipien
- Offline-First: Jeder Punkt wird zuerst lokal in Room gespeichert
- Upload via WorkManager mit Constraint: Network connected + Retry/Backoff
- Idempotenz: Jeder Punkt erhält eine client-seitige event_id (UUID)
- source-Feld: "gps" | "manual" unterscheidet Punkt-Typ
- Validierung manueller Punkte: as the user types im ViewModel
Offene Entscheidungen (TBD)
- HTTP Client: Retrofit vs Ktor
- timestamp Format: epochMillis vs RFC3339
- Android Upload Auth: X-API-Key vs JWT
- minSdk festlegen
Nächste Tasks (Reihenfolge)
- T001 Compose-Projekt anlegen (Kotlin, minSdk festlegen)
- T001a Kotlin-Standards festlegen (Coroutines, KTX, Code Style)
- T004 Permissions Manifest + Runtime-Flow (COARSE/FINE + Background)
- T006 Background-Tracking Architektur (Foreground Service)
- T033 Room-Setup (Entities/DAOs/Migrations)
- T008 Upload-Queue (pending/sent/failed, retryCount)
- T012 Upload-Worker (WorkManager, Retry/Backoff)
- T080 UI: Manuellen Punkt hinzufügen
- T081 Eingabevalidierung Compose (as the user types)
- T018 Export via SAF
Antwort-Stil
- Kotlin-Code immer mit Coroutines/Flow
- Compose-Code: State Hoisting, ViewModel pattern
- Kein direkter DB/Network-Zugriff in Composables
- Tests: JVM Unit Tests für Domain/Queue; Instrumentation für Room/Worker