Offline-first apps · Build
Mobile apps for field work where there is no signal
Field staff capture sensitive data with no signal, and the app sends it once a connection returns. A passport app built this way runs in West Africa.
EngagementHourly · remote
Hours9–18 CET · 4 h overlap
StackReact Native · Expo · secure on-device storage
Proof3 case studies
The service in 4 parts
01 · Who it’s for
An organization whose people work in the field, at counters or in villages, without a reliable connection. The data is usually sensitive, and the devices don’t always stay in the office.
02 · What we’ve built
- Passport and ID card applications, with photographs and biometrics, captured on company phones where there is no signal and uploaded once there is. Built for a national identity authority in West Africa and in production.Case study 09 →
- Remittance terminals that keep printing coupons without a network. A coupon becomes valid only when the system confirms it, either automatically once the connection returns or through an operator.Case study 11 →
- More than a hundred terminals updated over the network. When an update failed, nothing changed: the terminal kept working and tried again every five minutes.Case study 12 →
03 · How we work
01 · HOW LONG A DEVICE STAYS OFFLINEWe size this to how the work is actually done instead of designing for every possible case. One working day offline is a much smaller problem than several weeks.
02 · DUPLICATESThe server decides whether a record already exists. A device that has been offline cannot know what other devices sent in the meantime.
04 · Stack
React NativeExposecure on-device storageremote wipeKotlinPostgreSQLAWS
Proof
Where we’ve done this before
Case study 09 · Identity1 working dayPassport and ID card applications, with photographs and biometrics, captured on company phones where there is no signal and uploaded once there is. Built for a national identity authority in West Africa and in production.Read the case study →Case study 11 · Identity3 domainsRemittance terminals that keep printing coupons without a network. A coupon becomes valid only when the system confirms it, either automatically once the connection returns or through an operator.Read the case study →Case study 12 · Identity100+ terminalsMore than a hundred terminals updated over the network. When an update failed, nothing changed: the terminal kept working and tried again every five minutes.Read the case study →
FAQ
Questions about this service
The phones belong to the organization and can be wiped remotely, which is what makes it acceptable to keep the data on them. With personal phones the same design would not have passed, and stronger encryption would not have changed that.
We keep the offline period short. On the identity project, agents returned their phones to the office at the end of each day, so the app never had to reconcile more than one day of work and there were no merge conflicts to resolve.
Then the app needs a defined behavior for that case. We did not test it on the identity project, and looking back we would have added a hard expiry on unsynced data from the start. It would have cost an afternoon.
It can record them, but they count only once the system confirms them. On the remittance terminals, a coupon printed offline could not be cashed until then, because a coupon paid out twice was the one failure that cost real money.
Next step
Describe the problem and we’ll come back with three options.
The first call takes 30 minutes, and you’re under no obligation.