Skip to content

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

@ebouchut

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

Metadata

Metadata

Assignees

Labels

Projects

Status
No status

Relationships

None yet

Development

No branches or pull requests

Issue actions