React Native kickoff readiness (web + native shared stack)
Path convention: $REPO_ROOT = monorepo clone (DEVELOPMENT.md).
Status (2026-05-27): Kickoff criteria below are cleared for daily Expo Go development. Ongoing native platform work (July 2026 EAS alpha, module registration, validation debt) is tracked in
docs/design/canonical-native-platform-surface.md.
Version baseline
-
apps/native/package.jsonuses a stable Expo SDK (notexpo: next) and React/RN versions aligned to that SDK. -
apps/native/tsconfig.jsondoes not include DOM libs (prevents accidental web-only APIs leaking into native).
Shared packages build (native-ready dist)
- After changes under
packages/**, rebuild shared package outputs:cd $REPO_ROOT./scripts/build-packages-in-docker.sh
- Verify
packages/*/dist/**reflects the latest source changes (these outputs are committed in this repo).
Shared UI design system (packages/platform/ui)
-
@umbraculum/uiexports initial shared primitives (Tamagui-based):Button,Text,Heading,Card,Screen,Spinner
- At least one web component uses shared UI (example:
apps/web/app/_components/LogoutButton.tsximportsButtonfrom@umbraculum/ui). - At least one native screen uses shared UI (example:
apps/native/src/screens/DashboardScreen.tsxusesScreen,Heading,Text,Buttonfrom@umbraculum/ui).
i18n (no hard-coded strings)
- New user-facing strings are added only to:
packages/platform/i18n/src/en.jsonpackages/platform/i18n/src/it.json
- Native i18n guardrail passes:
npm run i18n:guardrail -w @umbraculum/native(run in a Node container per repo policy)
- Native screens use
useT()from@umbraculum/i18n-reactfor user-visible text and accessibility labels.
Auth + web-only fallback routes (system browser bridge)
- Auth behavior is understood and validated:
- Web uses cookie sessions (
sid). - Native uses bearer tokens from
POST /auth/login/native. - Source of truth:
docs/AUTH-STRATEGY.md.
- Web uses cookie sessions (
- Web-only fallback route strategy is system-browser-first using:
POST /auth/webview-exchange(bearer) → returnsbridgeUrl(relative)- open
bridgeUrlin system browser → cookie minted → redirect to locale-prefixednext
- Shared navigation supports locale-prefixed web paths via:
packages/platform/navigation/src/index.tsrouteToLocalePath(ref, locale)
- Native has a small helper to open a whitelisted web flow via system browser:
apps/native/src/navigation/openWebFallback.tsopenWebFallbackRoute(...)
Media (shared assets)
- Native can load shared media via
@umbraculum/mediaURLs when base URL is configured:EXPO_PUBLIC_MEDIA_BASE_URLis set appropriately for simulator/device.- Native example component:
apps/native/src/media/RemoteImage.tsx.
Post-kickoff (active work)
| Topic | Doc |
|---|---|
| Native platform SoT, alpha scope, route matrix | docs/design/canonical-native-platform-surface.md |
| Ubuntu Touch workspace web UI (web slice + Click) | docs/design/ubuntu-touch-shell-strategy.md |
| EAS internal alpha (July 2026) | Same doc §5; apps/native/eas.json |
registerNativeModule | packages/sdk/module-sdk |
| Validation debt on brewery screens | Native surface doc §6 |