Skip to content

LMS PRD & screens

Audience: ux, product, frontend, qa
Status: specced
Owns: product + UX
Depends on: Overview, Personas, Lifecycle, API overview

Use this with the Scalar LMS REST contract. Screens below map to OpenAPI tags — do not invent endpoints from mockups.

Artisans need structured training (including gap fill after CAP). Instructors need to ship SCORM packages and edit native lessons. Access may be self-paid, staff-granted, sponsor-paid, or CAP-recommended. Completion must produce an LMS certificate and notify CAP.

  • Multi-persona onboarding gated before each surface.
  • Published catalogue + entitlement-gated player.
  • Native modules/items + SCORM 1.2 zip (OL storage + LMS player).
  • Sequencing + completion % + native assessments.
  • LMS certificate independent of CAP; emit lms.course.completed.
  • Instructor invite + co-instructors; staff ⊇ instructor.
  • Checkout priced in LMS, processed by OL.
  • LMS organizations / seat marketplaces (OL later).
  • SCORM 2004 sequencing, xAPI LRS, forums, live class.
  • In-LMS visual editing of a SCORM zip (re-export from authoring tool).
  • CAP workflow inside LMS.

Auth/login/password and country/state/LGA pickers are Orchestrator screens/APIs, reused by the LMS app.

Screen Purpose Primary APIs
Finish learner profile Onboarding wizard POST /onboarding/start, PATCH /onboarding/learner/save, POST /onboarding/learner/submit, OL /address/*
Home / continue learning Active enrollments + % GET /me, GET /enrollments/mine
Catalogue Search published courses GET /courses
Course detail Description, price, outline, CTA enroll/pay GET /courses/{id}, GET /courses/{id}/outline, POST /courses/{id}/enrollments
Checkout Redirect to Paystack POST /enrollments/{id}/checkout
Course player Outline, locks, native lesson/video GET /enrollments/{id}/progress, POST …/items/{itemId}/launch, POST …/progress
SCORM player Iframe + LMS JS API POST …/launch, GET /player/scorm/{sessionId}, POST …/cmi
Quiz Attempt + submit GET …/assessment, POST …/attempts, POST …/submit
My certificates List + download (OL resolve assetId) GET /certificates/mine, GET /certificates/{id}
Screen Purpose Primary APIs
Accept invite / instructor onboarding Unlock authoring invites + POST /onboarding/instructor/*
My courses Draft + published GET /authoring/courses
Course settings Title, price, CAP linkage, completion policy POST/PATCH /authoring/courses, publish/unpublish
Outline editor Modules, items, order, required flags modules + items CRUD
SCORM attach Upload zip via OL storage, bind packageAssetId OL /storage/upload-url + POST …/items
Native lesson / quiz editor Body, media assetId, questions PATCH …/items/{id}
Sequencing Prerequisites PUT …/sequencing
Co-instructors Add/remove GET/POST/DELETE …/instructors
Learner progress (my courses) Support view GET /admin/enrollments?courseId= (scoped)
Screen Purpose Primary APIs
Staff onboarding Unlock admin POST /onboarding/staff/*
Invite instructors / staff Email + role POST /instructors/invites, POST /staff/invites
Staff directory Role / suspend GET /staff, PATCH /staff/{id}
All courses Including drafts GET /authoring/courses (staff scope)
Grant access admin_grant / sponsor / cap_recommendation POST /admin/entitlements
Enrollment lookup Support GET /admin/enrollments
  • GET /me drives nav: hide catalogue consume until learner onboarding done; hide authoring until instructor done; hide admin until staff done.
  • Locked items show why (lms.sequencing.locked), not a generic 403.
  • Unpublished courses 404 in catalogue for learners; instructors still see them under Authoring.
  • Certificate download uses OL /storage/resolve on assetId, same as CAP.
  • Time-to-first-enrollment after learner onboarding.
  • Publish rate of invited instructors.
  • Completion rate and certificate issue rate.
  • CAP gap learners who complete a recommended course (lms.course.completed with capApplicationId).