Multi-vendor marketplace for Senegalese fashion, straight from the workshops, on web, iOS and Android.
- Client
- Denkmako
- Key result
- 60+ creator shops, live on both stores
- Live
- denkmako.com ↗
Context
Senegalese designers sold through Instagram and WhatsApp, one conversation at a time: no catalogue, no trusted payment, and made-to-measure orders tracked by hand. The marketplace had to serve buyers and dozens of independent workshops at once, each with its own stock, lead times and payment habits, on mid-range phones and mobile data.
What I built
I built the whole platform: one Flutter app for both buyers and sellers (Riverpod, go_router), a modular NestJS API of about sixty controllers in an Nx workspace, an Angular back office for moderation and orders, and the landing site. A cart spanning several shops is split into one sub-order per vendor, each driven by a server-side state machine. Payments go through a provider registry (Orange Money, Wave, PayDunya, Paxity), images are normalised to WebP on upload, and the app speaks French, English and Wolof.
Result
Live on the App Store and Google Play, with more than 60 creator shops and 800 pieces online.
Architecture
One sub-order per vendor
A single checkout spans several workshops, and each sub-order moves at its own pace: made-to-measure takes weeks, ready-to-wear ships the same day.
An order state machine on the server
Allowed transitions are declared per role and enforced by the API, and only an administrator can roll a status back.
A registry of payment providers
Orange Money, Wave, PayDunya and Paxity sit behind one interface with server-side callbacks, while the app handles QR codes, deep links and polling until payment is confirmed.
Images normalised at upload
Every photo is converted to WebP and capped at 2,000 pixels, which keeps the catalogue light on mobile data.
One Flutter app, two experiences
Buyers and sellers share authentication, networking and the design system, and a single HTTP client handles tokens, offline errors and expired sessions.
Built for local users
French, English and Wolof, with push notifications through Firebase and background jobs for WhatsApp and SMS messages.
Stack
- Flutter
- Riverpod
- NestJS 11
- Angular 20
- Nx
- PostgreSQL
- Redis
- BullMQ
- AWS S3
- Firebase Cloud Messaging





