
Case study PassNow
From the event page to the door, one ticket on the phone.
- Client
- PassNow
- Type
- Ticketing platform
- Role
- Product & full-stack development
- Year
- 2026
01Overview
A platform for selling and managing event tickets: a public catalogue and checkout for buyers, panels for organisers, promoters and admins, and a check-in scanner that keeps working offline. One codebase ships to the web, a PWA and an Android app.
02The problem
A ticket passes through many hands: the buyer who pays, the organiser who needs to see sales, the promoter who earns a share, the team at the door. Every one of them can be the weak point, and a ticket that can be copied or scanned twice is worth nothing.
02The approach
Put every rule on the server and treat the ticket as a secret. The frontend never touches the database; the API decides who can see, sell, pay out or let someone in, and a ticket can be used exactly once, even when the door has no signal.
03The build
What was actually built
- 01
A Next.js 16 frontend that talks only to a REST API, and a NestJS 11 backend with Prisma and PostgreSQL that is the only process holding the database URL: 25 modules over a 48-model schema, with short-lived JWTs and rotating, revocable refresh tokens in HTTP-only cookies.
- 02
A four-step checkout with PIX, credit and debit card through Canvi. Card number and CVV go straight to the provider; PassNow keeps only the brand and last four digits. Ticket tokens are stored as a peppered SHA-256 hash plus an AES-256-GCM copy for authorised display, and guest buyers open their tickets with an access key.
- 03
Check-in that cannot let a ticket in twice: the first scan is a conditional update inside a transaction, the operator must belong to the event's organisation, and every entry is audit-logged. Offline, scans queue in IndexedDB and sync later, with clashes marked as conflicts.
- 04
Organisation roles (owner, admin, financial, marketing, check-in, support), promoters and withdrawals, and an admin area. Google sign-in is limited to buyers. The same app ships as a PWA with an update notice and as a Capacitor Android APK.
Technology
- Next.js
- TypeScript
- React
- Tailwind CSS
- NestJS
- Prisma
- PostgreSQL
- Zod
- Capacitor
- Docker
04The experience





05Where it stands
Version 1.0.0 was released in June 2026, with a PWA and a signed Android APK. The screenshots come from a local build running on demo seed data.
