DocsInstructor Guide

Publishing Workflow

How courses move from draft to archive, and what each state means

Every course in OptiLearn moves through four states in a one-way flow:

DRAFT → REVIEW → PUBLISHED → ARCHIVED

The course overview page shows exactly one action button per state — the next step in the flow. There's no rewind button, so pay attention before clicking.

Current stateAction buttonMoves to
DRAFTSubmit for ReviewREVIEW
REVIEWPublishPUBLISHED
PUBLISHEDArchiveARCHIVED
ARCHIVED(no button)

What Each State Means

Draft

The starting state. The course is invisible to students — it won't appear in the catalogue, search, or any student-facing list. Instructors can edit the title, description, curriculum, and every lesson without affecting anyone.

Use this for active building.

Review

An intermediate state between draft and published. The course is still invisible to students. The intent is to give your team a chance to look over the course before it goes live.

Note

There is no separate reviewer role. Anyone with course-management permissions can publish a course in REVIEW — there's no approval gate. Treat REVIEW as a status label, not an enforced workflow.

Published

The course is live. It appears in the catalogue, in global search results, and can be enrolled in by students. Existing draft content becomes student-visible.

The first time a course reaches PUBLISHED, OptiLearn stamps a publishedAt timestamp. Re-publishing an archived course later preserves the original publish date.

Archived

The course is hidden from discovery — it won't appear in the catalogue or search. But:

  • Existing enrollments continue to work. Students who were already enrolled keep their access and progress.
  • Course data is preserved. Nothing is deleted; you can see and analyze it from the instructor dashboard.
  • An archivedAt timestamp is set.

Archiving is a soft hide, not a delete.

Publishing Requirements

When you click Publish (moving from REVIEW to PUBLISHED), OptiLearn validates two things:

Course has a title and description

Both fields must be set. If either is blank, the publish is rejected with a validation error.

Course has at least one module

The module count must be greater than zero. An empty course can't go live.

That's it. Notably, OptiLearn does not check:

  • Whether modules contain any lessons
  • Whether lessons are published
  • Whether quizzes have questions
  • Whether assignments have instructions

So a course with a single empty module will pass validation. The practical consequence: it's your job to make sure the course is actually usable before clicking Publish. Walk through the curriculum view one last time.

Who Can Publish

Only users with course-management permissions (staff/instructors) can trigger any state change. Students and contact-type users cannot see the publish button at all.

Every transition also enforces institution isolation — you can never affect a course belonging to a different institution.

Side Effects of Each Transition

On PUBLISHED

  • statusPUBLISHED
  • publishedAt → current time (only if previously null)
  • updatedById → your user id
  • Course becomes visible in catalogue and search
  • archivedAt → cleared

On ARCHIVED

  • statusARCHIVED
  • archivedAt → current time
  • updatedById → your user id
  • Course disappears from catalogue and search
  • Existing enrollments are not touched

On REVIEW

  • Just a status flip plus updatedById. No timestamps, no notifications.

What Doesn't Happen on Publish

A few things people often expect but that this workflow does not do:

  • No email to anyone. Enrolled students, other instructors, and admins get no notification when a course is published, archived, or changes state.
  • No version snapshot. Publishing doesn't automatically create a CourseVersion entry. If you want versioning, trigger it explicitly.
  • No lesson cascade. Publishing a course doesn't auto-publish its lessons. Lessons are independently marked isPublished.

Unarchiving

There's no dedicated "Unarchive" button. To bring an archived course back, use the API directly — POST /api/courses/[id]/publish accepts any of the four statuses. Sending { "status": "PUBLISHED" } on an archived course will reinstate it (subject to the same title/description/module validation). The preserved publishedAt timestamp means it'll show the original go-live date, not today.

Warning

Going from ARCHIVED back to PUBLISHED via the API revives the course exactly as it was. Existing enrollments are already unaffected by archiving, so they don't need restoration.

Tips

  • Treat REVIEW as a checklist trigger. Since there's no enforcement, use the state change as your personal reminder to walk the curriculum end-to-end.
  • Archive instead of delete. OptiLearn doesn't expose a delete button on the overview page. Archive is the right tool for retiring content — it preserves the analytics history.
  • Export before major edits. If you're about to overhaul a published course, export it first (see Course Import / Export). The export is a portable backup.
  • Publish early, revise often. Because there's no automatic email, re-publishing small edits is cheap — the "publish" click is silent for enrolled students.