EventPass is a multi-tenant digital ticketing and event management platform for the Ugandan and East African market. It replaces fragmented tools (WhatsApp, paper tickets, Excel, mobile money screenshots) with a single system that lets organizers create events, sell tickets, take payments, and verify attendees at the gate.
# EventPass — MVP (Phase 1 + Phase 2)
Digital ticketing for events in Uganda. Create event → sell ticket → QR → scan → attendance. Phase 2 adds organizer self-serve tools: staff scoping, sales/attendance reports, closing ticket sales, ToS acceptance, and payout account linking.
Built against the master plan (`EVENTPASS_CLAUDE_PLAN.txt` / `CLAUDE.md`) and the Phase 2 docs in `docs/`. Stack: Next.js 14 (App Router) · TypeScript · Tailwind · Prisma · PostgreSQL · Auth.js · Flutterwave (or built-in mock payments) · pdf-lib · html5-qrcode.
---
## 1. Setup (10–15 minutes)
**Requirements:** Node 18+, a free Neon PostgreSQL database (or any Postgres).
```bash
npm install
cp .env.example .env
```
Edit `.env`:
1. `DATABASE_URL` — from Neon: create a project → copy the connection string.
2. `AUTH_SECRET` — run `openssl rand -base64 32` (or type any long random string).
3. Leave `PAYMENT_PROVIDER=mock` for now — you can test the entire flow with no Flutterwave account.
Then:
```bash
npm run db:push # create tables
npm run db:seed # create the admin + test accounts
npm run dev #
localhost
```
### Optional: run Postgres locally instead of Neon (works offline)
By default `DATABASE_URL` points at Neon (cloud), so local dev needs internet even though the app itself runs on `localhost`. To remove that dependency, run Postgres in Docker and keep Neon only for staging/production:
```bash
docker compose up -d # starts a postgres:16-alpine container (see docker-compose.yml)
```
Create `.env.local` (already in `.gitignore`, and Next.js loads it automatically, overriding `.env`):
```
DATABASE_URL="postgresql://eventpass:eventpass@localhost:5432/eventpass?schema=public"
```
Then push the schema and seed the local DB. The Prisma CLI only reads `.env` (not `.env.local`), so pass the URL inline for these two commands:
```bash
DATABASE_URL="postgresql://eventpass:eventpass@localhost:5432/eventpass?schema=public" npx prisma db push
DATABASE_URL="p …