BACK
5 min read

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.