Chlef Delivery
A four-role delivery marketplace for the wilaya of Chlef: customers, shops, drivers and an admin.



Overview
Chlef Delivery connects local shops with customers and delivery drivers across the communes of Chlef. Customers browse shops by category and distance, build a cart and track their order; shop owners manage their menu and accept orders; drivers claim ready orders and move them through pickup and delivery; an administrator verifies shops and drivers. It is written natively in Kotlin with Jetpack Compose and works in French, English and Arabic.
Objectives
- Bring small local shops online without a website of their own
- Give each role its own focused workflow
- Keep working offline once an account has signed in
Features
- Customer, shop, driver and admin roles, each with its own navigation
- Shops by category, distance and opening hours, favourites and search
- Cart with notes, checkout with saved addresses, cash on delivery
- Order life cycle: confirmed → preparing → ready → driver assigned → picked up → delivered
- Order timeline, distance and delivery fee, in-app notifications
- Map view (OpenStreetMap) and navigation hand-off
- Arabic right-to-left, French and English; light and dark themes
- Optional account sync across phones (Supabase)
Screens
Highlights
Design
- Translucent "water glass" surfaces over a soft photographic background
- Role-specific bottom bars with badges for cart and notifications
- Full mirroring in Arabic, including icons and chips
Engineering
- Single-activity Compose app with a repository over Room, enforcing allowed order transitions per role
- Passwords stored as salted hashes
- Screens on this page are rendered from the real Compose code by a Robolectric + Roborazzi test with invented demo data
Studio audit
Broad, well-structured app with real security and theming problems. Fixed what could be fixed in the app; one back-end issue remains.
Found
- Administrator e-mail and password were hard-coded in the source
- The Supabase key check compared the URL against the key itself
- With the in-app dark theme chosen, the glass background stayed light and text turned unreadable
- Synced accounts store password hashes in a table readable with the public key
Fixed
- The first admin now comes from local.properties and is never in the code
- Corrected the configuration check
- Dark mode follows the app theme; screen content colour set explicitly
- Added a screenshot test that renders 12 screens for every role
Still to do
- Account sync should move to Supabase Auth with row-level security before public release
Scored out of 10 on functionality, interface, visual consistency, performance, responsiveness, navigation, architecture, accessibility, error handling and professional readiness.
Demonstration
A native Android app cannot run in a browser. These screens were rendered from the app's real Compose code (Robolectric + Roborazzi) with invented shops, products and orders; the APK was built and verified separately.
Want something like this?
Tell us what you are building. We will reply with honest questions, a clear approach and the next step.