Skip to content

Check-in Scanner

Check attendees in at the door via QR code scan or manual lookup. The scanner runs full-screen at /app/events/:id/checkin — ideal for a tablet or phone held at the entrance.

Check-in scanner — manual mode


Opening the Scanner

From an event's detail page at /app/events/:id, click the Check-in Scanner button in the Actions row. The scanner opens full-screen (no sidebar or header) so it's usable on small mobile screens.

The scanner shows three live counters at the top:

  • Checked In — tickets already scanned in
  • Remaining — tickets issued but not yet checked in
  • Total — all tickets issued for this event

Scan Modes

Switch between modes using the toggle at the top:

Camera (QR)

Uses the device's camera to scan ticket QR codes. Each ticket email includes a QR that encodes the ticket code. On first use, the browser will request camera permission — grant it and the live preview appears.

Valid scans auto-check the ticket in and flash a success banner. Duplicate scans of the same ticket show "Already checked in" with the original check-in timestamp.

HTTPS required for camera access

Browsers only expose the camera API on HTTPS origins (or localhost). In production, the scanner must be loaded via your app. subdomain over HTTPS — not an IP address.

Manual

Two input modes for situations where QR scanning fails (damaged code, no camera, printed ticket list):

  • Enter Ticket Code — type the alphanumeric code from the ticket (format ABCD-1234)
  • Look up by Email — enter the attendee's email; if a single ticket matches, it's checked in directly. If multiple tickets match, a picker appears so the organizer can pick the right one.

Permissions

The check-in scanner requires one of:

  • SUPER_ADMIN
  • EVENTS_ADMIN
  • Ownership of the event (the user who created it)

Non-admin event owners can check in attendees for their own events but not others'.


Audit Trail

Every check-in action is recorded with the ticket code, the user who performed the check-in, and a timestamp. The full log appears on the event detail page under the Check-ins tab, and is included in event exports.

Tickets marked as cancelled (after refund) cannot be checked in — the scanner rejects them with a red banner.


Admin Routes

  • /app/events/:id/checkin — full-screen scanner for a specific event