abhilashbera.dev › work › field-operations-app
Field Operations Mobile App
Mobile · React Native · Offline-first
A React Native application for inspection crews who work in places where the network is a suggestion, not a guarantee.
- Year
- 2024
- Role
- Mobile · Backend
- Status
- Shipped
- Stack
- React Native · Expo
Problem
Inspections were recorded on paper, photographed, and typed into a system that evening — losing detail and a full day. Existing apps assumed a connection and simply failed at the site, which meant crews stopped trusting them within a week.
Solution
Every write goes to a local SQLite database first and the interface never waits on the network. A sync engine reconciles queued mutations when connectivity returns, resolving conflicts with a last-writer-wins policy per field rather than per record, so two people editing different parts of the same job never collide.
Features
- 01
Offline capture
Forms, photos and signatures recorded and queued locally with no connection required.
- 02
Field-level sync
Conflict resolution per field, with an audit trail of what the server changed and why.
- 03
Media pipeline
Photos compressed on device and uploaded opportunistically on a metered-connection policy.
- 04
Job dispatch
Schedulers assign work from the web console; devices pull the day's route on first signal.
Screens
Technology
Mobile
- React Native
- Expo
- SQLite
- MMKV
Backend
- Node.js
- Express
- Sync API
Data
- PostgreSQL
- S3
Infrastructure
- EAS Build
- Sentry
Architecture
01Device
React Native App
Forms · Camera
SQLite + Queue
Local source of truth
02Service
Sync API
Merge · Conflict rules
Media Worker
Compress · Upload
03Data
PostgreSQL
Jobs · Inspections
Object Storage
Photos · Signatures
04Console
Web Dispatch
Scheduling · Review
Exports
Client reporting
Request flow — left to right
Result
Reports are filed from the site instead of that evening, and crews stopped carrying paper as a backup — the quiet signal that an offline app is actually working.
- Core flows work offline
- 100%
- Report turnaround
- 1 day → live
- Single codebase
- iOS + Android