Next.js (App Router) buyer site for fansonly. Server-rendered event pages with
real OG link previews + admission-ticket checkout via Stripe. It reads the
same api.fansonly.live APIs as the app — no database of its own.
/— homepage/e/[id]— event page + admission checkout (UUID id for now; pretty slugs later)/api/events/[id]/intent,/api/order— thin server-side proxies to the backend so the browser stays same-origin (no CORS to configure)
- ADMISSION ONLY. Drinks / credits / merch are app-only — the site filters to
category === 'admission'and never lists or sells the rest. - Payment flow: PaymentIntent from
/tickets/events/:id/orders/intent→ Stripe Payment Element → the webhook issues tickets + emails → the success screen polls/tickets/orderand shows the QR(s). Stripe gives Apple/Google Pay on web for free via the Payment Element.
API_BASE_URL(server) — defaulthttps://api.fansonly.liveNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY(browser-safe) — defaults to the test key; set the live key in Vercel for production.
Connect the repo in Vercel (framework auto-detected as Next.js). Push to main
= production deploy; branches get preview URLs. Requires Node ≥20 (Vercel
default; local dev needs nvm use 20). Custom domain: fansonly.live
(API stays on api.fansonly.live).