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 acovers:-linked drift target.
Tech stack
| Area | Choice |
|---|---|
| Framework | React Native 0.78.2 (bare CLI), Hermes engine |
| Language | JavaScript (JSX), Node 20 toolchain |
| Navigation | React Navigation — native stack + bottom tabs |
| Styling | NativeWind (Tailwind for RN) + gluestack UI components |
| Config | react-native-config (.env → native + JS) |
| Auth storage | react-native-keychain (biometrics) + AsyncStorage |
| Push / Firebase | @react-native-firebase messaging, remote-config, analytics |
| Error tracking | @sentry/react-native 6.x |
| CI / release | Fastlane (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 serializerWhere to next
- Architecture — navigation, the auth context, and the services layer.
- Authentication — login, 2FA, admin TOTP, biometrics, sessions.
- Build & release — toolchain, Fastlane, signing, source maps.
- Push notifications — FCM setup and permissions.
- Configuration — env files and where secrets live.
Last updated on