Stack
Visual design matches the cultural design language used on web — same roles for colour, type scale, and motion rhythm (native controls styled; not generic Material as the brand default).
- Expo SDK, Expo Router (file-based routing)
- TanStack Query v5, Zustand
- Persistence: MMKV (or similar) for cart; Secure Store for tokens
@stripe/stripe-react-native(or hosted Checkout in WebView — pick one pattern)react-native-maps+expo-locationfor nearest stallexpo-notificationsfor reminders; device token registration to API when readypackages/validatorsfor shared input validation
Planned folder tree
apps/mobile/
├── app/
│ ├── (tabs)/index.tsx # Home
│ ├── (tabs)/packages.tsx
│ ├── (tabs)/bookings.tsx
│ ├── (tabs)/profile.tsx
│ ├── packages/[slug].tsx
│ ├── booking/cart.tsx
│ ├── booking/checkout.tsx
│ ├── booking/confirmation.tsx
│ ├── auth/login.tsx, register.tsx
│ ├── _layout.tsx
│ └── +not-found.tsx
├── components/
├── hooks/
├── stores/ # Zustand + MMKV
├── lib/
│ ├── api-client.ts
│ ├── auth.ts
│ └── notifications.ts
├── constants/
├── app.json / app.config.ts
└── eas.json
Screen checklist
- Splash + onboarding
- Home
- Services / packages list + filters
- Package detail + add to cart / book
- Cart + checkout (pilgrim + ancestor flows per package type)
- Find nearest stall (permissions, map, sorted list)
- My bookings + detail
- Profile
- Notifications (local + push when configured)
Updates during the mela
Expo Updates can ship JS/asset fixes quickly. Apple’s guidelines still apply: no undisclosed native capability changes. Plan store releases for native dependency upgrades.
Auth on mobile
Align Better Auth with a supported mobile session model (cookies vs bearer). Document the chosen approach in Backend API so both clients share one contract.