Primary types
- slides β Presentation with rich elements (heading, paragraph, image, list, code, callout). Speaker notes. Fullscreen viewer with keyboard navigation.
- video β youtube/vimeo/upload sources. Auto-transcription via Whisper when mediaAssetId.
- pdf_viewer β react-pdf, navigation, zoom, full text search.
- rich_text β Tiptap editor with extensions (tables, code blocks, images, links, math). HTML sanitized server-side.
- quiz β 8+ question types, full configuration (maxAttempts, timeLimit, shuffle, etc).
- assignment β Instructions, dueDate, maxScore, submissionType (text/file/both), rubricId. Submissions in private bucket.
- live_class β References LiveClass entity (BBB/Zoom/Teams/Meet).
- external_link β URL with description, openInNewTab.
Interactive subtypes
When lesson.subtype !== null:
- interactive_video β Video with checkpoints (mandatory questions before continuing)
- drag_drop β Items to drag to targets
- fill_blanks β Text with placeholders, accepted answers
- flashcard_set β Cards with SRS SM-2 spaced repetition
- timeline β Interactive timeline with zoom
- branching_scenario β Decision tree for simulations (clinical case, ethical dilemma, negotiation)
Editors (Lesson Builder)
Each type has dedicated visual editor in components/lesson-builder/. Subtypes in components/interactive/.
Limitations
- Quiz essay without native auto-correction β admin can enable LLM grading (additional cost)
- Interactive subtypes don't migrate to H5P β Studeia proprietary format
- Branching_scenario max depth 10 levels β anti-infinite loop