Spike + plan a true native iOS Hesychia client in a new repochat_ios (org: ai_ml_operations), feature-parity with chat_web_app / llm-fe, while reusing chat_backend APIs.
Follow-on to Android epic:chat_web_app#111 (chat_android). This epic lives here because product/UX/API contracts and the existing Capacitor shell are owned by chat_web_app. Implementation work for the native iOS app lands in chat_ios once that repo exists.
Current state (do not ignore)
Layer
Today
Mobile ship path
Capacitor 7 WKWebView wrapping CRA build/ (llm-fe/ios/, bundle id ai.hesychia.chat) — see IOS.md / #21
RevenueCat via @revenuecat/purchases-capacitor — MONETIZATION.md, #100
UI
React + MUI 5 + Emotion; tokens in llm-fe/src/llm-fe/ui-kit/assets/theme/
Android twin
Native Compose client scaffolding in chat_android (see #111)
Decision to force early: keep Capacitor as interim App Store / TestFlight track vs migrate users to a native IPA under the same (or new) bundle id. Bundle-id / App Store continuity matters for IAP and reviews.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Spike + plan a true native iOS Hesychia client in a new repo
chat_ios(org:ai_ml_operations), feature-parity withchat_web_app/llm-fe, while reusingchat_backendAPIs.Follow-on to Android epic: chat_web_app#111 (
chat_android). This epic lives here because product/UX/API contracts and the existing Capacitor shell are owned bychat_web_app. Implementation work for the native iOS app lands inchat_iosonce that repo exists.Current state (do not ignore)
build/(llm-fe/ios/, bundle idai.hesychia.chat) — seeIOS.md/#21REACT_APP_BACKEND_*)@revenuecat/purchases-capacitor—MONETIZATION.md,#100llm-fe/src/llm-fe/ui-kit/assets/theme/chat_android(see #111)Decision to force early: keep Capacitor as interim App Store / TestFlight track vs migrate users to a native IPA under the same (or new) bundle id. Bundle-id / App Store continuity matters for IAP and reviews.
Why native (vs Capacitor)
Capture explicit rationale (mirror Android epic):
chat_androidwhere sensible (API contracts, tokens, RCappUserID)Proposed repo:
chat_iosCreate under
ai_ml_operations:.env.mobile/ beta / prodOut of scope for v1 unless justified: full offline-first sync; rewriting Android in a cross-platform framework.
Workstream A — Discovery & architecture
chat_android/docs/SCREEN_INVENTORY.md(parity withApp.tsx)chat_backendREST + WS contracts (share notes with Android)ai.hesychia.chatchat_ioscovering Capacitor sunset / coexistence + relationship tochat_androidchat_android/design-tokens/hesychia.tokens.jsonor export fromui-kit)Exit: architecture note + screen inventory + open questions list.
Workstream B — Visual parity / design system
HesychiaTheme(light/dark + palette variants: blue/green/purple/orange/red)hesychia-mark, icons, splash) fromllm-fe/assets/Exit: token-backed theme + screenshot comparison for 3 core screens.
Workstream C — Auth & session
token/obtain/, etc.)logOutwhen IAP wired)Exit: authenticated user can open chat and survive process death.
Workstream D — Chat parity
#23+ Android twin)Exit: end-to-end chat on simulator + physical device matching web happy path.
Workstream E — In-app purchases (required)
Native App Store must not use Stripe Checkout for digital subscriptions (Apple policy). Align with RevenueCat path.
appUserIDrules asMONETIZATION.md(Django user pk string)founders, etc.) — share product ids with Capacitor / Android RC dashboard/monetization/...APIsrevenuecat+APP_STOREExit: TestFlight sandbox purchase + restore + entitlement visible in Account; web Stripe path unchanged.
Workstream F — Platform & store ops
chat_iosrepo + README + local run docs (Xcode)CFBundleShortVersionString/CFBundleVersion) aligned with AndroidversionName/versionCode+ webpackage.jsonWorkstream G — Cross-repo coordination
chat_ioschat_androidchat_web_appchat_backendserver-infraSuggested child issues (cut after discovery)
chat_iosrepo scaffolding (Xcode project, schemes, flavors/configs)Acceptance criteria (epic done when)
chat_iosexists, builds on macOS, and completes auth → chat → IAP purchase/restore on TestFlight sandboxMONETIZATION.md(RC on App Store, Stripe on web)ai.hesychia.chatand Android twinReferences
#111/ repochat_androidllm-fe/IOS.md,llm-fe/MONETIZATION.md,llm-fe/ios/README.md#21, RevenueCat:#100chat_backendhesychia.ai