UC-2 Student views passport and progress
| Primary actor | Student |
| Priority | Must |
| Satisfies | FR-C2, FR-C3, FR-C4, FR-C5, FR-C6 |
| Precondition | The student is signed in and enrolled. |
| Trigger | The student opens the passport. |
Main success scenario
- The app requests the passport for the active challenge.
- The system derives each week's status from its own date window and the student's check-ins: locked, available, missed, or complete.
- The app renders the themed week tiles, the progress countdown ("3 of 7 complete"), and the prize-eligibility indicator, and saves a snapshot for offline viewing.
Extensions
- 1a. Offline. The last saved snapshot renders with an offline banner. With no snapshot, the app says so instead of showing an empty passport.
- 2a. A week's window has closed unattempted. It shows as missed and stays completable; no later week is gated on it.
- 2b. Task groups. A week that says "complete N of these M" counts completions within the group.
- Installed app. The PWA is installable; a new release activates predictably and never leaves the installed app dead-ended.
Acceptance criteria (Gherkin)
| Feature file | Test module |
|---|---|
missed_weeks_stay_open.feature |
test_missed_weeks_stay_open_bdd.py |
installed_app_exits.feature |
test_installed_app_exits_bdd.py |
app_update_activation.feature |
test_app_update_activation_bdd.py |
pwa_browser_coverage.feature |
test_pwa_browser_coverage_bdd.py (browser tier) |
self_hosted_fonts.feature |
test_self_hosted_fonts_bdd.py |
student_desktop_week_grid.feature |
test_student_desktop_week_grid_bdd.py (browser tier) |
student_navigation_rail.feature and frontend/student_navigation_rail.feature |
test_student_navigation_rail_bdd.py |
top_app_bar_home.feature and frontend/top_app_bar_home.feature |
test_top_app_bar_home_bdd.py |
frontend/desktop_icon_components.feature |
Vitest (see the scenario's Proven by lines) |
Plain pytest: test_passport.py, test_prize_eligibility.py, test_task_groups.py, test_campus_clock.py. Frontend: Passport.test.tsx, useAppUpdate.test.tsx.
Views
- Process: UC-2 View passport, online or from the snapshot
- Logical:
Task,CheckInand the derived week status in the domain model; the offline snapshot in system components
Code: backend/app/services/passport.py, backend/app/services/eligibility.py, frontend/src/components/Passport/, frontend/src/offline/, frontend/src/pwa/.