Warider: Motorcycle Ride Marketplace
My own product: a marketplace in Morocco where travelers book same-city motorcycle rides and tours with verified local riders.

Overview
Warider connects travelers with verified local motorcycle riders in Moroccan cities. A traveler picks a city, a duration of 1 to 4 hours, interests, a start time and a meeting point; Warider sets a fixed price and dispatches the request to nearby riders. Riders also publish their own tours, and an operations console runs cities, approvals and settlements. I built it as a pnpm and Turborepo monorepo with a Next.js web app, a NestJS API on Supabase (Postgres + PostGIS) and an Expo mobile app.
The problem
Finding a trustworthy local rider for a short ride or a city tour means informal contacts, unclear prices and no check on the rider's license, insurance or motorcycle. A fair marketplace also needs to dispatch requests quickly without two riders accepting the same trip.
What I built
I built an instant request flow that sends each request to nearby verified riders in waves: the first rider to accept is held for the traveler for 5 minutes through an atomic database operation, then both sides confirm, chat and meet, and the rider is paid in cash. Riders go through onboarding and verification (identity, license, insurance, motorcycle, passenger helmet), build tours with ordered stops and a computed two-wheeler route, and settle the Warider fee. Cities are data: service areas are PostGIS polygons with their own price tables and dispatch settings. Map, routing, translation, storage and push notifications sit behind provider abstractions (Google Maps, Geoapify, Photon/OSRM fallbacks, Cloudflare R2 and Workers AI, FCM), and realtime updates go through a transactional outbox.
Results
- Over 70 automated test files (Vitest) plus pgTAP database tests for RLS, PostGIS service areas and the double-booking exclusion constraint
- CI runs typecheck, lint, unit, database and API integration tests on a local Supabase and builds the Docker images
- Web and API containers deployed to a VM behind Cloudflare (tunnel, Turnstile, R2 media)
- Interface in English, French and Arabic with right-to-left layout
- 14 architecture decision records documenting the main design choices
Highlights
- Wave-based dispatch with an atomic first-accept hold of 5 minutes
- Tour builder with ordered stops, two-wheeler routing, photos and weekly availability
- Rider verification, cash collection and platform fee settlement
- Operations console: rider approval, tour moderation, live requests, reports and an append-only audit log
- Provider abstractions with automatic fallbacks for places, routes and translation
- Shared domain rules and Zod contracts used by the API, web and mobile apps


