#117
feat: add member-facing self sign-in page
Description
Members can sign themselves in with a Net ID instead of requiring an officer to swipe their card. The page records self sign-ins and shows relevant dues and Discord-linking prompts.
- Prefills the Net ID from an active session, or from browser storage after a successful sign-in. Signing out clears the stored value.
- Confirms an unknown Net ID before starting the existing email registration flow, which returns to the event after registration when a new link is issued.
- Records attendance for unpaid members and links to the latest-ending active term's dues. Dues enforcement based on a configurable deadline is not implemented.
- Backs up the attendance table, removes duplicate event/user rows while retaining the earliest record, and adds a database uniqueness constraint. Rows with no user remain untouched. The backup is a data snapshot and is retained on migration rollback.
Verified with migration, concurrency, membership overlap, and sign-in tests, the full project test suite, and the project's formatting and type checks.
Pre-Merge Checklist
- I've tested my code and solemnly swear that it works flawlessly
- For features, new functionality, or major refactors: My changes are gated behind feature flag(s).
SELF_CHECK_IN, default off. Disabled, the page 404s and records no attendance. Web registration is separately gated byWEB_ACCOUNT_REGISTRATION.