Epic: Working iOS app — Dashboard if signed in, otherwise Sign in #1

Open
opened 2026-10-23 03:35:50 -07:00 by westfarn · 0 comments
Owner

Goal

Make chat_ios a working Hesychia client. Cold start goes straight into the product:

  • Stored session → Dashboard (chat). Web route / when authenticated (AsyncDashboard2).
  • No session → Sign in. Web route /signin/.

Do not ship the public marketing site.

Mirror of the Android epic: ai_ml_operations/chat_android#1

Out of scope

  • Logged-out landing (LandingPage on /)
  • Pricing (/pricing/)
  • Privacy (/privacy/)
  • Changelog (/changelog/)
  • Public legal alias (/legal/terms-of-service)
  • Public account-deletion URL (/account-deletion/) — App Store listing can keep the web URL
  • Stripe return routes (/billing/success, /billing/cancel). App Store billing stays RevenueCat inside Account

Source of truth

Web app: chat_web_app/llm-fe.

  • Routes: llm-fe/src/App.tsx
  • Home split: llm-fe/src/llm-fe/components/HomeRoute/HomeRoute.tsx
  • Signed-in nav (Header2): Dashboard, Account, Documents (only if the plan has RAG), Analytics, Feedback, Sign out

REST base: REACT_APP_BACKEND_REST_API_BASE_URL (prod https://chatbackend.aimloperations.com/api/).
WebSocket: REACT_APP_BACKEND_WS_API_BASE_URL (prod wss://chatbackend.aimloperations.com/ws/chat_again/).
Authenticated calls send Authorization: Bearer <access>. Refresh is POST /token/refresh/.

iOS today

chat_ios is a stub (README only). No screens yet. First navigation decision is the same as Android: session present opens Dashboard, otherwise Sign in.

Store billing is RevenueCat on the App Store (APP_STORE), not Stripe Checkout and not Play.

Sub-tickets

# Page
#2 Sign in
#3 Sign up
#4 Password reset
#5 Dashboard (chat) — signed-in start
#6 Account
#7 Documents
#8 Analytics
#9 Feedback

Skipped: landing, pricing, privacy, changelog, public legal, public account-deletion, Stripe return pages.

Auth screenshots are the same web captures used on the Android tickets. Analytics consent banner was dismissed before capture. Signed-in pages still need a logged-in session to screenshot.

Done when

  1. Launch with a valid session opens Dashboard. Launch without one opens Sign in.
  2. Sign out returns to Sign in and clears the session (Keychain).
  3. Nav can reach Account, Documents (RAG plans), Analytics, and Feedback.
  4. No landing, pricing, privacy, or changelog route exists in the app.
## Goal Make `chat_ios` a working Hesychia client. Cold start goes straight into the product: - Stored session → **Dashboard** (chat). Web route `/` when authenticated (`AsyncDashboard2`). - No session → **Sign in**. Web route `/signin/`. Do not ship the public marketing site. Mirror of the Android epic: https://git.aimloperations.com/ai_ml_operations/chat_android/issues/1 ## Out of scope - Logged-out landing (`LandingPage` on `/`) - Pricing (`/pricing/`) - Privacy (`/privacy/`) - Changelog (`/changelog/`) - Public legal alias (`/legal/terms-of-service`) - Public account-deletion URL (`/account-deletion/`) — App Store listing can keep the web URL - Stripe return routes (`/billing/success`, `/billing/cancel`). App Store billing stays RevenueCat inside Account ## Source of truth Web app: `chat_web_app/llm-fe`. - Routes: `llm-fe/src/App.tsx` - Home split: `llm-fe/src/llm-fe/components/HomeRoute/HomeRoute.tsx` - Signed-in nav (`Header2`): Dashboard, Account, Documents (only if the plan has RAG), Analytics, Feedback, Sign out REST base: `REACT_APP_BACKEND_REST_API_BASE_URL` (prod `https://chatbackend.aimloperations.com/api/`). WebSocket: `REACT_APP_BACKEND_WS_API_BASE_URL` (prod `wss://chatbackend.aimloperations.com/ws/chat_again/`). Authenticated calls send `Authorization: Bearer <access>`. Refresh is `POST /token/refresh/`. ## iOS today `chat_ios` is a stub (README only). No screens yet. First navigation decision is the same as Android: session present opens Dashboard, otherwise Sign in. Store billing is RevenueCat on the App Store (`APP_STORE`), not Stripe Checkout and not Play. ## Sub-tickets | # | Page | | --- | --- | | #2 | Sign in | | #3 | Sign up | | #4 | Password reset | | #5 | Dashboard (chat) — signed-in start | | #6 | Account | | #7 | Documents | | #8 | Analytics | | #9 | Feedback | Skipped: landing, pricing, privacy, changelog, public legal, public account-deletion, Stripe return pages. Auth screenshots are the same web captures used on the Android tickets. Analytics consent banner was dismissed before capture. Signed-in pages still need a logged-in session to screenshot. ## Done when 1. Launch with a valid session opens Dashboard. Launch without one opens Sign in. 2. Sign out returns to Sign in and clears the session (Keychain). 3. Nav can reach Account, Documents (RAG plans), Analytics, and Feedback. 4. No landing, pricing, privacy, or changelog route exists in the app.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ai_ml_operations/chat_ios#1