Web Development
Offline-First PWAs: Building Field Apps That Work Without Signal
Inspection crews, carers, drivers and engineers work where the signal does not. A progressive web app that is designed offline-first keeps them working and syncs when it can. Here is how we build one, and when a PWA beats an app store app.

A great deal of important work happens where phones show one bar or none: substations, basements, rural lanes, hospital wards, loading bays. Software written for the office assumes the network is always there, and in the field that assumption produces the familiar failures: a form that loses twenty minutes of entries, a spinner that never stops, a crew that goes back to paper.
Offline-first turns the assumption round. The app treats the device as the source of truth and the network as an occasional luxury. Our progressive web app service builds exactly this kind of application, and the inspection app we built for a utility's field crews is the pattern this article describes.
Why a PWA Rather Than an App Store App
A progressive web app is a website that installs. It gets an icon, opens full screen, works offline and can send notifications, and it is updated by deploying to a server rather than through a store review. For a workforce tool used on company devices, that last point alone is decisive: a fix ships in minutes and every device has it next time it is opened.
Native apps still win when the work needs deep hardware access, background location, or the camera and sensors used continuously. For that, our mobile app team will say so. For forms, checklists, photos, signatures and lookups, a PWA is usually the better fit and a fraction of the cost. The general comparison is in our PWAs versus native apps guide; this piece is about the offline part specifically.
Principle 1: Everything Writes Locally First
Every record the user creates or edits is saved on the device immediately, in a browser database designed for the job, and only then queued for sending. The user sees their work saved the instant they tap, regardless of signal. A sync process runs in the background whenever the network is available and sends the queue in order, retrying until it succeeds.
This sounds obvious. The reason most apps do not do it is that it forces the hard questions early: what is a record, what is its identity before the server has seen it, and what happens if two people edit it.
Principle 2: Decide on Conflicts Before They Happen
Two engineers update the same asset while offline. Which version wins? There is no universal answer, only a per-field policy decided with the people who use the system. Status fields often take the latest; free-text notes are merged and both kept; measurements are kept with a timestamp and the second one flagged for review. Writing the policy down is most of the work. Implementing it is routine.
Principle 3: Download What the Day Needs
An offline app is only useful if the reference data is already on the device. At the start of a shift the app pulls the day's jobs, the assets involved, the checklists, the lookup lists and any documents, and tells the user when it is ready. Everything the crew is likely to need is on the device before they leave the yard. Large datasets are paged or filtered by route; nobody needs the whole asset register.
Principle 4: Photos and Signatures Are Data Too
Photos are the heaviest thing a field app handles and the first thing to break sync. We resize on the device before saving, store them alongside the record, and upload them separately from the small text payload so a slow connection sends the inspection result first and the pictures afterwards. Signatures are captured as vector data, tiny and legible at any size.
Principle 5: Show the Truth About Sync
Users trust an offline app when it tells them what it has and has not sent. A simple indicator per record, a count of pending items, and a clear message when something has failed and needs attention remove the anxiety that drives people back to paper. Hiding sync state to make the app look seamless is how you get duplicate submissions and lost work.
The Server Side
An offline-first client needs an API that accepts batches, tolerates the same record arriving twice, and returns what changed since a given moment so the client can catch up cheaply. We usually build this on Node.js or Python, with the conflict policy enforced on the server as well as the client, because the server is where the record of truth lives once the device has synced.
When It Is Worth It
If your people ever lose work, re-key paper, or wait for signal to finish a job, the case usually makes itself: the inspection app above cut re-keying from several hours a day to none and lifted on-time completion by a third. If you want to test the idea before committing, describe one workflow, the one that fails most often in the field, and we will show you how it would behave offline. For the wrapping that puts a PWA in the app stores as well, see Ionic and Capacitor.


