Android Phase2

Android — Phase 2 (post-iOS-launch)

iOS launches first. Android is a deliberate fast-follow, not a blocker. This doc is the plan of record.

Current Android status (what already works)

android/ and EAS Android config are committed. These run cross-platform today via JS / RN fallbacks:

  • Full offline study, all 128 questions, all 8 languages, quizzes, practice
  • Text AI mock interview (web-API based) + dictation (ExpoSpeechRecognition is cross-platform)
  • Adaptive engine (FSRS/IRT), stats, results, PDF export
  • Social sharing (native share sheet, WhatsApp/SMS, invite/score/streak/badge)

The gaps (precise)

All 10 native modules are iOS-only (Swift, no Kotlin): civics-realtime-audio, civics-answer-choice, civics-officer-stage, civics-hero-card, civics-hand-raise, civics-haptics, civics-activity(-grid), civics-hold-mic, civics-streak-burst. Most have RN fallbacks or are cosmetic (widget + Live Activity are iOS-only by nature).

GapImpactPhase
civics-realtime-audio (Swift only) → no realtime VOICE interview on Android (isRealtimeAudioStreamSupported() = false)Premium headline feature missing2b
RevenueCat Android — no EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY, no Play productsPurchases dead on Android2a
EAS Android build + Play service account (pc-api-key.json) + signingCan't ship2a
Native UI (answer-choice, hero card, officer-stage writing pad, hand-raise)Uses RN fallbacks; verify they look premium on Android2a
Widget / Live Activity (ActivityKit/WidgetKit)iOS-only; skip on Android (or build an Android widget later)2c

Plan

Phase 2a — Android v1 (sellable in ~days)

  • Google Play Console: create civix_pro ($9.99/mo) + civix_pro_annual ($59.99/yr) subscriptions
  • RevenueCat: add the Android app + Google service-account credentials; attach both products to the premium entitlement (same entitlement as iOS)
  • Add EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY (the goog_… key) to eas.json production/testflight env
  • EAS Android build profile + Play service account JSON + upload-key signing
  • Audit the RN fallbacks (answer-choice, results, paywall) on a real Android device — confirm they look premium (hairlines, type scale, RTL for fa/ps)
  • Ship Android with study + TEXT AI interview premium. (Text interview is a real premium feature on its own.)

Phase 2b — Android voice parity (~1–2 weeks)

  • Kotlin civics-realtime-audio module: AudioRecord capture → 24 kHz mono PCM16 → base64 frames (mirror the Swift module's event contract: audioChunk/level/boundary/playback), AudioTrack for officer downlink playback, route + interruption handling
  • Enable realtime voice interview on Android

Phase 2c — Android polish (optional)

  • Kotlin equivalents / Jetpack Compose for the premium native cards if the RN fallbacks aren't good enough
  • Android home-screen widget (optional)

Recommendation

Launch iOS → Phase 2a gets a sellable Android app within days → Phase 2b brings voice parity. Do NOT block iOS or Android v1 on the Kotlin audio module.