# Create a Course

This guide explains how to build a complete **LMS Course** from empty to published, using the portal course editor (recommended) with desk form alternatives. You will configure trainers, modules, lessons, quizzes, category, and publishing flags consistent with Smooth LMS validation rules.

> **Help URL:** [smoothhiring.com/help/lms/courses/create-a-course](https://smoothhiring.com/help/lms/courses/create-a-course)

---

## Table of Contents

1. [Before you start](/#before-you-start)
2. [Open the course editor](/#open-the-course-editor)
3. [Course header fields](/#course-header-fields)
4. [Add modules (chapters)](/#add-modules-chapters)
5. [Add lessons](/#add-lessons)
6. [Attach quizzes and assignments](/#attach-quizzes-and-assignments)
7. [Certification and pricing tab](/#certification-and-pricing-tab)
8. [Publish](/#publish)
9. [Desk form alternative](/#desk-form-alternative)
10. [Desk paths](/#desk-paths)
11. [Step-by-step walkthrough](/#step-by-step-walkthrough)
12. [Tips](/#tips)
13. [Troubleshooting](/#troubleshooting)
14. [Related guides](/#related-guides)
15. [HRMS integration](/#hrms-integration)

---

## Before you start

- Account with **Course Creator** or **Moderator** (or System Manager).
- At least one **User** to list as **Trainer** in Course Instructor table.
- **LMS Category** created for catalog grouping.
- Content outline (modules, learning objectives, assessment plan).
- Optional: SCORM zip, YouTube URLs, PDF handouts.

---

## Open the course editor

Primary entry points:

- Learning workspace → **Create a Course** → `/lms/courses/new/edit`
- Portal navigation → New Course (when exposed)
- Desk → `/app/lms-course/new` (advanced)

The portal editor saves **LMS Course** documents via whitelisted APIs and provides drag-and-drop module ordering.

---

## Course header fields

| Field | Guidance |
|-------|----------|
| **Title** | Unique, employee-friendly name |
| **Trainers** | Required multi-select; at least one instructor row |
| **Short Introduction** | Required; appears on cards |
| **Description** | Required rich text; learning outcomes |
| **Video Embed Link** | Optional promo video |
| **Preview Image** | Card thumbnail |
| **Category** | LMS Category link |
| **Tags** | Free-text discovery |
| **Color** | Card gradient on catalog |

Course settings section:

- **Published** / **Upcoming** / **Featured**
- **Disable Self Learning** for assignment-only training
- **Mandatory Training** + **Validity Period (Days)** for compliance

---

## Add modules (chapters)

Modules are **Course Chapter** documents linked to the course.

1. In editor, click **Add Module** (Add Chapter API).
2. Enter module title (e.g., "Module 1 — Hazard Communication").
3. Reorder modules to match instructional design.
4. For SCORM, choose upload package option (see SCORM guide).

Desk path for manual module: `/app/course-chapter/new` with **Course** link set.

---

## Add lessons

Within each module, add **Course Lesson** rows:

1. Click **Add Lesson**.
2. Set lesson title.
3. Choose content type combination (markdown body, video, quiz, assignment).
4. Optionally enable **Include In Preview** for marketing.

Lessons inherit **Course** from chapter via fetch; do not orphan lessons without chapter.

---

## Attach quizzes and assignments

**Quiz**

1. Create **LMS Quiz** on desk (`/app/lms-quiz`) with questions.
2. Copy quiz name into lesson **Quiz ID** field.
3. Quiz renders at bottom of lesson; passing rules per quiz settings.

**Assignment**

1. Enter **Question** text on lesson.
2. Select **File Type** (Image / Document / PDF) when uploads required.
3. Learner submissions create **LMS Assignment Submission** rows for grading.

---

## Certification and pricing tab

Internal corporate training typically:

- Enables **Completion Certificate** (free).
- Leaves **Paid Course** off.

Customer-facing academies may enable paid course/certificate with **Currency** and **Amount** fields.

Paid certificate adds **Evaluator** (Course Evaluator) and **Timezone** for evaluations.

---

## Publish

1. Review all modules have at least one lesson.
2. Confirm trainers assigned.
3. Set **Published On** date.
4. Check **Published**.
5. Save—verify course on `/lms/courses` as learner.

Optional: enable LMS Settings notification for published courses to email members.

---

## Desk form alternative

Power users may use `/app/lms-course/{name}`:

- Edit **Chapters** child table to link existing Course Chapter records.
- Use import templates for bulk course creation.
- Access **Statistics** tab after enrollments exist.

Desk is ideal for fixing broken links when portal editor errors.

---

## Desk paths

| Action | Path |
|--------|------|
| Portal editor | `/lms/courses/new/edit` |
| Course list | `/app/lms-course` |
| Module list | `/app/course-chapter` |
| Lesson list | `/app/course-lesson` |
| Quiz list | `/app/lms-quiz` |
| Learning home | `/desk/learning` |

---

## Step-by-step walkthrough

### Example: Anti-Harassment Training

1. Create category **Compliance** if missing.
2. New course title "Anti-Harassment 2026".
3. Trainer = HR Director user.
4. Module 1 "Policy Overview" — lesson with markdown body from handbook.
5. Module 2 "Scenarios" — lesson with embedded YouTube debrief.
6. Module 3 "Knowledge Check" — lesson with Quiz ID linked to 10-question quiz.
7. Enable mandatory + 365 validity for annual refresh.
8. Publish; assign to all employees via Moderator mandatory assign tool.
9. Verify portal progress and desk enrollment list after test completion.

---

## Tips

- Draft content in markdown files, paste into lesson body for consistency.
- Use AI summary fields only after content stabilizes (collapsible AI section on lesson).
- Duplicate last year's course, update validity, deprecate old published version.
- Keep quiz question count reasonable for mobile learners.

---

## Troubleshooting

| Issue | What to do |
|-------|------------|
| Cannot save course | Trainers required; fill short intro + description |
| Module not visible | Save course; refresh editor; check chapter link |
| Quiz not showing | Verify Quiz ID matches existing LMS Quiz name |
| Publish toggle missing | Gain Moderator role or ask moderator to publish |
| Lesson 404 | Chapter mismatch; confirm lesson.course fetch |

---

## Related guides

- [Courses overview](https://smoothhiring.com/help/lms/courses/overview)
- [Categories and tags](https://smoothhiring.com/help/lms/courses/categories-and-tags)
- [Chapters and lessons](https://smoothhiring.com/help/lms/courses/chapters-and-lessons)
- [SCORM packages](https://smoothhiring.com/help/lms/courses/scorm-packages)

---

## HRMS integration

New hire courses should mirror tasks on [Employee Onboarding](https://smoothhiring.com/help/hrms/onboarding/overview). When a course satisfies a regulatory requirement, mirror completion into [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) with evidence attachments. Authors should confirm target employees exist in [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) before assigning mandatory training.

## Content review workflow

Recommended approvals: instructional designer drafts in portal → SME reviews markdown → compliance signs off → Moderator publishes. Maintain draft courses with **Published** off until legal review completes for regulated industries. Archive prior year by duplicating course name with year suffix to preserve historical quiz submissions tied to old record names.

## Governance, auditing, and data retention

Training data in Smooth LMS is standard Frappe JSON in MariaDB plus files in `public/files` and `public/scorm`. HR audits typically require evidence of **who** completed **what** by **when**. Export desk lists (**LMS Enrollment**, **LMS Quiz Submission**, **LMS Training Assignment**, **LMS Certificate**) to CSV for sampling. Quiz submission print formats provide question-level detail suitable for safety investigations or harassment prevention audits.

Retention policy should align with HR document retention: keep LMS submissions at least as long as related [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) records. When employees depart, disable User accounts but retain enrollment history unless legal counsel approves purging. Version course content via amended records or annual duplicated courses so historical completions still reference the correct curriculum year.

System Managers should restrict **Moderator** role membership and enable login activity review on sensitive cohorts (executive leadership programs). Pair LMS reports with HR onboarding status from [Employee Onboarding overview](https://smoothhiring.com/help/hrms/onboarding/overview) to prove training preceded start date when required.

## Frequently asked questions

**Do employees need desk access?** No. **LMS Student** is portal-only by default; send `{site}/lms/courses` links.

**Can one user be both Course Creator and Moderator?** Yes on small teams; larger orgs should separate author vs publish duties.

**How do we handle contractors?** Create User + optional HR employee record; assign training like employees via [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) linkage or direct enrollment.

**What breaks if HRMS is down?** LMS continues serving published content; new hire auto-enrollment pauses until Employee/Onboarding APIs succeed.

**Are certificates legally equivalent to HR compliance rows?** Not automatically—store PDFs on compliance or document types when statute requires.

## Performance and scale notes

Large enrollments (5,000+ users) should batch assign overnight via `assign_mandatory_training` rather than manual enrollment rows. Rebuild website cache after bulk publish. Monitor background workers if email notifications queue heavily. SCORM packages should be optimized zip exports to reduce disk usage during large uploads.

## Additional troubleshooting

| Issue | What to do |
|-------|------------|
| Slow portal after publish | Hard-refresh browser; contact Smooth support if portal styling is broken |
| Wrong user on certificate | Certificate issued to enrollment member—fix User linkage in HR |
| Bulk import partial failure | Check error log; validate Course Instructor rows exist |
| Cohort vs course progress mismatch | Learner must open each course inside cohort; enrollments are per course |
| Timezone confusion on due dates | Training assignment due dates are date-only—communicate timezone in email |

## Operations calendar (recommended)

| Cadence | Action | Where |
|---------|--------|-------|
| Weekly | Review overdue **LMS Training Assignment** | `/app/lms-training-assignment` |
| Monthly | Publish content changelog to employees | Email + `/lms/courses` |
| Quarterly | Role audit (Moderator/Creator) | `/app/user` |
| Annually | Recertify mandatory courses | Re-assign with new due dates |
| After upgrade | Sign out/in; smoke-test `/lms` portal | `/desk/learning` |

## Integration smoke tests with HRMS

1. Create test **Employee** with user — confirm **LMS Student** role.
2. Submit test **Employee Onboarding** — confirm enrollments when courses mandatory.
3. Complete course — attach quiz PDF to test **Employee Compliance** row.
4. Archive evidence in document compliance SOP.

## Support runbook (L1)

Collect: user email, course/cohort name, screenshot of error, timestamp. Check enrollment exists, course published, role present. Escalate to System Manager if SCORM extract failed or permission hooks deny batch access. Reference [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) to fix missing `user_id` before reassigning training.

---

_Last updated: May 2026_
