A bilingual (English / Kinyarwanda) online store for kitchen utensils, based in Kigali (City Plaza). Prices in RWF, mobile-first, with MTN MoMo and Airtel Money checkout, WhatsApp ordering, Google Maps, and social links.
# Classy Kitchen Utensils — E-commerce Platform
A bilingual (English / Kinyarwanda) online store for kitchen utensils, based in Kigali (City Plaza). Prices in **RWF**, mobile-first, with **MTN MoMo** and **Airtel Money** checkout, WhatsApp ordering, Google Maps, and social links.
> **Stack:** Node.js + Express + TypeScript · Prisma + PostgreSQL · React + Vite + TypeScript + Tailwind CSS
---
## 1. Architecture
```
┌──────────────────────────────────────────────┐
Mobile / Desktop │ FRONTEND (SPA) │
browser ─────► │ React + Vite + TypeScript + Tailwind │
│ • i18n (EN / RW) • RWF formatting │
│ • TanStack Query • react-router │
│ Hosted on Vercel │
└───────────────┬──────────────────────────────┘
│ HTTPS / JSON (?lang=en|rw)
▼
┌──────────────────────────────────────────────┐
│ BACKEND (API) │
│ Express + TypeScript (layered) │
│ routes → controllers → services → Prisma │
│ helmet · CORS allowlist · rate-limit · Zod │
│ Hosted on Render / Railway / Fly.io │
└───────┬───────────────────────┬──────────────┘
│ │
Prisma ORM │ │ Payment adapters
▼ ▼
┌───────────────────────┐ ┌─────────────────────────────┐
│ PostgreSQL │ │ MTN MoMo API · Airtel Money │
│ (Supabase / Neon) │ │ (server-to-server, webhooks)│
└───────────────────────┘ └─────────────────────────────┘
Product images → object storage / CDN (Cloudinary or S3-compatible)
Google Maps embed → store location (City Plaza, Kigali)
```
**Why this shape**
- **Separate frontend and backend.** The React app is just static files on a CDN (fast, cheap, scalable); the API is a stateless service that can scale independently. This is the standard, professional split and reads well on a CV.
- **Layered backend** (routes → controllers → services → data) keeps HTTP concerns, busin …