Kadû Partners — React + Vite + TS frontend for the Liberia materials marketplace
# kadu-partners
Kadû Partners Web Portal — the React + Vite + TypeScript frontend for shop owners and managers.
> **Status:** UI-first scaffold. The login flow is functional end-to-end against MSW; every other route renders a `PlaceholderPage`. The Figma-driven build plan, with phases, screen inventories, and tickets, lives in docs/backlog/build/.
---
## Stack
| Tool | Version | Notes |
|---|---|---|
| React | 19 | |
| Vite | 7 | Dev server on port **3002** |
| TypeScript | 5 | Strict mode |
| Tailwind CSS | v4 | `@tailwindcss/vite` plugin, tokens in `src/index.css` |
| React Router | v7 | Nested layouts, `BrowserRouter` |
| TanStack Query | v5 | `staleTime` 30s, `retry` 2 |
| Zustand | v5 | Auth + active-location stores |
| MSW | v2 | All `/api/v1/*` requests mocked in dev |
| Axios | v1 | Bearer injection + envelope unwrap |
| Vitest + RTL | v4 | Unit tests (specs land in PR-0D) |
| Playwright + axe-core | v1 | E2E + accessibility |
---
## Getting started
```bash
# 1. Install dependencies (peer-dep tree requires --legacy-peer-deps today)
npm install --legacy-peer-deps
# 2. Configure local env (optional — defaults work for dev)
cp .env.example .env.local
# 3. Start dev server
npm run dev
# →
localhost
```
The MSW service worker (`public/mockServiceWorker.js`) is already committed, so no `msw init` step is needed on a fresh clone. If you ever upgrade the `msw` package and the worker shape drifts, regenerate with `npx msw init public/ --save`.
**No backend needed.** All `/api/v1/*` calls in dev are intercepted by MSW with mock data from src/mocks/data/.
### Test login
Navigate to `
localhost` — you land on the login page.
| Field | Value |
|---|---|
| Phone | `+231770001234` (Emmanuel Kollie — Monrovia Hardware & Supply) |
| Email | `info@monroviahardware.lr` (same partner) |
| Password | Any 8+ characters, e.g. `TestPass123` |
The current MSW handler does **not** verify the credential value — any 8+ char password logs you in as …