Course Enrollment Management
Feature Detail
Description
Course Enrollment Management enables peer mentors and coordinators to browse, enroll in, and track participation in certification courses directly from the app. The feature covers the full enrollment lifecycle from discovering available courses in a catalog view, reviewing course details and prerequisites, confirming enrollment, and receiving confirmation. It integrates with the organization's course administration backend to reflect real-time seat availability and enrollment status, ensuring peer mentors always have accurate information about upcoming training opportunities.
Analysis
Streamlining course enrollment directly within the app removes a significant friction point for peer mentors who currently must navigate separate portals or contact coordinators to sign up for mandatory training. For HLF in particular, certification is a prerequisite for active peer mentor status, meaning enrollment efficiency directly impacts the organization's capacity to field qualified mentors. Centralizing enrollment also gives coordinators real-time visibility into training uptake, enabling proactive outreach to uncertified mentors before their certification lapses. This reduces administrative overhead and improves compliance rates across the membership.
The feature requires a CourseRepository backed by Supabase tables for courses and course_enrollments, with row-level security ensuring users only enroll themselves unless they hold a coordinator role. The Course Catalog Screen and Course Detail Screen are built as standard Flutter pages using the design token system; the Enrollment Confirmation Screen uses an AppButton CTA that calls the CourseEnrollmentService. The service validates prerequisites and seat availability before writing to the database, returning appropriate error states for full courses or unmet prerequisites. Push notification hooks should be wired to send a confirmation notification via the Push Notification Gateway on successful enrollment.
Dependencies
Definition of Done
Components (5)
User Stories (11)
As a As a user
I want I want to receive a push notification immediately after my course enrollment is confirmed
So that So that I have a persistent record of my enrollment in my notification history and can refer back to the course details without re-entering the app
- Given a user successfully enrolls in a course, when the enrollment write completes, then a push notification is dispatched within a few seconds of confirmation
- Given the push notification is received, when the user views it, then it includes the course name and scheduled date
- Given a user taps the push notification, when the app opens, then they are navigated to the relevant course detail or enrollment confirmation screen
- +1 more
As a As a user
I want I want to receive a push notification immediately after my course enrollment is confirmed
So that So that I have a persistent record of my enrollment in my notification history and can refer back to the course details without re-entering the app
- Given a user successfully enrolls in a course, when the enrollment write completes, then a push notification is dispatched within a few seconds of confirmation
- Given the push notification is received, when the user views it, then it includes the course name and scheduled date
- Given a user taps the push notification, when the app opens, then they are navigated to the relevant course detail or enrollment confirmation screen
- +1 more
As a As a Coordinator
I want I want to enroll a specific peer mentor in a course on their behalf using coordinator-level database access
So that So that peer mentors who are unable or unwilling to navigate the enrollment flow themselves can still be registered for mandatory certification courses without missing deadlines
- Given a coordinator initiates an enrollment flow, when they reach the confirmation step, then they can specify a peer mentor under their oversight as the enrollee instead of themselves
- Given a coordinator submits enrollment on behalf of a peer mentor, when the CourseEnrollmentService processes the request, then it verifies coordinator role authorization via row-level security before writing the enrollment
- Given the enrollment is successful, when the confirmation is shown, then the enrolled peer mentor's name is displayed in the confirmation to prevent errors
- +2 more
As a As a user
I want I want to browse a catalog of available courses with real-time seat availability and enrollment status
So that So that I can quickly identify relevant training opportunities and know whether enrollment is still open before investing time in reading course details
- Given a user is authenticated, when they navigate to the course catalog, then all available courses are displayed with title, date, location, and available seat count
- Given a course has no remaining seats, when it is displayed in the catalog, then it is clearly marked as full with enrollment disabled
- Given new seat availability data arrives from Supabase real-time subscriptions, when the catalog is open, then seat counts update without requiring a manual refresh
- +2 more
As a As a user
I want I want to view the full details of a course including description, prerequisites, schedule, location, instructor, and current enrollment versus capacity
So that So that I can make an informed enrollment decision and understand whether I meet all prerequisites before committing
- Given a user navigates to a course detail page, when the page loads, then all course metadata is displayed: description, prerequisites, schedule, location, instructor, and enrollment count vs. capacity
- Given a user meets all prerequisites and seats are available, when they view the course detail, then the enrollment CTA button is enabled and tappable
- Given a user does not meet one or more prerequisites, when they view the course detail, then the CTA button is disabled and a clear message explains which prerequisite is missing
- +2 more
As a As a user
I want I want to receive a clear, actionable error message when my enrollment attempt fails because the course is full or I have not met the prerequisites
So that So that I understand exactly why I cannot enroll and what steps I can take next, without needing to contact a coordinator for an explanation
- Given a user attempts to enroll in a course that is at full capacity, when the CourseEnrollmentService returns a full-capacity error, then a clear 'Course Full' message is shown explaining that no seats are available
- Given a user attempts to enroll in a course with unmet prerequisites, when the CourseEnrollmentService returns a prerequisite error, then the specific unmet prerequisite is named in the error message
- Given an enrollment error occurs, when the error state is displayed, then the user is not navigated away from the confirmation screen and can go back to the catalog without losing their place
- +2 more
As a As a user
I want I want to browse a catalog of available courses with real-time seat availability and enrollment status
So that So that I can quickly identify relevant training opportunities and know whether enrollment is still open before investing time in reading course details
- Given a user is authenticated, when they navigate to the course catalog, then all available courses are displayed with title, date, location, and available seat count
- Given a course has no remaining seats, when it is displayed in the catalog, then it is clearly marked as full with enrollment disabled
- Given new seat availability data arrives from Supabase real-time subscriptions, when the catalog is open, then seat counts update without requiring a manual refresh
- +2 more
As a As a user
I want I want to view the full details of a course including description, prerequisites, schedule, location, instructor, and current enrollment versus capacity
So that So that I can make an informed enrollment decision and understand whether I meet all prerequisites before committing
- Given a user navigates to a course detail page, when the page loads, then all course metadata is displayed: description, prerequisites, schedule, location, instructor, and enrollment count vs. capacity
- Given a user meets all prerequisites and seats are available, when they view the course detail, then the enrollment CTA button is enabled and tappable
- Given a user does not meet one or more prerequisites, when they view the course detail, then the CTA button is disabled and a clear message explains which prerequisite is missing
- +2 more
As a As a user
I want I want to receive a clear, actionable error message when my enrollment attempt fails because the course is full or I have not met the prerequisites
So that So that I understand exactly why I cannot enroll and what steps I can take next, without needing to contact a coordinator for an explanation
- Given a user attempts to enroll in a course that is at full capacity, when the CourseEnrollmentService returns a full-capacity error, then a clear 'Course Full' message is shown explaining that no seats are available
- Given a user attempts to enroll in a course with unmet prerequisites, when the CourseEnrollmentService returns a prerequisite error, then the specific unmet prerequisite is named in the error message
- Given an enrollment error occurs, when the error state is displayed, then the user is not navigated away from the confirmation screen and can go back to the catalog without losing their place
- +2 more
As a As a user
I want I want to confirm my course enrollment through a dedicated confirmation screen that summarizes the course details before I commit
So that So that I can review my enrollment decision one final time and receive immediate confirmation that my spot has been secured
- Given a user taps the enrollment CTA on the course detail screen, when the confirmation screen appears, then it displays course name, date, and location for review
- Given a user taps the confirm button on the enrollment confirmation screen, when the CourseEnrollmentService validates successfully, then the enrollment is written to the database and the user sees a success state
- Given enrollment is confirmed successfully, when the success state is shown, then a push notification is also dispatched confirming the enrollment
- +2 more
As a As a user
I want I want to confirm my course enrollment through a dedicated confirmation screen that summarizes the course details before I commit
So that So that I can review my enrollment decision one final time and receive immediate confirmation that my spot has been secured
- Given a user taps the enrollment CTA on the course detail screen, when the confirmation screen appears, then it displays course name, date, and location for review
- Given a user taps the confirm button on the enrollment confirmation screen, when the CourseEnrollmentService validates successfully, then the enrollment is written to the database and the user sees a success state
- Given enrollment is confirmed successfully, when the success state is shown, then a push notification is also dispatched confirming the enrollment
- +2 more