Scanning Tickets
Camera scanning, validation results, check-in flow
Opening the Scanner
Tap Scan Tickets from the home screen to open the camera scanner.
If this is your first time, the app will ask for camera access permission. You must grant it to use the scanner.
Camera View
The scanner displays:
- Full-screen camera feed
- An overlay frame indicating where to aim
- A session scan counter at the bottom (e.g., "5 scanned")
- A close button in the top corner
Scanning a QR Code
- Point the camera at a ticket QR code
- The code is detected automatically
- A haptic vibration confirms detection
- The result modal appears
A 3-second debounce prevents the same QR code from being scanned twice in rapid succession.
Result Modal
After scanning, a modal displays the validation result.
Status Icon
The top of the modal shows a colored circle with an icon:
- Green circle with checkmark for valid tickets
- Amber circle with warning triangle for warning conditions
- Red circle with X for errors
Ticket Details
If the QR code contains valid ticket data, the modal shows:
| Field | Description |
|---|---|
| Holder | Name of the ticket holder |
| Type | Ticket type (e.g., "General Admission") |
| Event | Event name |
| Date | Event date and time |
| Checked in at | Time of previous check-in (only for already-used tickets) |
Scan Result Statuses
| Status | Icon | Color | Meaning |
|---|---|---|---|
| Valid Ticket | Checkmark | Green | Ticket is valid and ready to check in |
| Already Checked In | Warning | Amber | Ticket was already scanned; check-in time is displayed |
| Ticket Revoked | X | Red | Ticket has been revoked by the organizer |
| Ticket Expired | Warning | Amber | Ticket expiration date has passed |
| Wrong Event | Warning | Amber | Ticket is for a different event than the ones this scanner is enrolled for |
| Ticket Not Found | X | Red | Ticket ID not recognized by the server |
| Invalid Ticket | X | Red | Digital signature verification failed (possible forgery) |
| Invalid QR Code | X | Red | QR code is not a valid ticket format |
| Not Enrolled | Warning | Amber | Scanner is not enrolled for this ticket's event. Shows the event name |
| Unknown Issuer | Warning | Amber | Issuer public key not found; cannot verify the signature |
| Already Used (Local) | Warning | Amber | Already scanned locally in this session (offline duplicate detection) |
| Wrong Gate | Warning | Amber | Ticket is valid but not assigned to this scanner's gate |
Check-In Flow
When a ticket is Valid:
- The modal shows the ticket details and a Mark as used button
- Tap Mark as used to check the attendee in
- The app sends the check-in to the server
- On success: green haptic feedback, the modal closes, and the scan counter increments
- If you do not want to check in, tap Cancel to dismiss the modal
For all other statuses, the modal shows a Close button to dismiss and continue scanning.
Offline Check-In
If the server is unreachable when you tap Mark as used:
- The check-in is queued locally
- The modal shows "Admitted (pending sync)"
- Green haptic feedback confirms the admission
- The check-in is recorded in local scan history with a "Pending sync" status
The queued check-in will be synced automatically when connectivity is restored. See Offline Mode for details.
Tips
- Hold the phone steady about 15-20 cm from the QR code for best results
- Ensure adequate lighting; the camera needs to clearly see the QR code
- If a QR code is not being detected, try adjusting the angle or distance
- The session counter resets each time you leave and re-enter the scanner