Skip to content
Book a call

Field ops · Field inspection

AS Data Collector

Inspection checklists that finish where there is no signal, and reconcile when there is.

Role
Mobile lead
Duration
11 months
Team
2 from our side
Sector
Field inspection
Site 41-B
Structural12/12
Electrical8/9
Egress0/6
offline
Electrical
PassFail
2 photos attached
as — checklist run
Queue4
Site 41-B · fullpending
Site 39-A · partialpending
Site 38-C · fullpending
Site 37-B · fullsynced
no signal
Sync
4records held locallyRetry now
resumes automatically
as — offline queue
Conflict1
Egress · item 4
This device14:02
Server13:58
Resolve
field-level merge
Photosboth
Resultask
Notesmine
Keep both
as — sync conflict review

Interface illustrations, not screenshots — the client's product is under agreement.

The situation

Inspectors work sites with no reliable connectivity — basements, rural infrastructure, buildings mid-construction. The job is a long structured checklist with photographs attached.

Treating offline as an error state was not an option. Offline is the normal condition of this application.

The problem

A queue that replays writes on reconnect is straightforward until two inspectors edit the same record from two devices, both offline, and both come back.

Last-write-wins is unacceptable when the thing being overwritten is an inspection finding with legal weight attached.

What we built

  1. 01

    Local-first storage with Realm

    The device is the source of truth during a run. The full checklist, its validation, and its photographs work with the network switched off entirely.

  2. 02

    A custom conflict-resolution layer

    Field-level merge rather than record-level, with genuine conflicts surfaced to a human instead of silently resolved. Nothing is discarded without someone deciding.

  3. 03

    A sync queue that survives interruption

    Idempotent, resumable, and safe against being killed mid-upload — because a phone in a truck will be killed mid-upload.

  4. 04

    Photograph handling built for bad networks

    Compressed and chunked on the device, uploaded independently of the record, so a large attachment cannot block a completed checklist from arriving.

React NativeRealmCustom syncNodeAWS S3PostgreSQL

The outcome

Inspectors complete full checklists with no connectivity; queued records sync on reconnect with zero data loss.

The connectivity question left the inspector's job. Records queue locally and reconcile when signal returns, with real conflicts escalated rather than resolved behind someone's back.