Cross-border order & delivery orchestration platform — buy from Jumia (and other supported stores, via a pluggable adapter registry) on behalf of customers in african landlocked countries who can't order there directly, and hand parcels off to a logistics partner for the last mile.
# Kaya
Cross-border order & delivery orchestration platform — buy from Jumia (and other supported stores, via a pluggable adapter registry) on behalf of customers in african landlocked countries who can't order there directly, and hand parcels off to a logistics partner for the last mile.
## Stack
- **API**: TypeScript + Express, Prisma/PostgreSQL, BullMQ/Redis, Swagger
- **Web**: Next.js (App Router), Tailwind CSS
- **Auth**: JWT, httpOnly session cookie, seeded `SUPER_ADMIN` and `LOGISTICS_PARTNER` accounts (no customer logins)
## Project layout
```
apps/
api/ Express API, Prisma schema/migrations/seed, BullMQ workers
web/ Next.js dashboard (Super Admin + Logistics Partner views)
docker-compose.yml Postgres + Redis for local dev
```
## Local setup
1. **Start Postgres & Redis**
```bash
docker compose up -d
```
2. **Configure environment**
Copy `.env.example` to `apps/api/.env` (values are already sane defaults for local dev) and `NEXT_PUBLIC_API_URL=
localhost` to `apps/web/.env.local`.
3. **Install dependencies**
```bash
npm install
```
4. **Run database migrations and seed**
```bash
npm run migrate --workspace apps/api # prisma migrate dev
npm run seed --workspace apps/api # Super Admin + Logistics Partner + Jumia provider
```
Seeded accounts (from `apps/api/.env`):
- Super Admin — `SEED_SUPERADMIN_EMAIL` / `SEED_SUPERADMIN_PASSWORD`
- Logistics Partner — `SEED_PARTNER_EMAIL` / `SEED_PARTNER_PASSWORD`
Set `SEED_DEMO=true` to also seed a handful of demo orders across different statuses.
5. **Run everything**
```bash
npm run dev:api # Express API on :4000, Swagger at /docs
npm run dev:worker # BullMQ email + notification workers
npm run dev:web # Next.js dashboard on :3000
```
## Notable design points
- **Providers are pluggable** (`apps/api/src/modules/providers`): a `ProviderRegistry` resolves a pasted product URL to a store-specific `ProviderAdapter` (Jumia and Temu adapters ship in the code) or falls b …