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

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.