Flows
Event Check-In
How attendees get checked in at events, what happens in the backend, and the admin tools involved.
Check-In Methods
There are two ways to check someone in:
QR Code Scan
Each registered attendee receives a QR code in their confirmation email. At the event, an admin scans this QR using the scanner at /admin/event/[eventId]/[year] (the QR Scanner tab in the event dashboard).
The QR code encodes the attendee's email and event identifiers. When scanned, the frontend calls:
PUT /registrations/{email}/{fname}
{
"eventID": "blueprint",
"year": 2026,
"registrationStatus": "checkedIn",
"isPartner": false
}
Manual Check-In
Admins can also click on an attendee row in the Data Table tab of the event dashboard and change their status to "checkedIn" directly. This calls the same PUT endpoint.
Backend: updateRegistration()
Handler: services/registrations/handler.js → updateRegistration
When a check-in request arrives:
- Receives
{ eventID, year, registrationStatus, ...otherFields }in the body - Email comes from the path parameter
- Calls
updateHelper()with the update payload
The updateHelper() Function
This is the core registration update function used by check-in, registration, and mass-update operations.
For a check-in specifically, updateHelper():
- Queries the event from
biztechEventsto get capacity (capac) and event details - Counts current registrations via GSI
event-query - Skips email sending for
checkedInstatus (emails are only sent forregisteredandwaitliststatuses) - Writes the status update to
biztechRegistrationsusingdb.updateDB()
The capacity check still runs during check-in even though it's not relevant — the function is shared across all registration status changes.
Registration Status Values
| Status | Meaning |
|---|---|
incomplete | Started registration but hasn't paid yet |
registered | Confirmed registration |
waitlist | Event at capacity, user is waitlisted |
checkedIn | Checked in at the event |
cancelled | Registration cancelled |
accepted | Application accepted (application events only) |
acceptedPending | Accepted, free event, awaiting check-in |
acceptedComplete | Accepted + paid (application events only) |
rejected | Application rejected |
Check-in changes the status from registered (or accepted/acceptedComplete) to checkedIn.
What Happens After Check-In
Once checked in, the attendee can:
- Access the Companion App — at
/companion/{eventId}/{year}, which shows their profile, quests, and connections - Use NFC tapping — if the event has NFC cards, tapping another attendee's card triggers a connection via the interactions service
- Complete quests — gamified tasks tracked in
biztechQuests
QR Code Generation
The QR code is generated and emailed during the initial registration, not at check-in. The flow:
- User registers →
POST /registrations/orPUT /registrations/{email}/{fname} updateHelper()callsSESEmailService.sendDynamicQR()which generates an inline QR code image- The same email also includes a
.icscalendar invite attachment viasendCalendarInvite()
QR emails are not sent for these statuses: incomplete, rejected, accepted, checkedIn, or partner registrations (isPartner: true).
Admin Dashboard: Event Day View
The admin event dashboard at /admin/event/[eventId]/[year] has several tabs relevant to check-in:
| Tab | Purpose |
|---|---|
| Data Table | Shows all registrations with real-time status, filtering, sorting, CSV export |
| QR Scanner | Camera-based QR scanner for rapid check-in |
| Teams | Team assignments (for events with team activities) |
| Analytics | Registration timeline, capacity usage, demographic breakdowns |
The Data Table updates in real time as attendees are checked in, showing the current count of checked-in vs registered attendees.
Key Files
| File | What it does |
|---|---|
services/registrations/handler.js → updateRegistration | Backend check-in handler |
services/registrations/handler.js → updateHelper | Core update logic (capacity, emails, DynamoDB write) |
services/registrations/helpers/SESEmailService.js | QR code email generation |
src/components/QrScanner/ | Frontend QR scanner component |
src/pages/admin/event/[eventId]/[year]/index.tsx | Admin event dashboard |
Related Pages
- Registration System — full registration lifecycle
- Event Lifecycle — where check-in fits in the broader event flow
- QR Code Check-In — deeper QR implementation details
- Companion System — what attendees use after check-in