Skip to content
All projects
Client project Delivery & commerce

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
OneWay
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

  1. 01

    Rebrand without forking the product forever: hundreds of hard-coded Colors.orange shades had to change in one place

  2. 02

    A new market, new assumptions: currency, support numbers and default city were hard-coded and had to move into configuration

  3. 03

    Launch features the operator needed: live courier tracking, polygon delivery zones and a smoother repeat checkout

  4. 04

    Confidence without a QA team: a restaurant app with dozens of screens needed protection against visual regressions

Highlights

White-label rebrand

  • One brand.dart per app defines a single MaterialColor swatch, 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 AppEnv switch 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, dartz Either repositories and a shared core/
  • 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 PrinterClient writing ESC/POS bytes to the built-in printer over Android's LocalSocket, 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.

Swipe for more

Engineering notes

  1. 01

    Adaptive live location

    LiveLocationService sends 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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