Skip to main content

ADR 0010: React Native with Expo for the mobile apps

  • Status: accepted, in progress
  • Date: 2026-11-07 (recommendations accepted)
  • Decision makers: the user, who accepted the recommendations in the spec

Context and problem statement​

Founders and mentors need a phone app with native video, live-class video and push notifications. The first platform design chose a PWA over native mobile. That reasoning no longer holds. Which approach should the app use?

Decision drivers​

  • Real push notifications and native video playback with Range support.
  • An official LiveKit SDK.
  • Reuse the team's TypeScript and React skills.
  • Avoid store-review rejection risk of a thin web wrapper.

Considered options​

  • Responsive web only.
  • A Capacitor wrapper around the web app.
  • React Native.

Decision outcome​

React Native with Expo (SDK 57, development builds, not Expo Go) for Founder and Mentor on Android and iOS. Staff roles use responsive web. Responsive web comes first. This supersedes the PWA decision in the platform design for these two roles. Capacitor is the documented fallback only if the pilot must go live in weeks.

Related accepted choices: sign-in with OIDC authorization code and PKCE against a publicly reachable Keycloak (gated, see below), English first with Telugu addable, test channels for store builds under the delivery company, FCM and APNs for push, and graceful offline behaviour in the first release.

Consequences​

  • Good: native players and push; one mobile codebase.
  • Bad: the web UI does not carry over. Atlaskit cannot be reused, so screens are rebuilt.
  • Bad: real sign-in on a phone needs Keycloak exposed publicly. That needs the user's approval and a security review, and has not been given. The first slice therefore uses a demo sign-in profile in a closed build.

Confirmation​

A mobile/ directory exists on the mobile-app branch. It is not on main. See Mobile apps.

Sources​

.kiro/specs/responsive-and-mobile-apps/{requirements,design,tasks}.md, .agents/tasks/mobile-app/{plan,decisions}.md.