Problem
Traditional taxi and private transport services in Kuwait often lack the convenience, transparency, and digital experience that modern users expect.
Passenger pain points
- Slow, unpredictable booking — Calling or waiting for available taxis is unreliable.
- No real-time visibility — Passengers cannot see where their driver is or when they will arrive.
- Limited payment options — Cash-only or limited digital payment support reduces convenience.
- No flexible ride plans — Daily commuters have no easy way to book recurring or prepaid rides.
Business and driver challenges
- Poor driver management — Verifying drivers, tracking performance, and managing earnings manually is inefficient.
- No central control — Without a proper admin system, pricing, zones, promotions, users, and operations are hard to manage in one place.
- Local gaps — Generic international apps may not support Arabic/Urdu properly, Kuwait phone formats, or local payment methods like KNET.
Solution
Mshwar delivers a connected three-part solution tailored for Kuwait:
1. Customer Mobile App
Book rides on a map, choose vehicle type, schedule future trips, pay by cash/wallet/KNET/cards, track the driver live, chat during the ride, rate the experience, and use subscriptions or prepaid packages for better value.
2. Driver App (Mshwar Captain)
Register, upload documents, get approved, go online/offline, receive ride requests, navigate to pickup and drop-off, complete trips, view earnings, and request withdrawals.
3. Backend & Admin Panel
A central system powering both apps — managing users and rides, configuring pricing and zones, processing payments, sending notifications, and giving the business full operational control.
The platform uses a secure REST API to connect the apps with the backend, Firebase for real-time location and messaging, and automated background processes for scheduled rides and notifications.
My Role
Full-Stack Developer / Technical Lead (Freelance)
| Area | Responsibilities |
|---|---|
| Architecture | Designed end-to-end platform architecture across backend, customer app, and driver app |
| Backend API | Built and customized Laravel backend with 100+ endpoints for rides, payments, wallets, subscriptions, packages, and user management |
| Customer App | Developed and enhanced Flutter customer app for ride booking, live tracking, payments, and multi-language support |
| Driver App | Developed and enhanced Flutter driver app for ride fulfillment, online status, location sharing, earnings, and onboarding |
| Real-Time Services | Integrated Firebase for push notifications, live driver tracking, and in-app chat |
| Payments | Implemented uPayments/KNET and multiple international payment gateways for Kuwait and global use |
| Business Features | Built subscription and KM package features for recurring and prepaid ride models |
| Operations | Configured zone-based pricing, scheduled rides, automated background jobs, and role-based admin panel |
| Deployment | Handled server configuration, queue workers, and production readiness |
| Localization | Localized the platform for English, Arabic, and Urdu with RTL support |
Key Features
Customer App
| Feature | Description |
|---|---|
| Map-based booking | Pickup and destination selection with fare estimate before confirming |
| Instant & scheduled rides | Book now or schedule future trips |
| Live driver tracking | Real-time driver location on a live map |
| Multiple payment options | Cash, Wallet, KNET (uPayments), Cards, and more |
| In-app wallet | Top-ups and ride payments from wallet balance |
| Ride subscriptions | Recurring commute plans — one-way or two-way, selected working days |
| KM packages | Prepaid distance bundles at discounted rates |
| Coupons & discounts | Promotional codes at checkout |
| In-app chat | Message the driver during the ride |
| Ride history & ratings | Past trips, receipts, ratings, and complaints |
| SOS & safety | Safety-related support flows |
| Authentication | Mobile OTP, email/password, Google, and Apple sign-in |
| Multi-language | English, Arabic, and Urdu with RTL layout |
| Dark mode | Theme toggle and profile management |
Driver App (Mshwar Captain)
| Feature | Description |
|---|---|
| Registration & onboarding | Document and vehicle upload with admin approval workflow |
| Online/offline toggle | Control availability for receiving ride requests |
| Trip management | Accept, reject, start, and complete rides |
| Live location sharing | Background tracking while online |
| External navigation | Google Maps, Apple Maps, and Waze integration |
| Earnings dashboard | Trip history, wallet balance, commission details |
| Withdrawals | Request payouts to registered bank account |
| Push notifications | Instant alerts for new ride requests |
| In-app chat | Communicate with passengers |
| Multi-language | English, Arabic, and Urdu support |
Admin Panel & Backend
| Feature | Description |
|---|---|
| Central dashboard | Business overview and key metrics |
| User management | Approve, suspend, and edit customer and driver profiles |
| Ride management | Active, completed, cancelled, scheduled, and subscription rides |
| Zone-based pricing | Geographic areas with configurable fares |
| Vehicle management | Types, brands, and models |
| Subscriptions & packages | Plan configuration for recurring and prepaid models |
| Wallet & payouts | Transactions, payouts, and commission settings |
| Payment gateways | Configure uPayments/KNET, Stripe, Razorpay, PayPal, Paytm, and more |
| Promotions | Coupons and promotional campaigns |
| Broadcasts | Push notification and email broadcasts to users or drivers |
| Support | Complaints, SOS reports, and contact requests |
| Dispatcher accounts | Operational staff with limited access |
| Role-based access | Admin roles with two-factor authentication (2FA) |
| App settings | Tax, currency (KWD), commission, and platform configuration |
| Automation | Scheduled ride processing and background notifications |
| Reporting | Data export and operational reports |
Technologies & Capabilities
| Layer | Technologies |
|---|---|
| Customer App | Flutter, Dart, GetX, Provider, Firebase |
| Driver App | Flutter, Dart, GetX, Provider, Firebase |
| Backend API | Laravel 11, PHP 8.1+ |
| Admin Panel | Laravel Blade, Bootstrap, jQuery |
| Database | MySQL with spatial zones |
| Real-Time | Firebase Cloud Messaging, Firestore, Realtime Database |
| Maps & Location | Google Maps, Geolocator, Geocoding |
| Payments | uPayments (KNET), Stripe, Razorpay, PayPal, Paytm, Wallet, Cash |
| Background Jobs | Laravel Queue, Supervisor, Scheduled Tasks |
| Authentication | API Key + Access Token (mobile), Session + 2FA (admin) |
| Localization | English, Arabic, Urdu (RTL) |
Architecture / Workflow
System Architecture
On-Demand Ride Flow (Sequence)
Subscription & Package Flow
Payment Processing Flow
Driver Onboarding Flow
Data Model (Core Areas)
| Area | Purpose |
|---|---|
| Users | Customer accounts with profile, wallet, and ride history |
| Drivers | Driver profiles, documents, vehicle info, approval status |
| Rides | On-demand trips with status, fare, payment, and ratings |
| Scheduled Rides | Future bookings and subscription-generated trips |
| Subscriptions | Recurring commute plans with working days and date range |
| KM Packages | Prepaid distance bundles with usage tracking |
| Zones | Geographic areas with spatial pricing rules |
| Wallets | Customer and driver balances, top-ups, and transactions |
| Payouts | Driver withdrawal requests to registered bank accounts |
| Coupons | Promotional codes and discount campaigns |
| Complaints & SOS | Safety reports and support tickets |
| Admins | Role-based operators with 2FA |
| App Settings | Tax, currency (KWD), commission, and platform config |
Production Deployment Layout
| Service | Technology | Delivery |
|---|---|---|
| REST API | Laravel 11 on cloud server | Central API for both mobile apps |
| Admin Panel | Laravel Blade + Bootstrap | Web dashboard at mshwar-app.com |
| Background Jobs | Laravel Queue + Supervisor | Scheduled rides, notifications, payouts |
| Real-Time Layer | Firebase (FCM, Firestore, RTDB) | Push, chat, live driver tracking |
| Mobile Apps | Flutter (customer + driver) | Google Play & App Store |
Challenges
1. Building a complete ecosystem
Challenge: Coordinating three applications (customer, driver, admin) with one backend required careful API design and consistent data flow across all platforms.
Solution: Centralized Laravel API with 100+ endpoints, shared authentication, and clear status flows across all three apps.
2. Real-time reliability
Challenge: Ensuring live driver tracking, instant notifications, and smooth ride status updates with low latency.
Solution: Combined REST APIs with Firebase (FCM, Firestore, Realtime Database) for push notifications, chat, and live location sync.
3. Local payment integration
Challenge: Integrating uPayments/KNET for Kuwait while also supporting international gateways — multiple payment flows, callbacks, and wallet reconciliation.
Solution: Configurable payment gateway system from admin with unified wallet logic and success/failure callback handling.
4. Subscription and package logic
Challenge: Designing flexible subscription plans (recurring trips, working days, zone pricing) and KM packages with usage tracking beyond standard ride-hailing.
Solution: Dedicated backend modules for subscription scheduling, automated ride generation, and prepaid distance bundle tracking.
5. Multi-language and RTL support
Challenge: Supporting English, Arabic, and Urdu with proper right-to-left layouts across all screens in both mobile apps.
Solution: Consistent localization framework across customer and driver apps with RTL-aware UI components.
6. Driver location in background
Challenge: Keeping driver location accurate while the app runs in the background without excessive battery drain.
Solution: Careful permission handling and dual sync strategy (Firebase + API) with optimized background tracking intervals.
7. Admin operations at scale
Challenge: Role-based access, automated scheduled rides, broadcast messaging, and payout management at operational scale.
Solution: Robust backend jobs, Laravel Queue with Supervisor, and structured role-based admin access with 2FA.
8. Legacy codebase modernization
Challenge: The platform evolved from a Cabme-based foundation — customizing for Mshwar's brand, Kuwait market, and new features while keeping the system stable.
Solution: Incremental refactoring with feature modules for subscriptions, packages, and local payment integration without disrupting production.
Final Result
Live Production Platform
Delivered Outcomes
- Production-ready, full-featured ride-hailing platform tailored for the Kuwait market.
- Polished passenger experience for booking, tracking, and paying for rides with KNET and international payment support.
- Reliable driver partner app for earning and managing daily operations with background location sharing.
- Comprehensive admin control panel for running the business end to end — users, rides, zones, pricing, payments, and reports.
- Flexible ride models beyond one-time trips — subscriptions and prepaid KM packages for commuters and regular travelers.
- Multi-language support (English, Arabic, Urdu) with RTL layouts for a diverse user base in Kuwait.
- Live production deployment at mshwar-app.com with apps on Google Play.
