NEXSUM_LABS
  1. Home
  2. Work
  3. A charter bus company replaced its paper driver logs with an offline-first app dispatchers can trust
Book a call

[ Case study ]

Charter transportFlutterDart IsolatesSQLite (drift)Firebase Crashlytics

A charter bus company replaced its paper driver logs with an offline-first app dispatchers can trust

Driver trip logs were paper, dispatched itineraries were faxes of faxes, and the office reconstructed each week's actual operations from handwriting — billing lagged, and hours-of-service checks ran on trust.

CLIENT a regional charter and tour bus company — FOCUS Offline-first with append-only records

Flutter DevelopmentMobile AppsFlutter DevelopmentCharter transportRepresentative example
Client
a regional charter and tour bus company
Industry
Charter transport
Engagement
9 weeks — systems pod — 2 engineers
Service
Mobile Apps / Flutter Development
Headline outcome
Every active coach logging digitally, with exports matching the audit format on first submission: Paper logs → app-native trip records, read from Compliance audit walkthrough

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

Charter and tour work runs on paperwork this company never got ahead of: trip logs kept by drivers on paper clipboards, itineraries faxed and re-faxed between the office and dispatch, and each week's actual operations reconstructed from handwriting when billing came due. The fleet is regional — school trips, corporate shuttles, multi-day tours — with routes that lose connectivity for hours at a stretch. Hours-of-service expectations exist, but checking them meant trust and a phone call.

What it was costing

Driver trip logs were paper, dispatched itineraries were faxes of faxes, and the office reconstructed each week's actual operations from handwriting — billing lagged, and hours-of-service checks ran on trust.

What they could see

  • Billing waited on the office transcribing each week's paper logs, and invoices went out days after the trips they describe.
  • Hours-of-service checks ran on trust; nobody could reconstruct what a driver actually drove without calling and asking nicely.
  • Dispatch printed itineraries, drivers lost them, and stops were renegotiated by phone while the coach was already rolling.
  • Billing disputes a month ended unresolved because the paper record could not settle what happened, or when.

The constraints we worked inside

  • Rural charter routes lose connectivity for hours; the log must be fully functional offline and conflict-safe on sync.
  • Drivers range from smartphone-comfortable to resistant; the log screen must be completable with gloves on a bumpy road.
  • Compliance audits require an immutable, timestamped record — the store's design must be auditable by an outsider.

What had been tried before

The office bought a flatbed scanner and had drivers submit their completed paper logs at week's end for archiving.
Archiving came after the damage: the scans settled nothing, billing still ran on transcription, and an auditor was no closer to a coherent record.
A trial of a commercial fleet-timesheet app ran for one month with the two most tech-comfortable drivers.
It demanded connectivity the routes do not offer, charged per coach per month, and produced timesheets that did not match the charter business's trip-based billing.

What we proposed

We proposed an offline-first Flutter app where trip events append locally with device timestamps and sync in order when connectivity returns, so the log reads as one coherent record to an outside auditor regardless of signal. The driver screen is designed for the cab — gloved one-handed input, large targets, no free text where a choice will do. Dispatch, itineraries, and timesheets moved into the same app, so driver, dispatcher, and office finally look at one source when billing or compliance asks.

Just as important is what we ruled out, and why:

  • An off-the-shelf fleet management or ELD productCharter operations bill by trip, not by tachograph, and the audit format the company's clients and insurers expect was not something a generic product could emit.
  • Offline-capable web forms wrapped for mobileMulti-day offline stretches with conflicting edits are exactly where web storage strategies fail; the sync story needed a real local database, not a cache.
  • Keeping paper but standardizing the formsCleaner paper is still paper: billing would still wait on transcription, hours-of-service would still run on trust, and nothing would be reconstructable for an auditor.

How the work ran

01Offline-first with append-only records

Trip events append locally with device timestamps and sync in order, so an auditor reads one coherent log regardless of connectivity.

02Design the glove screen

One-handed, high-contrast inputs with big targets and no free text where a choice will do — the road set the interaction budget.

03Reconstruct dispatch in the app

Itineraries, stops, and timesheets came into the same app, so dispatch, driver, and office finally look at one source.

Delivered by the systems pod — 2 engineers over 9 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

Flutter
One small team had to ship driver screens, dispatch views, and office exports fast; a single codebase with consistent UI across the mixed device fleet made that possible.
Dart Isolates
Syncing and merging days of offline events must never freeze the log screen a driver is mid-entry on; isolates keep the heavy merge work off the UI thread.
SQLite (drift)
Append-only trip records with disciplined migrations give the auditable, conflict-safe store the compliance requirement demands, in a format that survives device swaps.
Firebase Crashlytics
Driver devices are older, rural, and unsupervised; crash reports queued and delivered when signal returns were the only realistic way to see how builds behave in the field.
Audit-ready export
The compliance audience is an outsider with no access to the app; producing the audit format directly from the log made the record defensible without translation.

What went wrong

Obstacle

Early sync testing showed logs arriving out of order after multi-day offline runs — device clocks drifted between coaches, and naive timestamp sorting interleaved one trip's events with another's.

Handled: We rebuilt ordering around an append-only sequence with server-side reconciliation and a clock check-in at every sync, so the auditor's view stays coherent even when a coach was dark for days.

Obstacle

The two most resistant drivers ran the app and paper in parallel for weeks, convinced the office would blame them the first time the app lost anything.

Handled: The operations manager set a cutover date once the sync fixes shipped, and the app's end-of-day summary — the log-close the clipboard was always supposed to be — did the persuading.

How we worked together

Cadence
A Monday dispatch review with the operations manager and a senior driver, plus periodic ride-alongs where we logged real trips from the jump seat.
Client side
A senior driver co-designed the cab screen and trained peers; the bookkeeper validated the billing export weekly; the operations manager owned scope and the cutover.
Decisions
The driver screen's every choice was argued from the jump seat, not the meeting room; commercial calls went to the operations manager, who answered in writing within a day.
They provided
Sample paper logs and itineraries for test data, the audit format their insurer expects, driver devices for pilots, and jump-seat time on actual charter runs.

What changed

The headline: every active coach logging digitally, with exports matching the audit format on first submissionPaper logs → app-native trip records, read from Compliance audit walkthrough. A second check: trip completion to billing-ready lag at 9 days → 2 days.

Billing stopped lagging operations: the bookkeeper closes the week from exports that describe what actually ran, and the gap between a trip and its invoice narrowed from more than a week to a couple of days. Hours-of-service moved from trust to record — the operations manager answers questions with a log, not a phone call to a driver mid-route. Drivers, initially the skeptics, now close the day's log at the last stop instead of ending the evening with clipboard arithmetic, and dispatch stopped re-faxing itineraries entirely.

The result was read from Compliance audit walkthrough against the pre-engagement baseline over the stated window, with a guardrail check on trip completion to billing-ready lag. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • Signed release pipeline, store listing, and Crashlytics access under the company's accounts
  • The drift schema documentation and append-only sync design notes
  • The audit export format specification agreed with their insurer's reviewer
  • A driver training kit recorded with the senior driver's own walkthrough
  • An offline test harness for verifying sync behavior after future changes

What we would do differently

We would co-design the driver screen in a parked bus from the first week — the cab's vibration and sunlight shaped decisions that a meeting room never would have.

Mobile AppsFlutter DevelopmentCharter transportFlutter

Next case study

A climbing gym chain moved check-in, courses, and memberships onto members' phones