# Desk vs Learning Portal

Smooth LMS splits administration and learning across two surfaces: the **Frappe desk** (Learning workspace and record lists) and the **LMS portal** (Vue SPA under `/lms`). Understanding when to use each prevents permission confusion, speeds up course authoring, and sets correct expectations for employees who should never need desk access.

> **Help URL:** [smoothhiring.com/help/lms/getting-started/desk-vs-portal](https://smoothhiring.com/help/lms/getting-started/desk-vs-portal)

---

## Table of Contents

1. [Two surfaces, one database](/#two-surfaces-one-database)
2. [Learning workspace (desk)](/#learning-workspace-desk)
3. [LMS portal routes](/#lms-portal-routes)
4. [Who should use which](/#who-should-use-which)
5. [Authoring: desk forms vs portal editor](/#authoring-desk-forms-vs-portal-editor)
6. [Enrollment and progress views](/#enrollment-and-progress-views)
7. [Desk paths reference](/#desk-paths-reference)
8. [Step-by-step: verify both surfaces](/#step-by-step-verify-both-surfaces)
9. [Tips](/#tips)
10. [Troubleshooting](/#troubleshooting)
11. [Related guides](/#related-guides)
12. [HRMS integration](/#hrms-integration)

---

## Two surfaces, one database

Both desk and portal read the same MariaDB tables (`tabLMS Course`, `tabCourse Lesson`, `tabLMS Enrollment`, etc.). Publishing a course in either surface sets `published = 1` on **LMS Course**. An employee completing a lesson in the portal updates the same enrollment progress moderators see on desk lists.

The app icon for Smooth LMS points to **`/desk/learning`** (`app_icon_route` in hooks). The website route prefix defaults to **`/lms`** but can be overridden with `lms_path` in `site_config.json`. Portal navigation (Courses, Cohorts, Programs, Statistics) is controlled by **LMS Settings** sidebar toggles.

---

## Learning workspace (desk)

Open **Learning** from the app switcher or navigate directly to `/desk/learning`. The workspace includes:

- **Get Started** links: Visit LMS Portal (`/lms/courses`), Create a Course (`/lms/courses/new/edit`), LMS Settings.
- **Charts:** Signups, Course Enrollments, Certification.
- **Shortcuts:** Quiz Results, Users, Course (published count), Enrollments, Courses Completed, Certificate, Evaluation.
- **Cards:** Course Data (Course, Module, Lesson, Quiz, Quiz Results), Course Stats (Interest, Review), Certification.

Desk is optimized for **operators**: HR admins, L&D managers with System Manager or elevated LMS permissions, and support staff exporting quiz submissions or fixing enrollment rows.

---

## LMS portal routes

| Portal path | Purpose |
|-------------|---------|
| `/lms/courses` | Course catalog, search, categories, bookmarks |
| `/lms/courses/{course}` | Course detail and lesson player |
| `/lms/courses/new/edit` | Course authoring UI for creators |
| `/lms/batches` | Cohort listing (when enabled in settings) |
| `/lms/programs` | Program listing |
| `/lms/statistics` | Admin analytics (Moderator / elevated roles) |

Students land on portal home showing **My Courses**, **Mandatory Training** (from LMS Training Assignment), and cohort cards. SCORM lessons launch through the SCORM page renderer without desk chrome.

---

## Who should use which

| Persona | Primary surface | Why |
|---------|-----------------|-----|
| Employee learner | Portal | Consumes lessons, quizzes, cohort timetable |
| Course author | Portal editor + occasional desk | Rich lesson editor, drag-drop modules |
| L&D moderator | Both | Portal for cohort ops; desk for bulk lists/reports |
| HR compliance | Desk + HR workspaces | Cross-check enrollments; export quiz PDFs |
| System Manager | Desk | Permissions, settings, data repair |

LMS roles (**Course Creator**, **Moderator**, **Batch Evaluator**, **LMS Student**) ship with **`desk_access = 0`**. Only users who also hold HR or System Manager desk roles see `/desk/learning` without extra role configuration.

---

## Authoring: desk forms vs portal editor

**Portal course editor** (`/lms/courses/new/edit`) is the preferred path for building module/lesson trees, uploading SCORM zip files, and previewing content. APIs such as `add_chapter` handle SCORM extraction into `public/scorm/{course}/{title}`.

**Desk record forms** (`/app/lms-course`, `/app/course-chapter`, `/app/course-lesson`) remain available for power users: import spreadsheets, bulk rename, attach print formats, or fix broken links when the portal UI is unavailable.

Always set **Trainers** (Course Instructor child table) before publishing—portal and desk both require at least one instructor row.

---

## Enrollment and progress views

| View | Surface | record |
|------|---------|---------|
| My enrollments | Portal home | LMS Enrollment (current user) |
| All enrollments | Desk shortcut | `/app/lms-enrollment` |
| Cohort roster | Portal batch page + desk | LMS Batch Enrollment |
| Mandatory assignments | Portal home widget | LMS Training Assignment |
| Quiz results PDF | Desk list | LMS Quiz Submission → Print |

Progress percentage on **LMS Enrollment** aggregates completed lessons and passed assessments. **Disable Self Learning** forces enrollment to be created by moderator, cohort, onboarding, or `assign_mandatory_training`.

---

## Desk paths reference

| Item | Path |
|------|------|
| Learning workspace | `/desk/learning` |
| LMS portal | `/lms/courses` |
| LMS Course | `/app/lms-course` |
| Course Chapter (Module) | `/app/course-chapter` |
| Course Lesson | `/app/course-lesson` |
| LMS Batch (Cohort) | `/app/lms-batch` |
| LMS Settings | `/app/lms-settings/LMS%20Settings` |

---

## Step-by-step: verify both surfaces

### 1. Admin desk check

1. Log in as System Manager.
2. Open `/desk/learning` — confirm charts load.
3. Open **Course** shortcut → published courses list.
4. Open `/app/lms-settings/LMS%20Settings` — confirm **Show Courses** enabled.

### 2. Author portal check

1. Log in as Course Creator.
2. Visit `/lms/courses/new/edit` — create draft course with one module and lesson.
3. Publish course; confirm it appears on `/lms/courses`.

### 3. Learner portal check

1. Log in as employee user with **LMS Student**.
2. Open `/lms/courses` — open published course.
3. Complete a lesson; verify progress bar updates.
4. As admin, open `/app/lms-enrollment` — confirm progress > 0.

### 4. Cross-surface mandatory training

1. Mark course mandatory with validity days.
2. Assign via Moderator tools or onboarding.
3. Employee sees assignment on portal home; desk shows **LMS Training Assignment** row.

---

## Tips

- Deep-link employees to `/lms/courses` from onboarding emails rather than `/desk`.
- Use desk **Quiz Results** shortcut when managers need downloadable PDFs of test answers.
- If portal sidebar missing items, toggle them in LMS Settings → Sidebar tab.
- Corporate patch sets enrollment `member_type` to Employee—reports filter accordingly.

---

## Troubleshooting

| Issue | What to do |
|-------|------------|
| 404 on `/lms/courses` | Confirm lms app installed; check `lms_path` site config; rebuild assets |
| Creator sees desk error | Expected—use portal editor; grant System Manager only for desk repair |
| Published course not in portal | Hard refresh; verify `published` and not `upcoming` without date |
| Desk charts empty | New site—enroll test users; charts need data |
| SCORM blank in portal | Re-upload package; check `public/scorm` path and manifest extraction logs |

---

## Related guides

- [Smooth LMS overview](https://smoothhiring.com/help/lms/getting-started/overview)
- [Roles and permissions](https://smoothhiring.com/help/lms/getting-started/roles-and-permissions)
- [Create a course](https://smoothhiring.com/help/lms/courses/create-a-course)
- [Cohorts overview](https://smoothhiring.com/help/lms/cohorts/overview)

---

## HRMS integration

Employees access training through the portal tied to [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) `user_id`. Onboarding uses the portal for learning tasks while HR tasks live in [Employee Onboarding](https://smoothhiring.com/help/hrms/onboarding/overview). Store signed policy PDFs in [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) when LMS completion alone is insufficient for auditors.

## Security boundaries

Treat `/desk/learning` as privileged operations territory. Employees should bookmark `/lms/courses` only. VPN or SSO policies apply uniformly—LMS does not bypass HR authentication. Guest access (`allow_guest_access` in LMS Settings) should remain disabled on private HRMS tenants. SCORM packages execute HTML/JS from uploaded zips—only trusted authors should upload vendor content.

## 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_

---

## Smooth HR (HRMS)

| Guide | Link |
|-------|------|
| HR help home | [smoothhiring.com/help/hrms](https://smoothhiring.com/help/hrms) |
| Employee records | [hrms/people/employee-records](https://smoothhiring.com/help/hrms/people/employee-records) |
| Onboarding overview | [hrms/onboarding/overview](https://smoothhiring.com/help/hrms/onboarding/overview) |
| Onboarding templates | [hrms/onboarding/onboarding-templates](https://smoothhiring.com/help/hrms/onboarding/onboarding-templates) |
| Employee onboarding | [hrms/onboarding/employee-onboarding](https://smoothhiring.com/help/hrms/onboarding/employee-onboarding) |
| Documents & compliance | [hrms/documents-compliance/overview](https://smoothhiring.com/help/hrms/documents-compliance/overview) |
| Employee compliance | [hrms/documents-compliance/employee-compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) |
| Signature templates | [hrms/documents-compliance/signature-templates](https://smoothhiring.com/help/hrms/documents-compliance/signature-templates) |
