One codebase from the cashier to a salon marketplace: 10 lessons from two years of Flutter
The TtaKkaa ecosystem alone is four apps: cashier, kitchen display, customer app and store dashboard. Add Beauty Map and Home Beauty for beauty services, and Meshareeb for beverage delivery in Kuwait. All Flutter. Here a…

The TtaKkaa ecosystem alone is four apps: cashier, kitchen display, customer app and store dashboard. Add Beauty Map and Home Beauty for beauty services, and Meshareeb for beverage delivery in Kuwait. All Flutter. Here are ten lessons you will not find in the docs.
1. “Offline first” is not optional in point of sale
Restaurant internet drops at the lunch peak. TtaKkaa Cashier completes the order locally, prints, and syncs later with clear conflict resolution. Had we built it “online, then add offline” we would have rewritten it.
2. The kitchen display is a different app even if it shares code
A KDS is not touched; it is read from two metres away. Huge type, high contrast, exactly three colour states. We shared the data layer and models, and not a single widget.
3. Four languages mean four directions of thinking
The TtaKkaa Store dashboard supports four languages. The lesson: never write left or right; only start and end, and test Arabic and Urdu together because they break different assumptions.
4. Maps need a strategy, not a library
In Beauty Map (a women’s salons directory) and Home Beauty (at-home beauty services) the map is the product. Marker clustering, viewport-based loading and tile caching are early decisions that determine whether the app works on a mid-range phone.
5. Payments are built once and wrapped well
One payment module supports Gulf and Egyptian providers behind a single interface. Meshareeb and TtaKkaa Customer use the same module, and any new provider is added in one place.
6. Thermal printing is a small hell — isolate it
Printers differ, and their protocols are older than the team. An independent print layer with a simple interface and recorded fixtures for every model we run. Never let the printer touch order logic.
7. State: few tools, much discipline
We chose one state-management solution and stuck with it across every app. Switching tools cost an older project a whole month without a single feature.
8. Performance is measured on the cheapest device your customers use
We keep an old Android phone in the office named “the real customer”. Every release runs on it first. Meshareeb in Kuwait runs on drivers’ phones, not developers’ phones.
9. Real-time orders: WebSocket with a fallback plan
An order appears in the kitchen within a second over WebSocket, and when the connection drops it falls back to polling without the chef noticing. The silent fallback is the feature.
10. On-device AI starts small
The first smart feature in Home Beauty was suggesting the best appointment slot from a client’s booking pattern — a tiny model running on the device, no data leaving the phone. It worked because it was small and clear, not because it was “smart”.
Flutter is a promise of one codebase. Keeping the promise comes from the layers you separate wisely, not the code you share enthusiastically.


