OneWay Fast Food
One codebase, a new brand in one constant
A white-label redeployment of a Flutter delivery platform: new brand kit, adaptive live driver location, polygon coverage zones and golden tests.
- Country
Saudi Arabia
- Type
- Client project
- Timeline
- 2026
- Platforms
- Android · iOS · Web
- Flutter apps rebranded
- 3
- golden tests
- ~62
- golden suites, phone and tablet
- 9
Overview
OneWay Fast Food is a white-label redeployment of the delivery platform Mahmoud built for Talabatek. A new operator wanted the same proven customer, driver and restaurant apps under its own brand, currency and market settings, without starting from scratch.
The three Flutter apps were forked, rebranded through a single colour constant, moved to their own repositories and app IDs, and extended with features the original platform did not have yet: adaptive live driver location, courier tracking, polygon coverage zones, checkout memory and golden tests.
The work took place in September and October 2026.
The challenge
- 01
Rebrand without forking the product forever: hundreds of hard-coded
Colors.orangeshades had to change in one place - 02
A new market, new assumptions: currency, support numbers and default city were hard-coded and had to move into configuration
- 03
Launch features the operator needed: live courier tracking, polygon delivery zones and a smoother repeat checkout
- 04
Confidence without a QA team: a restaurant app with dozens of screens needed protection against visual regressions
Highlights
White-label rebrand
- One
brand.dartper app defines a singleMaterialColorswatch,kBrand, that every former orange reference resolves through - Python icon generators build Android adaptive and monochrome icons, iOS icons, splash images and store icons from one 1024 px master
- A compile-time
AppEnvswitch selects the environment
Customer and driver apps
- Live courier tracking on the map and coverage-aware address picking
- OTP login with a server-driven resend timer
- Checkout memory that pre-fills repeat orders per account and per address
- Free-delivery offers with correct Arabic plurals
- Adaptive live driver location, order alerts, Accept and Reject actions and one-tap calling
Restaurant app
- Feature-first structure with
get_it,dartzEitherrepositories and a sharedcore/ - Kitchen board, order details, menu with video, money hub and reviews
- Phone and tablet layouts in light and dark
- Automatic thermal printing of Arabic receipts on Sunmi, built-in POS and Bluetooth printers
Signature feature
White-label in one constant, printing that just works
- The restaurant app tries printers in order: a Sunmi printer through the SDK, then a native Java
PrinterClientwriting ESC/POS bytes to the built-in printer over Android'sLocalSocket, then a Bluetooth printer. - Receipts are formatted for 80 mm paper with the order number, line items, totals and a barcode, with Arabic sent as UTF-8.
- Auto-print remembers printed order IDs and retries each order up to three times, with a 15-second heartbeat while open and catch-up on missed orders when the app reopens.
- The whole palette lives in
kBrand: changing the brand means changing one swatch and regenerating the icons, with no find-and-replace across screens.
Screens
Swipe for more
Engineering notes
- 01
Adaptive live location
LiveLocationServicesends nothing offline, every 60 s at medium accuracy while idle, and every 10 s at high accuracy while carrying an order. Customers get fresh positions without draining batteries on idle shifts. - 02
Smooth courier tracking
The tracking screen polls every 5 s and animates the courier marker between readings over 4.5 s, so it glides instead of jumping, with guards against NaN and out-of-range coordinates.
- 03
Polygon coverage zones
City and district polygons are cached on the device and refreshed in the background. A local point-in-polygon check answers "we deliver here" instantly while the user drags the pin, and the server confirms.
- 04
Offline-safe checkout memory
Details are saved per account and per address only after an order succeeds, so a failed order never overwrites good data. Notes are never saved, everything clears on logout, and unit tests cover it all.
- 05
Rotation-safe token refresh
Parallel 401s share one in-flight refresh, because reusing a refresh token revokes the whole token family. Only a 401 ends the session; a 429, 503 or network error keeps it.
- 06
OTP done right
The server verifies the code and drives the resend countdown via
resendAfter. Code fields stay left-to-right inside the RTL layout, and the screen survives Android killing the app.
Results
- 3 Flutter mobile apps rebranded and moved to their own repositories and app IDs, sharing one brand kit
- About 62 golden tests and 62 reference screenshots protecting the restaurant UI on phone and tablet, in light and dark
- New platform capabilities built for this deployment: adaptive live location, courier tracking, polygon coverage and checkout memory
Stack
- Flutter
- Bloc / Cubit
- GetIt
- dartz
- Dio
- flutter_map
- Google Maps
- geolocator
- Sunmi / ESC/POS
- FCM
- Golden tests
- Python tooling