Skip to Content
MobileOverview

Overview

The IBA mobile app is the native iOS and Android client for members. It’s a bare React Native app (React Native CLI, not Expo) that talks to the same api.tunnelflight.com backend as the www web app, and shares the platform’s business logic — most importantly the authentication & 2FA rules.

[!NOTE] The mobile app is in a separate repository: edigitalgroup/tunnelflight-mobile-app (locally ~/Sites/tunnelflight-mobile-app). It is not part of this monorepo, so these docs are a reference rather than a covers:-linked drift target.

Tech stack

AreaChoice
FrameworkReact Native 0.78.2 (bare CLI), Hermes engine
LanguageJavaScript (JSX), Node 20 toolchain
NavigationReact Navigation — native stack + bottom tabs
StylingNativeWind (Tailwind for RN) + gluestack UI components
Configreact-native-config (.env → native + JS)
Auth storagereact-native-keychain (biometrics) + AsyncStorage
Push / Firebase@react-native-firebase messaging, remote-config, analytics
Error tracking@sentry/react-native 6.x
CI / releaseFastlane (TestFlight + Play Store), GitHub

How it fits the platform

  • Same API, same rules. Login, 2FA (SMS/email OTP, admin TOTP), currency, payments and the logbook are all enforced server-side; the app is a client over those rules. Where a flow overlaps with documented business logic, these pages link to it rather than restating it.
  • Parallel to www. The app and the web portal are two front-ends over the same backend. A few flows are web-only today — most notably the mandatory-2FA setup redirect, which the app defers to the web portal for.

Repository layout (high level)

tunnelflight-mobile-app/ src/ context/ AuthContext (session, inactivity, required actions) navigation/ RootNavigator, stacks, tab nav, SCREENS constants screens/ auth/, tabs/ (home, chart, logbook, profile, support), required/ (payment, currency, 2FA, force-update) services/ ApiServices (axios), authService, biometricService, PushNotificationService, userService, … config/ sentry.js, AsyncData utils/ logger (→ Sentry), requestError ios/ android/ native projects (CocoaPods / Gradle) fastlane/ build + release lanes metro.config.js Metro + NativeWind + Sentry serializer

Where to next

Last updated on