‹ Back to work
Client · Oscar Books

SalesRoute

A field sales app for a book publisher's reps - school visits, orders and customer records from anywhere, with or without signal.

3
field reps, daily use
100%
features work offline
Delta
sync after first hydration
FlutterSQLiteNode.jsExpressPostgreSQLJWT

The problem

Oscar Books' reps spend their day visiting schools to pitch, log school data and place orders. Plenty of those schools have no signal at all, and the old process — paper forms copied into a spreadsheet later — lost data and wasted a rep's evening.

The app had one hard requirement: nothing about the job can depend on a network connection existing right now.

Offline-first architecture

SQLite is the source of truth on the device, not a cache in front of the server. Every record gets a UUID generated on-device (so two offline reps can never collide on an ID) and an updated_at timestamp, with a sync_status of pending, synced or failed. Only pending records get pushed up; conflicts resolve last-write-wins by timestamp, so there's no merge logic to get wrong.

Sync itself is two different operations depending on state: a delta pull of everything changed since last_synced_at, or — on a fresh install, where last_synced_at is null — a full hydration of the entire dataset behind a dedicated loading screen, so the rep isn't staring at a half-populated app while thousands of records stream in. A mutex lock around the sync routine stops a second sync from starting mid-flight.

A glass UI, rebuilt on tokens

The UI is mid-migration to a tokenized “liquid glass” design system — BackdropFilter blur, soft borders and highlights, all driven by a single AppColorExtension so no screen hardcodes a colour. A Lite mode swaps blur for a flat fill on lower-end devices, and every phase of the migration ships behind an analyze-and-device-test gate before moving on, so the app stays shippable the whole way through the redesign.

In the field

SalesRoute is in daily use by 3 field reps. It's handed to Oscar Books directly as a signed Android build rather than published to the Play Store — it's internal tooling for their own staff, not a consumer app, which is the normal way client field-sales tools like this ship.

Try it

Interactive phone preview. Open full screen to switch between mobile, tablet and landscape.Open full screen ›

Next project

Mrunal →