Skip to content

πŸ”΅ User Stories β€” EpicΒ #59

Description

@ebouchut

Summary

Catalog of all v1.0 user stories, grouped by role. This is the source of truth for
functional scope; a story is promoted to its own implementation issue when work on
it starts (as was done for the password reset flow, #51).

Format: Connextra template
(As a… I want… so that…) + acceptance criteria checkboxes.
Roles and permissions are defined in #39.

Personas

Persona Role Profile
LΓ©a β€” the learner student Career-changer learning to code in the evenings
Marc β€” the course author instructor Developer & teacher creating and maintaining courses
Sophie β€” the platform manager admin Manages accounts and the content lifecycle
β€” superadmin Operator role; technical, no product persona

Personas map 1:1 to roles by design (small product, solo team).
superadmin deliberately has no persona: it has permissions but no UX journey of its own.
TODO: Add superadmin as an enhancement.


Student (LΓ©a)

US-01 β€” Register an account

As a visitor, I want to create a student account, so that I can enroll in courses.

  • Given a valid email and password, when I register, then an account is created with the student role
  • An account with an already-used email is rejected with a clear message
  • The password is stored hashed (never in clear text)
  • A verification email with a single-use, expiring link is sent on registration (same token machinery as feat(auth) – Password reset flow (forgot password)Β #51)
  • I must verify my email address before I can enroll in a course (US-06)

US-02 β€” Log in and out

As a student, I want to log in and out, so that my learning data is private to me.

  • Valid credentials create a server-side session (ADR-0001, no JWT)
  • Logging out invalidates the session
  • A deactivated account cannot log in

US-03 β€” Reset a forgotten password

As a student, I want to reset my password via email, so that I can regain access to my account.

US-04 β€” Browse available courses

As a student, I want to browse the published courses, so that I can find what to learn next.

  • Only published (non-archived) courses are listed
  • The list is visible without being enrolled

US-05 β€” View a course syllabus

As a student, I want to view a course overview, so that I can decide whether to enroll.

  • The syllabus (description, lesson list) is visible before enrollment
  • Lesson content is not accessible before enrollment is confirmed

US-06 β€” Enroll in a course

As a student, I want to enroll in a course, so that I can access its lessons.

  • Enrolling requires a verified email address (US-01)
  • Enrolling creates an enrollment awaiting confirmation
  • I cannot enroll twice in the same course
  • I cannot enroll in an archived course

US-07 β€” Access lessons of an enrolled course

As a student, I want to view all lessons of a course I'm enrolled in, so that I can learn at my own pace.

US-08 β€” Complete a lesson

As a student, I want to mark a lesson as completed, so that I can track my progress.

  • A completed lesson is recorded and visibly marked
  • My course progress reflects completed vs. total lessons

US-09 β€” Complete a course

As a student, I want the course to be marked completed when I finish all lessons, so that I have a record of my achievement.

  • When all lessons are completed, the course status becomes completed

US-10 β€” Drop a course

As a student, I want to withdraw from a course, so that I can stop without losing my account or history.

  • Dropping marks the enrollment as dropped (not deleted) and revokes content access

Instructor (Marc)

US-11 β€” Create a course

As an instructor, I want to create a new course, so that students can learn from it.

  • A new course is created in a non-published (draft) state, owned by me

US-12 β€” Update my course

As an instructor, I want to update a course I created, so that its content stays accurate.

  • I can edit my own courses; I cannot edit another instructor's course

US-13 β€” Manage enrollments of my course

As an instructor, I want to add students and confirm enrollments on my courses, so that I control who attends.

  • I can add a student to a course I created
  • I can confirm a pending enrollment, which grants content access (US-07)

US-14 β€” Archive my course

As an instructor, I want to archive a course, so that it is no longer offered without being deleted.

  • An archived course is unpublished: hidden from the catalog, closed to new enrollments
  • The course and its data are preserved (deletion is admin-only, US-21)

US-15 β€” Create a lesson

As an instructor, I want to add a lesson to my course, so that the course has content.

  • I can create a lesson (Markdown content) in a course I own

US-16 β€” Update a lesson

As an instructor, I want to edit a lesson of my course, so that I can fix and improve it.

  • I can edit lessons of my own courses only

US-17 β€” Archive a lesson

As an instructor, I want to archive a lesson, so that outdated content is hidden without being deleted.

  • An archived lesson is no longer visible to students; data is preserved

Admin (Sophie)

US-18 β€” Add an instructor

As an admin, I want to create instructor accounts, so that authors can publish courses.

  • A new account with the instructor role can be created

US-19 β€” Deactivate an instructor

As an admin, I want to deactivate an instructor account, so that it can no longer be used, without deleting it.

  • A deactivated instructor cannot log in; their data and courses are preserved

US-20 β€” Add or deactivate a student

As an admin, I want to add and deactivate student accounts, so that I can manage the user base.

  • Same semantics as US-18/US-19, applied to the student role

US-21 β€” Delete an archived course

As an admin, I want to permanently delete a previously archived course, so that obsolete content can be removed.

  • Only an archived course can be deleted (two-step safety: archive β†’ delete)

US-22 β€” Delete an archived lesson

As an admin, I want to permanently delete a previously archived lesson, so that obsolete content can be removed.

  • Only an archived lesson can be deleted

Superadmin

No dedicated stories: superadmin can do everything above, for every user and
every course/lesson (see role hierarchy in #39).

Design notes

  • Registration is self-service and automatic (no human approval), gated by
    email verification β€” the industry-standard pattern on free training platforms.
  • Enrollment requires instructor confirmation (US-06 β†’ US-13), a deliberate
    choice matching the training-center model (Moodle-style "manual enrolment").
    The common alternative β€” auto-confirmed open enrollment, with approval as a
    per-course toggle β€” is deferred to the πŸ”΅ Enhancements epic (πŸ”΅ Enhancements – EpicΒ #41).

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions