A field sales app that works offline.
Reps and merchandisers get their store visits from a web panel and do the work on site: surveys, photos, orders, printed invoices. We have built and grown the mobile app for over 4 years, in Flutter for iOS and Android.
Sales Companion For field teams in retail
- years of development
- 4+
- survey question types
- 11
- activity types in a visit
- 7
- full sync a day, then offline
- 1
- platforms, one codebase
- 2
The dashboard, explained.
Where a rep's day starts. One screen, eight jobs.

- 1Mileage log
- 2Work timer
- 3Add an off-plan visit
- 4Visit status
- 5Download the day
- 6Planned, started, sent
- 7Date in the project colour
- 8Tabs set per client
One day in the field.
Five moments, recorded in the real app.
01 Morning
Download the day.
Warehouses kill the signal. So one sync pulls visits, stores, products and questions into the phone's own database, about 40 tables. No signal needed after that.
02 In the store
Answer, snap, record.
Surveys with 11 question types, photos and voice notes up to 30 minutes. If a low-memory Android phone kills the app mid-photo, nothing is lost.
03 At the counter
Invoice on the spot.
Sales documents and orders, printed on a Bluetooth thermal printer. Through our own print layer, written from scratch on raw Bluetooth Low Energy. No vendor SDK.
04 Off the plan
New store? New visit.
Pick it from the list or the map, nearest first.
05 Done
Send, and check it landed.
Each visit goes as one package. Then the app asks the server if it arrived.
Everything the field needs. In one app.
30 features from the app, and it keeps growing.
- VisitsPlanned visitsFrom the web panel, with due dates.
VisitsVisits inside visitsTasks group the activities of a visit.
VisitsOff-plan visitsPick a store on the list or the map.- VisitsSchedulesThe week ahead, day by day.
- VisitsPlanningDeadlines and days left on every visit.
- VisitsVisit timerStart, pause, resume.
SurveysDynamic survey buildingBuilt on the server. No app update.- SurveysNested surveysAnswers open more questions.
- Surveys11 question typesFrom yes/no to audio.
SurveysProduct surveysThe same questions for every product.- SurveysBarcode searchScan to find a question or product.
- SurveysOrder proposalsAn order built from survey answers.
MediaPhotosCamera or gallery, with captions.
MediaAudioVoice notes up to 30 minutes.- MediaSupervisor commentsA chat per visit or question.
SalesSales documentsInvoices and receipts.- SalesOrdersStraight to the distributor.
- SalesStock issuesFrom the rep's own stock.
- SalesBluetooth printouts58 and 80 mm thermal printers.
- SalesWarehouseStock that updates as you sell.
- ChecksGPS checksA point at every key step.
- ChecksFake GPS detectionFlagged for the supervisor.
- ChecksMileage logOdometer at the start and end of the day.
- ChecksWork timeA day timer with pause and end.
PlatformOffline syncOne download a day.- PlatformBackground sendingKeeps going when minimised.
- PlatformMulti-tenantOne app, many companies.
- PlatformServer-driven configFeatures on and off per client.
- PlatformMessagesMust-read notices with receipts.
- PlatformBug reportsSent with a copy of the local data.
4+ years. One app that keeps growing.
We have developed it for over 4 years, under an SLA, with two Flutter developers. Since the rewrite, a new version ships almost every week.
- commits since the rewrite
- 1,800+
- pull requests
- 395
- versions since 2.0
- 100+
- test files
- 398
Before
1.x
- The first app, in Flutter
- Written before null safety
- Rewritten from scratch in 2024
After the rewrite
2.8
- Dart 3, null safe, Flutter 3.44
- 36 feature modules, Bloc state
- 398 test files, scripted UI flows
- Every client moved over, old bugs gone
- 2022The first app goes live.
- May 2024The full rewrite starts.
- Sep 20242.0 ships, settings come from the server.
- Dec 2024GPS monitoring, app restore.
- Apr 2025New Bluetooth printing.
- Jul 2026Upgraded to Flutter 3.44.
- Sep 20262.8.10, build 363.
One app. Each client gets their own.
The company code at login connects the app to that client's server. Its settings switch tabs and features on or off, so a new client needs setup, not a new release.
Tabs
- Messages, on
- Schedule, on
- Dashboard, on
- Documents, off
- Warehouse, off
- Statement, off
- Files, on
Features
- Visit timer, on
- Off-plan visits, on
- Mileage log, off
- GPS route points, on
- Photos from gallery, off
- Print before saving, off
Got a team in the field? We'll build their app.
Offline, multi-client, printing included. Then we keep it growing. We do what it takes to make it.
Tell us about your teamLet's make something together.
No overengineering. No wasted time. Just straight-up execution.
Or book a call with Eryk (opens the booking calendar)[email protected]








