All projects

X-Passport

Event management with QR check-in, attendee tracking, and separate roles for organizers, checkers and sales.

2025 — 2026 · Solo build — schema, API, auth, and permissions.

NestJS 11TypeScriptPrisma 6PostgreSQL 16JWT

The problem

Event day is the hard part. Organizers publish and edit, staff at the door scan and check people in, and sales need attendee data afterwards — three very different jobs that usually get squeezed into one admin login.

What it does

A complete backend built end to end in about three months: event lifecycle, QR generation and check-in, granular multi-role accounts, notifications and file uploads.

Engineering decisions

Roles modelled as permissions, not as three logins

A checker at the door and a sales user need almost disjoint access to the same event. Modelling that as granular permissions rather than three fixed account types meant the awkward real cases — an organizer who also checks people in — didn't need a fourth role invented for them.

Check-in written to be safe to retry

Door scanning happens on venue wifi, which means duplicate requests and half-finished ones. Check-in is written so that scanning the same code twice is a no-op rather than a second entry, because staff retrying a scan is the normal case, not the exception.

Where it landed

  • Event lifecycle, QR check-in and attendee tracking shipped end to end
  • Three role types over one permission model
  • Built solo in roughly three months