diff --git a/TECHSTACK.md b/TECHSTACK.md index 7f79973..88c6087 100644 --- a/TECHSTACK.md +++ b/TECHSTACK.md @@ -1,6 +1,6 @@ # Tech Stack — BizGaze Connect -> Living document. **Last updated: 2026-10-27** (rev 2). Update this file whenever a dependency, platform, service, or +> Living document. **Last updated: 2026-10-30** (rev 3). Update this file whenever a dependency, platform, service, or > tool is added/removed/version-bumped. See [Maintaining this file](#maintaining-this-file) and the > [Changelog](#changelog) at the bottom. @@ -85,7 +85,9 @@ hash, per-user salt, timing-safe compare), opaque random session tokens, SHA-256 - **LiveKit clients:** - Web: self-hosted **`livekit-client` ~2.20** UMD (`server/public/vendor/livekit-client.umd.min.js`). - iOS: **LiveKit Swift SDK `2.15.3`** (SPM, `client-sdk-swift`, product `LiveKit`). - - Android: **LiveKit Android SDK** (`io.livekit:livekit-android`) — planned for native-calling Increment 2. + - Android: **LiveKit Android SDK** `io.livekit:livekit-android` **2.29.2** (+ `com.twilio:audioswitch` for + output routing, Kotlin coroutines) — native call **audio** + Speaker/Bluetooth/Earpiece (Increment 2a); native + **video** is Increment 2b. Needs the JitPack repo; raises the app to **minSdk 24**. ## Web client (`server/public/`) @@ -105,12 +107,16 @@ hash, per-user salt, timing-safe compare), opaque random session tokens, SHA-256 - `native-call` — native calling. **iOS:** Swift, CallKit + PushKit (VoIP) + LiveKit Swift SDK (native media, video tiles, screen-share via a ReplayKit broadcast extension), on-device live transcription (`SFSpeechRecognizer`). **Android:** Java, full-screen incoming-call UI over the lock screen + a - `FirebaseMessagingService` woken by high-priority FCM data messages (native LiveKit media = Increment 2, WIP). + `FirebaseMessagingService` woken by high-priority FCM data messages. **Increment 2a** adds native LiveKit + **audio** (Kotlin `CallMedia` + a `microphone` foreground service for background audio + `AudioSwitchHandler` + routing), gated by the server flag `ANDROID_NATIVE_MEDIA`; native video = Increment 2b. - `audio-route` (iOS audio output routing), `media-library` (save to Photos/gallery), `share-inbox` (inbound share sheet), `file-opener` (native Quick Look / open-with). - **iOS build:** Capacitor 8 + **SPM** (CocoaPods retired); Xcode 26; a share extension + a broadcast extension. -- **Android build:** JDK **21**, AGP 8.7 / Gradle 8.11, target SDK 36, edge-to-edge; manifest patched in CI - (`mobile/scripts/android-patch.js`) since `mobile/android/` is generated fresh per build. +- **Android build:** JDK **21**, AGP 8.7 / Gradle 8.11, **minSdk 24** (raised for LiveKit), target SDK 36, + edge-to-edge; the native-call plugin module also applies **kotlin-android** for the LiveKit media layer. + `mobile/android/` is generated fresh per build, so permissions **and the minSdk bump** are applied in CI by + `mobile/scripts/android-patch.js`. ## Desktop app (`desktop/`) — Electron @@ -194,6 +200,9 @@ Bump the **Last updated** date at the top and add a line to the Changelog below. ## Changelog +- **2026-10-30 (rev 3)** — Android native call media (Increment 2a): added `io.livekit:livekit-android` 2.29.2 + + `com.twilio:audioswitch` + Kotlin to the native-call plugin, a `microphone` foreground service, the + `ANDROID_NATIVE_MEDIA` server flag, and raised the Android app to minSdk 24. - **2026-10-27 (rev 2)** — Added the **Identity & auth** section (sessions/cookies + bearer, refresh tokens, TOTP MFA, BizGaze IdP/SSO, roles & tenancy, API keys, directory, audit). - **2026-10-27** — Initial tech-stack document created.