MemberPulse

Course Creation

Build courses with subjects, content, and assessments

Build comprehensive courses with structured subjects, diverse content types, and assessments.

Course Structure

Course
├── Subject 1
│   ├── Content: Video
│   ├── Content: PDF
│   └── Content: Quiz
├── Subject 2
│   ├── Content: Text
│   └── Content: Quiz
└── Final Assessment

Content Types

TypeDescription
VideoMP4, embedded YouTube/Vimeo
PDFDownloadable documents
TextRich text content
QuizMultiple choice, true/false
SCORMSCORM packages

Course Settings

  • Access: Free, paid, member-only
  • Duration: Estimated completion time
  • CPD Points: Points awarded on completion
  • Pass Score: Minimum quiz score (default: 70%)
  • Certificate: Enable/disable certification

UI Spec (from supplied spreadsheet)

The following field inventory is sourced from workspace/sources/entity-registry.csv ("Courses").

This is a UI/requirements inventory (not the ERD). Some rows describe UI behavior (e.g. limits) rather than canonical storage.

Course fields

FieldInput TypeRequiredNotes
Course IDNumberRequiredSystem generated
Course NameTextRequiredmodel: name
Tile Short DescriptionTextRequiredFirst ~135 chars shown in tile
Course DescriptionWYSIWYG (Textarea)Requiredmodel: description
Course CategoryMulti-selectRequiredmodel: courseCategories
Course Featured ImageFileRequiredmodel: featuredImage
SeriesMulti-select-model: courseSeries
BranchesMulti-select-model: courseBranches
Course TypeSelectorRequiredmodel: courseType
Course AuthorTextRequiredmodel: author
Publish Date / TimeDate + TimeRequiredmodel: publishDateTime
Estimated Completion TimeNumberRequiredMinutes; model: estimatedCompletionTime
Start DateDateRequiredmodel: startDate
Close DateDateNot RequiredMust be after start date; model: closeDate
CPD PointsNumberRequiredmodel: cpdPoints
CPD CategoryMulti-selectRequiredmodel: cpdCategories
Members PriceTextRequired-
Members LimitNumberNot Requiredmodel: membersLimit
Non-Members PriceTextRequiredmodel: nonMembersPrice
Non-Members LimitNumberNot Requiredmodel: nonMembersLimit
General Attendance LimitNumberNot Requiredmodel: generalAttendanceLimit

Acceptance Criteria

Frontend
  • Course fields workflow is implemented in the UI as described.
Backend / API
  • Backend behavior supports Course fields as documented.
Permissions
  • Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
  • All business rules for this feature are enforced.
Error Handling
  • Error states return clear messages and appropriate HTTP status codes.

Subject / quiz fields

FieldInput TypeRequiredNotes
Subject NameTextRequiredmodel: name
Subject DescriptionTextRequiredmodel: description
Subject DurationNumberRequiredMinutes; empty means infinite timer
Subject FileFileRequiredVideo / Document
File ThumbnailFileNot RequiredDefault thumbnail used if empty
Zoom LinkSelectorRequiredPulls from available Zoom videos
Questions RequiredTrue / FalseRequiredmodel: isQuestionsRequired
How many questionsNumberRequiredmodel: numberOfQuestions
Generate with AIYes / NoRequiredmodel: generateWithAI
Question TypeSelectorRequiredmodel: questionType (enum: single_answer, multiple_answer)

Data Model Cross‑Reference (Entities)

Acceptance Criteria

Frontend
  • Subject / quiz fields workflow is implemented in the UI as described.
Backend / API
  • Backend behavior supports Subject / quiz fields as documented.
Permissions
  • Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
  • All business rules for this feature are enforced.
Error Handling
  • Error states return clear messages and appropriate HTTP status codes.

Features

Course Creation

Acceptance Criteria

Frontend
  • UI supports the workflows described in this feature.
Backend / API
  • Backend behavior supports this feature as documented.
Permissions
  • Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
  • All business rules for this feature are enforced.
Error Handling
  • Error states return clear messages and appropriate HTTP status codes.

Implementation Contracts

Backend (API)

POST   /api/courses                          # Create course
PUT    /api/courses/{id}                     # Update course

POST   /api/courses/{id}/subjects            # Add subject
PUT    /api/courses/{id}/subjects/{subjectId}
DELETE /api/courses/{id}/subjects/{subjectId}
PUT    /api/courses/{id}/subjects/reorder    # Reorder subjects

POST   /api/courses/{id}/subjects/{subjectId}/content
PUT    /api/courses/{id}/content/{contentId}
DELETE /api/courses/{id}/content/{contentId}

POST   /api/courses/{id}/publish             # Publish course
POST   /api/courses/{id}/unpublish           # Unpublish

On this page