All projects

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.
Fieldwork’s dispatch desk showing inspection work orders with assignees, due dates, and status filters.
Fieldwork’s web dispatch desk with sample work orders from the project’s README.View full-size Fieldwork preview

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.

Download Fieldwork walkthrough (MP4)

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.
Next projectTrait