Content hierarchy
Build in order
- Create the course.
- Add a module to the course.
- Add a lesson inside that module.
- Add units inside the lesson.
- Edit each unit’s content.
- Reorder each level to match the teaching sequence.
- Preview the course.
Unit content
Write for the learner who will see the unit without the editor around it. Use clear headings, short sections, useful examples, and an explicit completion goal.Rich documents, Markdown, and AI
Course notes and unit content have a rich-document field and an actively used Markdown compatibility field:
The rich document stores versioned Tiptap JSON and is preferred when displaying content. The Markdown field remains actively written for compatibility and as a fallback when a rich document has not yet been saved. Private course notes follow the same save and fallback flow as Course notes, but are staff-only: they are available in the editor and on the course detail page to non-students, and are omitted from student and enrollment views.
AI generates Markdown rather than Tiptap JSON. Full AI course/unit generation initially stores its generated text in the Markdown field. Opening that content in the rich editor converts it into a Tiptap document in the editor; that conversion is saved only when you save or update the course/unit. The standalone Generate notes, Generate private notes, Generate content, and Improve with AI actions show a preview. Applying the preview changes the editor but does not save the record; use the normal Save or Update action afterward.
Saving from the rich editor writes both representations: versioned JSON to the rich-document field and Markdown to the compatibility field. Updating an existing unit persists your edits even with AI mode enabled. Use Regenerate unit when you intend AI to replace the unit’s content. Regeneration clears the previous rich document so the new Markdown is shown until the editor saves it as a new rich document.

