Building Ihuriro, a Rwanda-first negotiation marketplace
Notes on the architecture behind Ihuriro (formerly Murandasi), a negotiation-first marketplace built for the Rwandan market.
Why a negotiation-first marketplace
Most marketplace templates assume fixed pricing: a buyer sees a price, pays it, done. Ihuriro (previously called Murandasi) is built around a different assumption — that price is a starting point for a conversation, which is how a lot of commerce actually works in the Rwandan market.
[PLACEHOLDER — fill in the actual product reasoning here: who is this for, what markets/categories, why negotiation as the core mechanic rather than a bolt-on feature.]
The stack and why
The frontend is Next.js 16 with React 19, TypeScript 5.9, and pnpm for package management, tested with Vitest 3. The backend runs on Supabase/Postgres, with Cloudflare R2 handling media storage and a Hono API on Cloudflare Workers generating presigned upload URLs.
The color system leans into a near-black base (#1A1A1A) with a mustard-gold accent (#F4C430) against a white-to-warm-ivory scale — a deliberate move away from the generic blue-and-white SaaS palette most marketplace templates default to.
A real bug in the offer/accept flow
During a migration audit, an `accept_offer()` RPC function was missing entirely from the database layer — meaning accepted offers had no server-side path to actually finalize into an order. The fix added the missing RPC along with sync triggers between the `orders` and `bookings` tables, so accepting an offer reliably produces a consistent order record rather than a silent gap between what the UI showed and what the database actually stored.
That's the kind of bug that's invisible in a demo — the UI looks fine right up until a real transaction needs to actually commit.