Mobile Application

Repository: bridges-mobile-app-source-code/oim-mobile-main

The beneficiary mobile application is built with React Native and Expo (Expo Router for file-based navigation), written in TypeScript. It mirrors the web experience for beneficiaries who primarily access the platform from a phone.

Technology

Concern

Implementation

Framework

React Native + Expo (SDK 54)

Navigation

expo-router (file-based), @react-navigation/*

Language

TypeScript

Secure storage

expo-secure-store (tokens)

Local storage

@react-native-async-storage/async-storage

i18n / locale

i18n-js + expo-localization

Animations / gestures

react-native-reanimated, react-native-gesture-handler

Media / UI

expo-image, react-native-svg, @expo/vector-icons

Application Contexts

Global state is provided through React contexts in context/:

Context

Responsibility

AuthContext

Authentication state, login/logout, token lifecycle

BeneficiaryContext

Current beneficiary data

ProfileContext

Profile completion state and updates

LanguageContext

Active language / locale

Key Components

Reusable components in components/ include CompleteProfileModal, ProfileCompletionBanner, FilterModal, RecommendationDetailModal, SessionExpiredModal, themed primitives (themed-text, themed-view), and haptic-tab for tactile navigation feedback.

API Service Layer

Network access is centralized in services/api:

File

Responsibility

client.ts

Configured HTTP client (base URL, auth headers, interceptors)

auth.ts

Authentication endpoints (login, register, password reset)

beneficiary.ts

Beneficiary profile and recommendation endpoints

reference.ts

Reference / lookup data (regions, sectors, skills)

types.ts

Shared request/response types

index.ts

Barrel export

User Flows

The mobile app supports onboarding, registration and email verification, a multi-step profile-setup wizard, viewing and filtering recommendations, viewing recommendation detail, and managing notifications. Session expiry is handled gracefully via the SessionExpiredModal and the AuthContext token lifecycle.