Kemotives Marketplace: Building Kenya's Premier Vehicle Platform
Background
After launching the kemotives admin dashboard, the logical next step was to build the customer-facing marketplace. Kemotives is Kenya's premier vehicle marketplace — connecting buyers and sellers with an experience tailored specifically for the Kenyan market.
What Is Kemotives Marketplace?
The marketplace is a Next.js full-stack application where dealers and private sellers can list vehicles, and buyers can search, filter, and contact sellers directly. It integrates with the admin dashboard via a shared API layer.
Tech Stack
- React 18 + Vite 5 — App Router, Server Components, API Routes
- Supabase — Database, auth, real-time updates
- Tailwind CSS — Utility-first styling
- Cloudinary — Image optimization and CDN delivery
- M-Pesa Daraja API — Payment processing
Core Features
- Advanced Search — Filter by make, model, year, price range, mileage, condition, and location
- Verified Listings — Badge system for verified dealers
- Image Galleries — Multi-image listings with zoom and swipe on mobile
- Direct Contact — WhatsApp integration (the preferred contact method in Kenya)
- Saved Cars — Wishlist functionality with local storage fallback
Architecture Decisions
I chose Server Components for listing pages to get fast initial loads and good SEO — critical for a marketplace where Google traffic matters. Only the search filters and saved cars feature are client components.
app/
├── marketplace/
│ ├── page.jsx # Server: fetches listings
│ ├── [slug]/page.jsx # Server: vehicle detail page
│ └── search/ # Client: interactive filters
├── api/
│ ├── listings/ # CRUD endpoints
│ └── enquiries/ # Contact form handler
Kenya-Specific Considerations
- WhatsApp over email — Nearly every buyer contacts sellers via WhatsApp, so the CTA is a direct WhatsApp link
- Price in KES — With comma-separated thousands formatting familiar to Kenyans
- Mobile-first — Over 80% of traffic comes from mobile devices
Challenges
Handling image uploads for vehicle listings was complex. Dealers upload 10–20 photos per listing. I implemented client-side compression before Cloudinary upload to keep bandwidth usage low for users on mobile data.