docs(mobile): phase 0 quickstart + roadmap pointer
This commit is contained in:
+58
-14
@@ -1,27 +1,71 @@
|
|||||||
# @chat-app/mobile
|
# @chat-app/mobile
|
||||||
|
|
||||||
Expo + React Native client for iOS and Android.
|
Expo + React Native client for **Netralax** on iOS and Android.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Node 22+, pnpm 9+
|
- Node 22+, pnpm 9+
|
||||||
- Xcode (iOS) / Android Studio (Android)
|
- Xcode (iOS) / Android Studio (Android) — only needed for local
|
||||||
- Optional: `npm i -g eas-cli` for cloud builds
|
prebuild + emulator runs; EAS Build runs everything in the cloud.
|
||||||
|
- An Expo account (free) — required for `eas init` below.
|
||||||
|
- Optional: `npm i -g eas-cli` for the CLI commands. If you skip
|
||||||
|
globals, prefix every `eas` invocation with `npx eas-cli`.
|
||||||
|
|
||||||
## Dev
|
## Phase 0 quickstart
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# from repo root
|
# From the repo root.
|
||||||
pnpm install
|
pnpm install
|
||||||
pnpm mobile:dev # expo start
|
|
||||||
pnpm mobile:ios # native iOS run
|
# One-time: claim an EAS project ID. This rewrites the placeholder
|
||||||
pnpm mobile:android # native Android run
|
# `extra.eas.projectId` in app.json and links the local repo to your
|
||||||
|
# Expo dashboard. Commit the resulting app.json change.
|
||||||
|
cd apps/mobile
|
||||||
|
npx eas-cli init
|
||||||
|
|
||||||
|
# Sign in to Expo if you haven't.
|
||||||
|
npx eas-cli login
|
||||||
|
|
||||||
|
# Build a development client (custom dev-client APK + iOS simulator
|
||||||
|
# bundle). First iOS build prompts for Apple ID — free signing works
|
||||||
|
# for development distribution.
|
||||||
|
npx eas-cli build --platform all --profile development
|
||||||
```
|
```
|
||||||
|
|
||||||
## Notes
|
When the builds finish, EAS gives you a QR code / install link. Install
|
||||||
|
the dev client on your device, then start the Metro server from the repo
|
||||||
|
root:
|
||||||
|
|
||||||
- Uses Expo Router (file-based). Screens live under `app/`.
|
```bash
|
||||||
- Secrets stored via `expo-secure-store` (Keychain / Keystore).
|
pnpm mobile:dev # = pnpm --filter @chat-app/mobile dev = expo start --dev-client
|
||||||
- Local encrypted history via `expo-sqlite`.
|
```
|
||||||
- Crypto via `react-native-libsodium`.
|
|
||||||
- Shared business logic lives in `@chat-app/shared`.
|
Open the dev client on the device, scan the QR code, and Netralax's
|
||||||
|
Landing screen should render.
|
||||||
|
|
||||||
|
## Day-to-day
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm mobile:dev # Metro server
|
||||||
|
pnpm mobile:ios # native iOS run (local Xcode)
|
||||||
|
pnpm mobile:android # native Android run (local Android Studio)
|
||||||
|
pnpm mobile:typecheck # tsc --noEmit
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture notes
|
||||||
|
|
||||||
|
- Expo Router (file-based) — screens live under `app/`.
|
||||||
|
- `expo-secure-store` — Keychain / Keystore-backed secret store (used by
|
||||||
|
the mobile `SecretStore` adapter in Phase 1).
|
||||||
|
- `expo-sqlite` — local encrypted history (Phase 1).
|
||||||
|
- `react-native-libsodium` — crypto primitives (Phase 1's
|
||||||
|
`CryptoBackend` adapter wraps this).
|
||||||
|
- `@chat-app/shared` — business logic shared with the desktop, including
|
||||||
|
the `CryptoBackend` and `SecretStore` interfaces the mobile adapters
|
||||||
|
plug into.
|
||||||
|
- `lib/sharedSmoke.ts` exists only to prove Metro can resolve the
|
||||||
|
workspace package; it's deleted in Phase 1.
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
See `docs/superpowers/specs/2026-05-13-mobile-deployment-roadmap.md`.
|
||||||
|
|||||||
Reference in New Issue
Block a user