Overview
Soukly connects customers, vendors and drivers. Customers order from local restaurants, coffee shops and stores through the mobile app; vendors receive and accept orders in real time on a web dashboard; drivers are dispatched automatically; and a super admin runs the whole marketplace. A co-owned product, with an Android and iOS app built in Flutter and a backend built in Laravel.
The problem
A delivery marketplace has to coordinate three parties in real time (the customer ordering, the vendor preparing and the driver delivering) with pricing and payments the platform can trust.
What I built
- A Flutter app for customers on Android and iOS
- A Laravel API with Sanctum tokens, and real-time vendor alerts over WebSockets (Laravel Reverb)
- Queue-driven driver dispatch with offers, timeouts and automatic retries
- A unified payment layer: cash on delivery is live, with Whish Pay and MontyPay integrations under way
Key features
- 01Phone number sign-in with Firebase one-time codes, exchanged for a secure API token
- 02Personalised home feed: top rated, new, under 30 minutes, free delivery and reorder
- 03Vendor pages with menus, item options and ingredients, and stock-aware ordering
- 04Single-vendor cart and checkout with saved addresses and distance-based delivery fees calculated on the server
- 05Live order tracking in six steps, with push notifications at every stage
- 06Vendor dashboard with real-time order alerts, menu and stock management, a weekly schedule and Excel reports
- 07Driver dashboard with delivery offers, status updates with a pickup photo, availability and earnings
- 08Super admin panel for vendors, drivers, customers, categories, commissions, delivery bands, dispatch settings and accounting exports
Architecture
- Flutter app
- Laravel API
- Queue + Reverb
- MySQL
Screens
Decisions & challenges
The server owns the money
Totals, delivery fees and payment status are always calculated and confirmed on the server; payment webhooks are re-verified with the gateway before an order is marked paid.
Orders reach the vendor only when ready
Cash orders are released immediately, while online orders stay hidden from the vendor until payment is confirmed and are cancelled automatically if unpaid after 30 minutes.
Fair, duplicate-free dispatch
Driver offers are queued with first-in, first-out and round-robin fairness, one active offer per order, and automatic retries every 2 minutes if nobody accepts.