A multi-tenant storefront platform built for African merchants. Sellers create branded online stores in minutes, list products, and accept payments via M-Pesa (Safaricom Daraja STK Push) and Paystack β using their own API keys, so payouts go directly to them. Built with TanStack Start, React 19, Tailwind v4, shadcn/ui, and Supabase
# Marqet
A multi-tenant storefront platform built for African merchants. Sellers create branded online stores in minutes, list products, and accept payments via **M-Pesa** (Safaricom Daraja STK Push) and **Paystack** β using their **own** API keys, so payouts go directly to them(N0 Payment Custodies/Walllets)
> Built with TanStack Start, React 19, Tailwind v4, shadcn/ui, and Supabase.
---
## β¨ Features
### For buyers
- ποΈ Browse public storefronts at `/store/ `
- π Persistent client-side cart (per store)
- π³ Checkout with multiple payment methods (M-Pesa, Paystack card/mobile-money, Pay on delivery)
- β
Order confirmation page with status
### For merchants
- πͺ Create and manage multiple stores from a single dashboard
- π¦ Add products with name, description, price, stock, and image
- π° Configure **per-merchant** payment credentials (your keys, your money)
- π View orders and update fulfillment status
- π Multi-currency support (KES, NGN, GHS, ZAR, USD, etc.)
### Platform
- π Email/password authentication
- π‘οΈ Row-Level Security on every table
- β‘ Server-side rendering via TanStack Start
- π¨ Emerald Prestige design system (deep emerald + gold)
---
## π§± Tech Stack
| Layer | Tech |
|---|---|
| Framework | TanStack Start v1 (React 19, SSR) |
| Build | Vite 7 |
| Styling | Tailwind CSS v4 + shadcn/ui |
| Routing | TanStack Router (file-based) |
| Data | TanStack Query |
| Backend | Supabase (Postgres, Auth, RLS) via Lovable Cloud |
| Server logic | TanStack `createServerFn` + file-based API routes |
| Deployment | Cloudflare Workers (edge) |
---
## π Getting Started
### Prerequisites
- Bun (recommended) or Node 20+
### Install & run
```bash
bun install
bun run dev
```
Open
localhost.
### Environment variables
VITE_SUPABASE_URL=...
VITE_SUPABASE_PUBLISHABLE_KEY=...
VITE_SUPABASE_PROJECT_ID=...
SUPABASE_SERVICE_ROLE_KEY=... # server-only
```
> Never commit secrets. The service-role key is used only inside server functions / API routes.
--- β¦