Mobile app for managing work orders with offline-first sync, backed by Realm and the FieldSync API.
- CRUD work orders — Create, edit, delete, and restore work orders.
- Offline-first — Full operation without network; data is stored locally in Realm and synced when online (initial full fetch, then delta sync, plus push of pending changes).
- Pull-to-refresh — Trigger full sync from the list screen; network status indicator in the header.
- Status filter — Filter list by status (Pending, In Progress, Completed).
| Area | Technologies |
|---|---|
| Mobile | Expo ~54, React Native, React 19 |
| UI | HeroUI Native and Tailwind (Uniwind) |
| Data | Realm (@realm/react) for local DB; Zustand for sync status; Axios for API |
| Forms / validation | React Hook Form and Zod |
| Navigation | Expo Router (file-based) |
| Network | @react-native-community/netinfo |
- Node.js — Version compatible with Expo 54 (e.g. 18+).
- npm or Yarn — For installing dependencies.
- iOS Simulator and/or Android emulator — Or a physical device for running the app.
-
Clone the repository and enter the project directory:
git clone https://github.com/wesleywcr/work-orders.git cd work-orders -
Install dependencies:
yarn install
-
Run on a specific platform
yarn android yarn ios
-
Start the development server:
npx expo start
Use
npx expo start -cto clear the cache if needed.
The app is offline-first: Realm is the source of truth. All writes go to Realm first; when the device is online, the sync engine runs an initial full fetch (or a delta using lastSyncedAt), resolves conflicts with a last-write-wins strategy based on updatedAt, and pushes pending creates, updates, and deletes to the FieldSync API. Sync is triggered on transition to online, when pending changes exist (with debounce), and on manual pull-to-refresh.
Released in 2026. By Wesley Rodrigues🤙👊
