Project 06 / Personal
Fieldwork.
Complete inspections without a signal.
I built a React dispatch desk and an Expo app that lets field workers save checklists and photos offline and sync their reports when they reconnect.
- My role
- Creator and maintainer
- Built with
- React / React Native / Expo / TypeScript / Fastify / SQLite
- Status
- Open source · Early development
Project in brief
- The problem
- An inspection can lose its connection before a worker has finished or the server has confirmed the report.
- My contribution
- I built the React dispatch desk, Expo inspection app, and API, and maintain the open-source project.
- Key decision
- Shared the sync rules across IndexedDB and SQLite, preserving submission IDs when reports are retried.
- Result
- The core workflow supports offline drafts and queued reports. The public repository includes setup instructions and demo data.

See the workflow
A browser recording with sample inspection data and a local API. A draft survives an offline reload, the report waits in the outbox, and reconnecting sends it to the server. This recording shows the web app.
Read the walkthrough
Open a cached assignment in the browser notebook. Complete its checklist and save notes on the device. Reload while offline: the checklist and notes remain. Submit the report while disconnected and open the sync outbox, where it is waiting to sync. Reconnect. After the server accepts the queued report, the outbox clears.
01
Overview
Fieldwork is an open-source tool for teams that assign and review inspections. A manager sends a work order, a worker fills out the checklist on site, and the manager can approve the report or ask for changes.
A worker might lose their connection halfway through a checklist. I wanted drafts to survive a restart and reports to stay queued until the server confirmed receipt.
02
My work
I started Fieldwork and maintain it as an open-source project. I built the first inspection workflow across the web app, the Expo app, and the API.
- Built the dispatch and review screens, including assignment scheduling and report history.
- Added text responses and numeric readings to checklists across web and Expo, including offline drafts and saved reports.
03
Technical decisions
The React app stores offline work in IndexedDB. The Expo app uses SQLite. Both use the same TypeScript sync engine and send queued reports to a Fastify API.
- Kept the sync queue independent of storage so the browser and phone use the same retry rules.
- Reused the original submission ID after a timeout so retrying a report could not create a duplicate.
- Checked the work order version on submission. If it changed, the app shows the conflict and keeps the draft and photos.
04
Scope & status
The core inspection workflow is available on web and Expo. The GitHub repository includes setup instructions and demo data.
- Workers need to open an assignment while connected before they can complete it offline.
- The current self-hosted setup supports one team per server.