Skip to content

Open event check-in to everyone, not just members - #421

Merged
aamoghS merged 4 commits into
devfrom
feat/checkin-for-everyone
Sep 25, 2026
Merged

aamoghS merged 4 commits into
devfrom
feat/checkin-for-everyone

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

What

  • Server: events.checkIn no longer requires an active membership. Anyone signed in can scan an event QR. A member's check-in still carries their memberId; bootcamp-only sessions keep their current-term enrolment check.
  • New /checkin page 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 into useEventCheckIn (components/portal/EventCheckIn.tsx), shared by /club (behaviour unchanged) and /checkin.
  • Nav: "Event Check-In" under Portal for everyone. /checkin added to proxy.ts private (no-store) prefixes. Unauthenticated visitors go to login and straight back to /checkin.
  • Admin: the "Members only" toggle is removed; create/update no longer accept membersOnly (zod strips it from older clients).
  • Schema: members_only column is kept (additive-only rule) and no longer read. Drop it in a later change.
  • Dashboard membership copy no longer lists event check-ins as a paid perk.

Tests

Updated the check-in tests: non-members and lapsed members are admitted, events still flagged members_only admit non-members, bootcamp-only sessions still refuse non-enrolled users. pnpm typecheck 9/9, pnpm lint 8/8, pnpm test 828 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.checkIn path (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.checkIn drops the membersOnly and 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 /checkin route and portal nav link Event Check-In (login callback preserved; route marked private in proxy.ts). Scanner flow is centralized in useEventCheckIn, shared by /checkin and the Club Portal. useEventQR replaces duplicated admin QR logic on Club Hub and bootcamp admin.

Admin UX: Members only and bootcamp fields are removed from event create/edit (membersOnly stripped 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; adminSessionsForTerm exposes QR/counters for staff attendance only.

Reviewed by Cursor Bugbot for commit ab33ca8. Bugbot is set up for automated code reviews on this repo. Configure here.

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.
@github-actions
github-actions Bot requested a review from aamoghS September 25, 2026 01:41
@aamoghS aamoghS changed the title Feature: feat/checkin-for-everyone to dev Open event check-in to everyone, not just members Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor Author

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
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
@aamoghS
aamoghS merged commit 9a97c47 into dev Sep 25, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant