SoqEgy
Two apps. One backend. Egyptian payment gateways. One sprint.
Customer app + delivery-agent app shipped in parallel — both live within the same sprint.

The Challenge
Two completely different user roles — shoppers who browse and order, and delivery agents who receive and fulfil those orders — each needed their own optimised UX. The budget allowed for one backend, not two. On top of that, Egyptian payment gateways (Paymob and Fawry) have non-standard API documentation and require custom integration work that most off-the-shelf solutions don't support.
The Solution
I built two separate Flutter apps that share a single Firebase backend. The customer app targets Web and Android with a standard storefront UX. The delivery-agent app is Android-only with a map-based order routing interface and real-time status updates. Both apps read from the same Firestore collections — when a customer places an order, the delivery agent's feed updates in real time. Payment gateway clients are isolated behind an adapter interface so adding a third gateway later requires zero changes to the checkout flow.
Key Engineering Decisions
Shared Firestore data model
Orders, products, and user profiles live in a single Firestore schema that both apps read. Write access is locked per role using Firestore Security Rules — delivery agents can update order status but cannot read payment details.
Payment gateway adapter pattern
Paymob and Fawry have very different API shapes. I wrapped both behind a PaymentGateway interface — checkout code calls one method and the adapter handles gateway-specific serialization. Swapping or adding gateways is a one-file change.
Role-based Firebase Auth claims
Custom auth claims mark a user as 'customer' or 'agent'. Both Firestore Security Rules and the app's routing layer check this claim — a customer who somehow loads the agent APK gets redirected immediately.
RTL-first layout
Both apps support Arabic RTL out of the box. Layout direction is set at the MaterialApp level; every widget inherits it without per-widget overrides.
Tech Stack
Outcomes & Results
Live Links
Ready to build?
Need something similar built?
I'm available for new projects. Discovery calls are free and I typically respond within 24 hours. You'll work directly with me — from the first call to launch.