AI-powered resale ticket analytics for FIFA World Cup 2026. Track prices from Vivid Seats, get buy/wait recommendations, set price alerts, and manage a match watchlist.
All routes except the landing page require authentication.
- Framework — Next.js 14 (App Router), TypeScript
- Styling — Tailwind CSS, shadcn/ui
- Database — PostgreSQL + Prisma
- Auth — JWT (jose) + bcryptjs
- Charts — Recharts
- AI — Rule-based statistical prediction engine (no LLM)
npm install
cp .env.example .env # fill in DATABASE_URL and JWT_SECRET
npm run db:push
npm run db:seed
npm run devDemo login: demo@worldcuptickets.ai / demo1234
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
JWT_SECRET |
Yes | JWT signing secret (32+ chars) |
NEXT_PUBLIC_APP_URL |
No | Public URL for links |
JOB_SECRET |
No | Bearer token for /api/jobs/* endpoints |
STUBHUB_API_KEY |
No | StubHub API key for live data |
STUBHUB_API_BASE |
No | StubHub API base URL |
| Script | Purpose | Schedule |
|---|---|---|
npm run job:sync |
Scrape TicketData.com via Playwright | Every 30 min |
npm run job:ingest |
Fetch live prices from Vivid Seats + StubHub | Every 60 min |
npm run job:predict |
Refresh AI predictions | Every 6 hours |
npm run job:alerts |
Evaluate alert rules | Every 15 min |
- Price tracking — live Vivid Seats prices with 7/30/60/90-day history charts
- AI recommendations — BUY NOW / WAIT / MONITOR with confidence score and explanation
- Trend indicators — RISING / FALLING / STABLE / VOLATILE via linear regression
- Seat categories — Category 1/2/3, Club, VIP/Hospitality breakdown
- Watchlist — save matches, tracked per user
- Price alerts — 4 types: price target, percent drop, AI buy signal, buy zone entry