Africa's Marketplace. Your Way. — Multi-portal B2B/B2C marketplace with supplier selection engine, escrow payments, and RFQ workflow. Built for Botswana, architected for the continent.
# AfriDeal
Africa's Marketplace. Your Way.
An escrow-backed marketplace connecting verified suppliers in Botswana and South Africa with buyers who need the goods to actually arrive. Four portals over one data store: an operations console, a supplier workspace, a runner app, and a customer storefront.
This is a working MVP, not a clickable prototype. Every screen reads real data, and the actions that change something write it back to disk.
## Setup
```bash
cd afrideal
npm install
npm run dev
```
Open
localhost.
Node 18.17 or later. No database, no external services, no API keys. The whole platform runs off JSON files in `data/`.
| Command | What it does |
|---|---|
| `npm run dev` | Development server on port 3000 |
| `npm run build` | Production build |
| `npm run typecheck` | `tsc --noEmit` |
| `npm run seed` | Regenerate every file in `data/` and re-run the integrity checks |
| `npm run verify` | End-to-end checks against a running dev server |
| `npm run audit` | Loads all 37 routes as the right role and checks each renders |
| `npm run images` | Refetch product photography (needs `PEXELS_API_KEY`) |
`npm run seed` resets a demo that has been clicked through. Run it whenever you want a clean starting state.
## Logins
Eight seeded accounts. The login page has a one-click card for each of them, so nobody has to type these during a demo.
| Email | Password | Role | Lands on |
|---|---|---|---|
| admin@afrideal.co.bw | `Admin@2026` | Super Admin | `/admin/dashboard` |
| ops@afrideal.co.bw | `Ops@2026` | Operations | `/admin/dashboard` |
| finance@afrideal.co.bw | `Finance@2026` | Finance | `/admin/analytics` |
| supplier@naledi.co.bw | `Supplier@2026` | Supplier (Naledi Beauty) | `/supplier/dashboard` |
| supplier@glowup.co.za | `Supplier@2026` | Supplier (GlowUp) | `/supplier/dashboard` |
| runner@afrideal.co.bw | `Runner@2026` | Runner | `/runner/dashboard` |
| thabo@gmail.com | `Customer@2026` | Customer | `/` |
| kefilwe@gmail.com | `Custo …