Expo + React Native mobile app for OneUptime on-call management.
- Node.js 18+
- npm
- Expo Go app on your iOS or Android device (for quick testing)
- A running OneUptime instance (or use
https://oneuptime.com)
For native builds:
- iOS: macOS with Xcode 15+
- Android: Android Studio with SDK 34+
cd MobileApp
npm installnpm startThis starts the Expo dev server. You'll see a QR code in the terminal:
- iOS: Scan the QR code with your iPhone camera
- Android: Scan the QR code from the Expo Go app
npm run iosRequires Xcode installed on macOS.
npm run androidRequires Android Studio with an emulator configured.
npm run webOn first launch, the app will ask for:
- Server URL - The URL of your OneUptime instance (defaults to
https://oneuptime.com). The app validates the URL by calling/api/statusbefore proceeding. - Login - Email and password for your OneUptime account.
Tokens are stored securely in the device Keychain. The server URL is stored in AsyncStorage.
MobileApp/
├── src/
│ ├── api/ # Axios client, auth API calls
│ ├── components/ # Reusable UI components (badges, skeleton, empty state)
│ ├── hooks/ # Auth hook / context
│ ├── navigation/ # React Navigation (auth stack, main tabs)
│ ├── screens/ # Screen components (auth, home, incidents, alerts, settings)
│ ├── storage/ # Keychain (tokens) and AsyncStorage (server URL)
│ ├── theme/ # Colors, typography, spacing, theme context
│ └── App.tsx # Root component with providers
├── assets/ # App icons and splash screen
├── app.json # Expo configuration
├── index.ts # Entry point
├── package.json
└── tsconfig.json
ServerUrlScreen → LoginScreen → MainTabNavigator (Home, Incidents, Alerts, Settings)
- Access tokens are refreshed automatically on 401 responses.
- Logout clears all stored tokens and returns to the login screen.
Native push notifications (iOS/Android) are powered by Expo Push and require no server-side configuration. The mobile app registers an Expo Push Token with the backend on login. The backend sends notifications via the public Expo Push API.
Web push uses VAPID keys (configured separately). See the Push Notifications docs for details.
- "Network Error" on login: Make sure your OneUptime server URL is correct and reachable from your device/emulator.
- Expo Go can't connect: Ensure your dev machine and phone are on the same Wi-Fi network. Try
npm start -- --tunnelif direct connections don't work. - iOS build fails: Run
npx expo prebuild --cleanthennpx expo run:ios. - Android build fails: Run
npx expo prebuild --cleanthennpx expo run:android.