Jazy's House — African handmade fashion, superfoods & authentic African catering. PWA (mobile-first, one codebase → website + installable app).
# Jazy's House Platform
**Jazy's House** is a multi-tenant African handmade e-commerce platform. A single
deployment serves many independent storefronts, each resolved per-request from its
host. Every store gets its own catalog, categories, and per-tenant theming (colors,
font, logo), a customer-facing storefront with Stripe checkout, and an admin
dashboard for owners and platform super-admins. The app is an installable PWA with
an offline fallback. Built with Next.js 15 (App Router, React 19), Prisma +
PostgreSQL (Supabase), Auth.js v5, and Tailwind v4.
## Tech stack
- **Next.js 15** — App Router, React Server Components by default, route groups for
storefront vs. admin separation.
- **React 19** — UI runtime.
- **TypeScript 5.7** — strict typing across the codebase.
- **Prisma 6** + **PostgreSQL (Supabase)** — type-safe data access; pooled
connection at runtime, direct connection for migrations.
- **Auth.js v5 (NextAuth, beta)** — admin/owner authentication; host auto-detected
on Vercel.
- **Stripe 17** — checkout sessions created server-side; the secret key never
reaches the client.
- **Tailwind v4** + **shadcn/ui** (Radix primitives) — styling and component
library; tenant theming via CSS variables.
- **PWA** — `manifest` + service worker for installability and an offline fallback.
- **Vercel** — hosting (region `iad1`, configured in `vercel.json`).
## Quick start
```bash
git clone jazyshouse-platform
cd jazyshouse-platform
npm install
cp .env.example .env
```
Fill in `.env`:
- `DATABASE_URL` — Supabase **pooled** connection (port `6543`, with
`?pgbouncer=true&connection_limit=1`).
- `DIRECT_URL` — Supabase **direct** connection (port `5432`, used for migrations).
- `AUTH_SECRET` — generate one:
```bash
openssl rand -base64 32
```
- `STRIPE_SECRET_KEY` (`sk_...`), `STRIPE_WEBHOOK_SECRET` (`whsec_...`),
`NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY` (`pk_...`).
- `SEED_ADMIN_PASSWORD` — password for the seeded admin accounts
(default `admin1234`, dev-only).
Then …