Files
chat_android/README.md
T

81 lines
2.3 KiB
Markdown

# Hesychia Android (native)
Kotlin + Jetpack Compose client for [Hesychia](https://hesychia.ai), reusing `chat_backend` APIs.
Epic: [chat_web_app#111](https://git.aimloperations.com/ai_ml_operations/chat_web_app/issues/111)
Capacitor WebView shell remains in `chat_web_app/llm-fe` as the interim Play track — see [docs/ADR-002-capacitor-coexistence.md](docs/ADR-002-capacitor-coexistence.md).
## Stack
- Kotlin, Jetpack Compose, Material 3
- Hilt, Navigation Compose, DataStore
- Retrofit + OkHttp (+ WebSocket next)
- RevenueCat Android SDK (IAP Workstream E)
- Min SDK 23 / target SDK 35
- Application id: `ai.hesychia.chat`
## Docs
| Doc | Purpose |
|-----|---------|
| [ADR-001](docs/ADR-001-architecture.md) | Architecture choices |
| [ADR-002](docs/ADR-002-capacitor-coexistence.md) | Play id + Capacitor sunset |
| [SCREEN_INVENTORY](docs/SCREEN_INVENTORY.md) | Routes / flows to mirror |
| [OPEN_QUESTIONS](docs/OPEN_QUESTIONS.md) | Spike leftovers |
| [design-tokens/hesychia.tokens.json](design-tokens/hesychia.tokens.json) | Shared visual tokens |
## Prerequisites
- JDK 17+
- Android SDK Platform 35 + build-tools
- Android Studio (Ladybug+) recommended
- Set `sdk.dir` in `local.properties` (gitignored), or open once in Android Studio
```properties
sdk.dir=/path/to/Android/Sdk
```
## Build
```bash
./gradlew :app:assembleProdDebug
./gradlew :app:testProdDebugUnitTest
# APK → app/build/outputs/apk/prod/debug/
```
Flavors:
| Flavor | REST / WS | applicationId |
|--------|-----------|---------------|
| `prod` (default) | production `chatbackend.aimloperations.com` | `ai.hesychia.chat` (+ `.debug` for debug) |
| `beta` | `beta.chatbackend.aimloperations.com` | `ai.hesychia.chat.beta` (+ `.debug`) |
## Signing (release)
Never commit keystores. Create `keystore.properties` (gitignored) at repo root:
```properties
storeFile=/absolute/path/to/aiml-chat-upload.jks
storePassword=...
keyAlias=aiml-chat-upload
keyPassword=...
```
```bash
./gradlew :app:bundleProdRelease
```
## Monetization
Native Play uses **RevenueCat** only (no Stripe Checkout). Align with `chat_web_app/llm-fe/MONETIZATION.md`:
- `appUserID` = Django user pk string
- Provider badge: `revenuecat` + `PLAY_STORE`
## Related repos
- `chat_web_app` — product / Capacitor / design source
- `chat_backend` — REST + WS + RevenueCat webhooks
- Future: `chat_ios` (SwiftUI twin epic)