35 lines
1.6 KiB
Markdown
35 lines
1.6 KiB
Markdown
# ADR-001: Architecture for native Hesychia Android
|
|
|
|
- **Status:** Accepted (spike default)
|
|
- **Date:** 2026-08-05
|
|
- **Context:** Epic [chat_web_app#111](https://git.aimloperations.com/ai_ml_operations/chat_web_app/issues/111)
|
|
|
|
## Decision
|
|
|
|
Ship a **Kotlin + Jetpack Compose + Material 3** client in `chat_android`, single `:app` module for v1.
|
|
|
|
| Concern | Choice |
|
|
|---------|--------|
|
|
| UI | Jetpack Compose + Material 3 (`HesychiaTheme` from design tokens) |
|
|
| DI | Hilt |
|
|
| REST | Retrofit + OkHttp + kotlinx.serialization |
|
|
| WebSocket | OkHttp WebSocket (parity with FE `WebSocketContext`) — Workstream D |
|
|
| Session | DataStore Preferences (JWT access/refresh); migrate to EncryptedSharedPreferences if threat model requires |
|
|
| Nav | Navigation Compose |
|
|
| IAP | RevenueCat Android SDK (`com.revenuecat.purchases`) |
|
|
| Flavors | `prod` / `beta` (env dimension); debug adds `.debug` applicationIdSuffix |
|
|
| Min / target SDK | 23 / 35 (match Capacitor shell) |
|
|
| Application id | **`ai.hesychia.chat`** (same as Capacitor) — see ADR-002 |
|
|
|
|
## Alternatives considered
|
|
|
|
1. **Keep Capacitor only** — lower eng cost short-term; WebView UX / IAP friction remain.
|
|
2. **Flutter** — one codebase for Android+iOS, but new stack vs existing Kotlin skill + no shared UI with React web.
|
|
3. **Multi-module now** — premature until chat + auth + billing vertical slices exist.
|
|
|
|
## Consequences
|
|
|
|
- Feature modules (`:feature:auth`, `:feature:chat`, `:core:network`) deferred until MVP vertical slice ships.
|
|
- iOS twin is a **separate epic / repo** (SwiftUI), not Flutter.
|
|
- Visual parity bar: **brand + layout rhythm**, not pixel-perfect MUI clones.
|