# MOBILE_WALKTHROUGH — Oshun Mobile (Expo / React Native)

A checklist-driven inventory of every screen and interaction in the Oshun
**mobile** app — the Expo / React Native app at `apps/oshun/mobile`, using Expo
Router (file-based routing under `apps/oshun/mobile/app`). Parallel to
[`../WALKTHROUGH/`](../WALKTHROUGH/README.md); same per-view section structure,
adapted for native.

## What this is (and is not)

- **Is**: A per-screen checklist — what a user taps, swipes, and reads, with the
  navigation target, gesture, accessibility announcement (VoiceOver / TalkBack),
  and platform (iOS / Android) deltas for each interactive element.
- **Is not**: A web walkthrough. There is no PWA / service worker; instead the
  States sections cover native concerns — offline (NetInfo / cached + offline
  queue), permissions-denied (camera / mic / notifications), and safe-area
  handling.

## Screen map

Expo Router structure under `apps/oshun/mobile/app`. A tab navigator (`(tabs)`)
plus stack screens.

| Screen file             | Walkthrough         | What it is                                         |
| ----------------------- | ------------------- | -------------------------------------------------- |
| `(tabs)/index.tsx`      | `home.md`           | Daypart-anchored home (hero, continuity, bridges)  |
| `(tabs)/explore.tsx`    | `explore.md`        | Client-side universal search + guided lanes        |
| `(tabs)/activity.tsx`   | `activity.md`       | Cross-domain notification timeline (offline queue) |
| `(tabs)/library.tsx`    | `library.md`        | Preserve surface — saved items, share-ingest       |
| `(tabs)/profile.tsx`    | `profile.md`        | Account governance — billing, privacy, sessions    |
| `compose.tsx`           | `compose.md`        | Yemaya living-scenes composition                   |
| `domain/[domainId].tsx` | `domain-detail.md`  | Polymorphic domain route (6 domains; ~15k LOC)     |
| `mocap.tsx`             | `mocap.md`          | Smartphone markerless motion capture studio        |
| `profile/safety.tsx`    | `profile-safety.md` | Safety record / guarded re-entry journey           |
| `v2.tsx`                | `v2.md`             | V2 companion (fighting-game second screen)         |
| `v3.tsx`                | `v3.md`             | Lilith companion + native-launch panel             |
| `v6.tsx`                | `v6.md`             | Egbe steward companion + remote stewardship sync   |

Not given per-view files (infrastructure, noted in cross-refs): `_layout.tsx`,
`(tabs)/_layout.tsx`, `+not-found.tsx`, and `*.test.tsx`.

## Folder layout

```
MOBILE_WALKTHROUGH/
  README.md          # this file
  home.md  explore.md  activity.md  library.md  profile.md
  compose.md  domain-detail.md  mocap.md  profile-safety.md  v2.md  v3.md  v6.md
  matrix/
    routes.csv       # route,group,source,target,status,notes
```

## Per-screen files

Each follows the section structure of
[`../WALKTHROUGH/00-conventions.md`](../WALKTHROUGH/00-conventions.md), adapted
for React Native (see "is not" above). All 12 screens are **drafted**.

## Notable findings (code-state)

1. **`domain/[domainId].tsx` is enormous** (~15,100 LOC of dense per-domain
   logic). `domain-detail.md` captures the shared scaffold and the full state
   machine (loading / access-locked paywall / offline / unavailable / planned /
   deep-link-focus); a per-domain deep walk of the content blocks is a
   recommended follow-up.
2. **`compose.tsx` and `profile/safety.tsx` are Expo Router-discovered routes,**
   not explicit `<Stack.Screen>` declarations. Both now have visible launchers:
   Home opens the scene composer when its feature flag is enabled, and Profile
   opens the safety record. `compose` still shows "Paid tier" copy without an
   entitlement gate.
3. **`v2.tsx`, `v3.tsx`, and `v6.tsx` are thin route wrappers** around their
   companion implementations in `../v2`, `../v3`, and `../v6`.
4. Offline is handled via `GlobalOfflineBanner` / `ShellOfflineContinuityCard`
   and an activity offline queue; `mocap` flushes uploads behind a flag. Some
   screens (e.g. mocap controls) are missing `accessibilityLabel`s — flagged.
