Skip to Content
Engineering11 Documentation πŸ”₯
FrontendPlatformsReact Native (Mobile)

React Native (Mobile)

Expo 54 platform with file-based routing, ~35+ E11-themed components, biometric authentication, and OTA updates β€” sharing Foundation packages with the React web platform from the same monorepo.

What It Does

The React Native platform lives in sdks-react alongside React web. It provides:

  • Shared Foundation packages (~24) covering auth, data, theming, error handling, files, notifications, maps, multimedia, registration, and more
  • ~35+ mobile UI components with E11 prefix, themed via useE11Theme() inline styles
  • A showcase mobile app (Expo 54) demonstrating Foundation SDKs with on-device Storybook
  • CI/CD pipelines via EAS Build with auto-submit to TestFlight and Google Play

The key differentiator is code sharing β€” Foundation packages split exports so pure TypeScript (models, services, repositories) is shared between web and mobile, while platform-specific hooks and components live in separate entry points.

Key Capabilities

CapabilityDescription
Expo 54 + Expo Router 6Managed workflow with file-based routing and Stack/Tab navigators
Shared Foundation LayerSame sdks-react packages as web β€” models, services, and repositories are shared
~35+ E11 ComponentsTheme-driven native components (buttons, forms, overlays, layout) with no NativeWind dependency
Biometric AuthFace ID / Touch ID via expo-local-authentication with SecureStore credential storage
TanStack QuerySame declarative data fetching as web β€” queries, mutations, realtime, infinite scroll
Firebase Integration@react-native-firebase/* for Auth, Firestore, Storage, Analytics, App Check
E11Theme SystemTyped theme context with light/dark mode, brand sets, and runtime tenant switching
OTA UpdatesExpo Updates with appVersion runtime versioning β€” ship fixes without app store review
EAS BuildManaged build profiles (dev, ci, qa, prod) with auto-submit to stores
On-Device Storybook13 component stories viewable directly in the mobile app
Deep Link Handling@engineering11/deeplink-frontend-sdk for native deep link routing

How It Fits Together

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Mobile App (apps/app β€” Expo 54) β”‚ β”‚ Layouts β†’ Screens β†’ Feature Components β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Feature SDKs (./rn exports) β”‚ β”‚ auth Β· user Β· files Β· notifications Β· β”‚ β”‚ multimedia Β· maps Β· registration Β· β”‚ β”‚ config Β· deeplink β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Foundation APIs β”‚ β”‚ platform Β· firebase Β· rest-client Β· β”‚ β”‚ di Β· error Β· theme Β· tenant-bootstrap β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ RN UI Components (@engineering11/rn-ui) β”‚ β”‚ ~35+ E11-prefixed themed components β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture

Provider Composition

The mobile app uses the same nested provider pattern as web, with RN-specific providers:

<E11ToastProvider> <ErrorProviderWrapper> <PlatformProvider platformContainer={firebaseContainer}> <TanstackQueryRNFirebaseProvider> <InjectBootstrapRN> <RNFirebaseProvider> <RNFirebaseAuthProvider> <AuthSdkProviderWrapper> <E11ThemeProvider> {children} </E11ThemeProvider> </AuthSdkProviderWrapper> </RNFirebaseAuthProvider> </RNFirebaseProvider> </InjectBootstrapRN> </TanstackQueryRNFirebaseProvider> </PlatformProvider> </ErrorProviderWrapper> </E11ToastProvider>

Expo Router 6 provides file-based routing with auth protection:

<Stack.Protected guard={!isAuthenticated}> {/* Public screens: login, forgot-password, verify-email */} </Stack.Protected> <Stack.Protected guard={isAuthenticated}> {/* Protected screens: home, profile, settings */} </Stack.Protected>

Shared Code with React Web

LayerShared?Content
lib/ (pure TS)Web + MobileModels, services, repositories, utilities
react/Web onlyReact hooks, providers, web components
rn/Mobile onlyRN hooks, providers, native components

Mobile-Specific Capabilities

  • Biometric auth β€” AuthBiometricService for Face ID / Touch ID with Expo SecureStore
  • Secure storage β€” AuthStorageService using Expo SecureStore for credentials
  • Deep links β€” @engineering11/deeplink-frontend-sdk for native routing
  • OTA updates β€” Expo Updates with runtime version policy
  • Native Firebase β€” @react-native-firebase/* packages for direct native integration

What You Don’t Have to Build

  • Shared Foundation packages (auth, data, error handling, theming, REST client, DI, and more)
  • Firebase integration (Auth, Firestore, Storage, Remote Config, Analytics, App Check)
  • TanStack Query hooks for Firestore with realtime subscriptions
  • Biometric authentication (Face ID / Touch ID) with secure credential storage
  • ~35+ themed native components
  • E11Theme system with dark/light mode and tenant brand switching
  • Structured error handling with Rollbar native SDK integration
  • REST client with auth tokens, retry, and tenant headers
  • Deep link handling and routing
  • OTA update infrastructure
  • EAS Build CI/CD with auto-submit to both app stores
  • On-device Storybook for component exploration

What You Build

  • Product-specific screens and native user experiences
  • Product-specific data models (via the shared repository layer)
  • Screen hierarchy, tab structure, and navigation flow
  • Brand theming overrides per tenant
  • Product-specific notification handlers
  • Environment-specific configuration
  • Product-specific tests

Next Steps

Last updated on