Phase 3a-ii: Parent waiver/release in registration flow #26
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/basketball-api#26
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lineage
plan-2026-03-08-tryout-prep→ Phase 3a → Phase 3a-ii (parent waiver)Repo
forgejo_admin/basketball-apiUser Story
As a parent registering my child for tryouts,
I must read and accept a liability waiver before submitting the registration form,
So that Westside Kings & Queens has legal protection and I understand the risks and policies.
Context
Registration form exists and works (Phase 3a, PR #22). But there is no waiver/release — legally required before kids step on a basketball court. Coaches already have an identical pattern: contractor agreement text + checkbox + timestamp + IP + stored in DB (Phase 2, PR #9). We replicate this exact pattern for parents.
The waiver MUST be signed before registration submits. No waiver = no registration = no roster.
This is on the critical path for tonight's demo to Marcus. Email blast (Phase 3b) cannot go out until the registration flow includes the waiver — we can't send parents to a form that's missing legal protection.
File Targets
Files to modify:
src/basketball_api/models.py— addwaiver_signed(bool),waiver_signed_at(DateTime),waiver_signed_ip(String(45)) to Parent modelalembic/versions/— new migration 005 adding waiver columns to parents tablesrc/basketball_api/routes/register.py— add waiver text display + required checkbox to registration form (both token pre-fill and walk-up paths). Block form submission if waiver not accepted. Record timestamp + IP on POST.tests/test_register.py— add tests for waiver requirementFiles NOT to touch:
src/basketball_api/routes/coach.py— coach contractor agreement is separate and completesrc/basketball_api/routes/admin.py— no admin changes neededAcceptance Criteria
waiver_signed=True,waiver_signed_at=now(),waiver_signed_ip=request.client.hoststored on Parent recordbrand.py)Waiver Text
Test Expectations
pytest tests/test_register.py -vConstraints
routes/coach.py— checkbox with JS disable, server-side validation, timestamp + IP recordingbrand.pyfor styling — Westside red/black, same.agreementCSS class as coach pageChecklist
Related
project-westside-basketball