Context
A field-service SaaS running on Odoo had a strong back-office product but their technicians in the field were still on paper-and-photos. Adoption of Odoo’s out-of-the-box mobile surface had stalled; they needed a purpose-built app that understood their workflow.
Challenge
Build a cross-platform mobile app that worked offline, handled large photo uploads, captured signatures, and stayed reliable on marginal connectivity. Integrate against the Odoo backend without requiring a parallel API team.
Approach
- Backend layer — we extended Odoo with a custom JSON-RPC facade tuned for mobile, with predictable payload shapes and offline-friendly state transitions.
- Mobile app — React Native + Expo, with a local SQLite store for offline-first operations and a sync engine that handled conflicts deterministically.
- Photo and signature handling — compressed client-side, uploaded with resumable retries on reconnect.
- Store submission — screenshots, listings, reviewer back-and-forth, published under the client’s developer accounts.
- Post-launch — two sprints of iteration based on real technician feedback.
Outcomes
- Shipped to both stores in 14 weeks from kickoff.
- 400+ monthly active technicians within the first quarter.
- Photo upload success rate above 99% even on marginal networks.
- Support tickets from field techs dropped by over half.
What made this work
- Building the Odoo-side facade once, properly, rather than fighting the default REST surface.
- Offline-first architecture from day one, not retrofitted.
- One team responsible for both sides. No finger-pointing between a mobile team and a backend team.
“Not just Odoo — they built the mobile app that consumes our Odoo data, and they built it well. One team, one accountability line.”