Logo Lanfrica

jtalface/moz-tickets

Domaine:

digital infrastructure

Type de record:

software
Créateur:
jta
Hôte:
Live-event marketplace, digital ticket wallet, and venue-entry system for Mozambique (pt-MZ/en). Expo mobile app, Next.js web, Fastify + Postgres API, and a staff gate scanner. # Moz Tickets Live-event marketplace, digital ticket wallet, and venue-entry system for Mozambique. Portuguese-first (`pt-MZ`) with English support; prices in MZN. See PLAN.md for the phased roadmap and DESIGN.md for the app design direction. ## Repo layout - `apps/api` - Fastify + Drizzle + Postgres backend (catalog, auth, orders, tickets, gate entry). - `apps/mobile` - Expo (React Native) fan app: Discover, For You, My Tickets, Account. - `apps/web` - Next.js web app (SSR event pages). - `apps/scanner` - staff gate-scanning app (placeholder, MVP milestone). - `packages/shared` - domain types, ticket state machine, i18n dictionaries, money formatting. ## Getting started ```bash pnpm install pnpm db:up # Postgres 16 in Docker on port 5433 pnpm db:migrate # push schema pnpm db:seed # 10 mock Maputo/Matola events pnpm dev:api # API on :4000 pnpm dev:web # web on :3000 pnpm dev:mobile # Expo dev server (press i for iOS simulator, a for Android) ``` The mobile app auto-discovers the API through the Metro host, so it works on simulators and physical devices on the same network. ## Dev notes - Auth is phone OTP; in dev the code is returned by `POST /auth/otp/request` and logged to the API console (mock SMS). Rate limits: 5 code requests per phone per hour, 5 wrong guesses kill a code. ### Demo accounts (after `pnpm db:seed`) Sign in with the phone number and code `000000` - no OTP request needed. The bypass is dev-only (disabled in production), works only for these three numbers, and never creates accounts. | Role | Phone | Code | Where to use it | |---|---|---|---| | Fan (has 2 tickets) | `+258842222222` | `000000` | Mobile app or web - My Tickets comes pre-loaded | | Organizer | `+258840000000` | `000000` | Mobile: Account → "Portal do organizador" · Web: `/organizer` | | Gate staff | `+258841111111` | `000000` | Mobile: Account → "Modo porteiro" · Web: `/gate` · Scanner app | Role features have full parity across surfaces: organiz …