Open event check-in to everyone, not just members - #421
Merged
Merged
Conversation
events.checkIn no longer requires an active membership: anyone signed in can scan an event QR and have their attendance recorded. A member's check-in still carries their memberId. Bootcamp-only sessions keep their own current-term enrolment check. The only self check-in scanner lived on /club, which sends non-members to /dashboard, so a non-member had no way to scan in even at an event open to them. The scanner, mutation, and result modals move into useEventCheckIn (components/portal/EventCheckIn.tsx), shared by /club and a new /checkin page that takes anyone signed in. /checkin is in the portal nav for everyone and in proxy.ts's private (no-store) prefixes. The admin "Members only" toggle is gone and create/update no longer accept membersOnly (zod strips it from older clients). The members_only column stays: schema changes here are additive only, so it is left unread and can be dropped in a later change.
Contributor
Author
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Contributor
Author
|
Visit the preview URL for this PR (updated for commit ab33ca8): https://hacklytics2027--pr-421-xamp072r.web.app (expires Fri, 02 Oct 2026 14:11:58 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c48ba34db61581e25fe2978355160b5eefe0e83f |
Bootcamp sessions no longer appear in the Club Hub check-in manager. /admin/bootcamp gets a "Session check-in" panel with each week's QR code, open/close toggle, attendance list, and count. - bootcamp.attendance (admin only) now returns each session's qrCode, currentCheckIns and maxCheckIns via adminSessionsForTerm. myProgress keeps the member-facing sessionsForTerm, which never selects the QR: holding the code is enough to check in from anywhere. - The QR generate/download/regenerate logic moves out of the Club Hub into useEventQR (components/portal/EventQR.tsx), shared by both pages. - The Club Hub event form drops the bootcamp week and bootcamp-only fields; sessions are scheduled from the workshop modal (upsertSession), which already sets both. - EventAttendanceModal also refreshes the bootcamp grid, since it now opens from that page too.
Run bootcamp session check-in from the bootcamp admin page
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
events.checkInno longer requires an active membership. Anyone signed in can scan an event QR. A member's check-in still carries theirmemberId; bootcamp-only sessions keep their current-term enrolment check./checkinpage for anyone signed in. The only self check-in scanner used to live on/club, which sends non-members to/dashboard, so non-members had no way to scan in at all. The scanner, mutation, and result modals move intouseEventCheckIn(components/portal/EventCheckIn.tsx), shared by/club(behaviour unchanged) and/checkin./checkinadded toproxy.tsprivate (no-store) prefixes. Unauthenticated visitors go to login and straight back to/checkin.create/updateno longer acceptmembersOnly(zod strips it from older clients).members_onlycolumn is kept (additive-only rule) and no longer read. Drop it in a later change.Tests
Updated the check-in tests: non-members and lapsed members are admitted, events still flagged
members_onlyadmit non-members, bootcamp-only sessions still refuse non-enrolled users.pnpm typecheck9/9,pnpm lint8/8,pnpm test828 passing.Manual check
Sign in as a non-member, open Event Check-In, scan an event QR (the admin QR modal on /admin works on a second screen).
Note
Medium Risk
Changes authorization on a widely used
events.checkInpath (broader admission, lapsed members); bootcamp-only gating remains but membership enforcement is removed for general events.Overview
Event QR check-in is now open to any signed-in user, not only active members.
events.checkIndrops themembersOnlyand active-membership gates; member rows are still attached when present (including lapsed members). Bootcamp-only sessions still require current-term bootcamp enrolment.Product surface: New
/checkinroute and portal nav link Event Check-In (login callback preserved; route marked private inproxy.ts). Scanner flow is centralized inuseEventCheckIn, shared by/checkinand the Club Portal.useEventQRreplaces duplicated admin QR logic on Club Hub and bootcamp admin.Admin UX: Members only and bootcamp fields are removed from event create/edit (
membersOnlystripped from API inputs; DB column kept but unused). Club Hub hides bootcamp sessions; bootcamp admin gains session check-in (QR, open/close door, attendance). Dashboard copy no longer lists check-in as a membership perk.Bootcamp API: Member-facing session lists omit door QR;
adminSessionsForTermexposes QR/counters for staffattendanceonly.Reviewed by Cursor Bugbot for commit ab33ca8. Bugbot is set up for automated code reviews on this repo. Configure here.