Confetti falling through blue stage light over a concert crowd: the banner of an event page on PassNow.

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

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.

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.

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.

What was actually built

  1. 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.

  2. 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.

  3. 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.

  4. 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

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.

Next projectPC Control CenterPersonal project · Desktop app & remote agent