Skip to content
Emon.
All work

Case study 02

One mobile app for every on-prem site

An Expo / React Native app that finds the user's site on its own, picks the local or public server automatically and delivers push alerts, so a single build serves a whole fleet.

build for every site
1
build for every site
Expo / React Native apps
7
Expo / React Native apps
mobile commits
~170
mobile commits

Problem

The ERP in case 5 runs on its own server at each site. Staff wanted it on their phones, but a separate app per site would never be maintained, and the right server address changes with whether the phone is on the site's network.

Constraints

  • One build, every site: no per-site configuration in the app.
  • Phones move between the site LAN and mobile data; the app has to follow.
  • Alerts must arrive even when the app is in the background.
  • Reuse the existing web UI instead of rewriting the ERP for mobile.

What I built and led

  • Relay login: the user signs in once, and a relay tells the app which site they belong to and where its server lives.
  • Local-versus-public server detection with NetInfo, re-checked when the network changes.
  • A WebView host for the ERP's web UI, native push (Pusher + expo-notifications) and background tasks.
  • The same detection and notification pattern in an Electron desktop wrapper for the site PCs.
  • Beyond this app: telehealth patient and provider apps (Expo Router, NativeWind, LiveKit video consults, i18n, secure storage, maps and calendars) and LinkVault, a public offline-first bookmark manager (expo-sqlite, share intent, FlashList, Reanimated, Jest + RNTL).

Architecture

The app asks the relay where the user's site is, then checks whether the phone can reach that server on the local network or has to go over the internet, and loads the site's web UI. Events from the site arrive as native push notifications.

Impact

  • One APK for every site instead of one build per site
  • 50 of the app's 54 commits, Sep 2025 to Aug 2026
  • Telehealth patient and provider apps with WebRTC video consults: 27 + 22 commits, Apr to Aug 2026
  • LinkVault (public): 37 of 39 commits, offline-first on SQLite with a Jest + RNTL test suite

Commit counts from GitHub, October 2026.

Transfers to: Field and frontline apps for multi-tenant or on-prem software: retail, logistics, franchises, any product deployed per customer.

Stack

  • Expo
  • React Native
  • Expo Router
  • NativeWind
  • expo-notifications
  • Pusher
  • NetInfo
  • react-native-webview
  • expo-sqlite
  • LiveKit (WebRTC)
  • i18next
  • Electron