New Course Form
Screen Flow (from flow.puml):
📝 Spec notes — UC-CCM.01 / SCR-CCM.03 (fields, actions, requirements)
Identity
- Screen: SCR-CCM.03 — New Course Form
- Use case: UC-CCM.01 — Author Course Content
Brief description
Simple course setup page — opened when the instructor clicks "Add Course" from the Author Workspace. Shows only the Course Settings form (no lesson structure, no tabs). After Save → creates a new course (with a default main branch), registers the instructor as owner, and redirects to the Content Editor with "Course Content" tab active. Cancel → returns to Author Workspace without creating any data.
Fields
title"Course title" — text · required · min_length 1, max_length 255 · alwaystags"Tags" — autocomplete_multiselect · optional · options limited to non-financial tag groups · alwaysdescription"Description" — textarea · optional · max_length 2000 · alwaysobjectives"Objectives" — textarea · optional · max_length 2000 · alwayshas_forum"Include forum" — boolean · optional · default unchecked · alwaysduration"Duration (minutes)" — number · optional · min 1 · alwaysdifficulty"Difficulty level" — enum [beginner, intermediate, advanced, expert] · optional · alwaysage_rating"Age restriction" — text · optional · alwaysprerequisite_courses"Prerequisites" — autocomplete_multiselect · optional · 0 or more published courses excluding self · alwaysthumbnail_ref"Course thumbnail" — file · optional · alwaysgrading_description"Grading description" — textarea · optional · max_length 1000 · always
Actions
save"Save" — always · triggers UC-CCM.01-M-3 · creates course, opens Content Editorcancel"Cancel" — always · triggers UC-CCM.01-A-2A-1 · returns to Author Workspace, no data created
Additional requirements
- Only authenticated instructors may access this page.
- Client-side validation on title (required); server-side re-validates all fields; on success atomically creates Course + default Branch + Author(owner) in one transaction.
- Thumbnail field has 2 states: Empty (Choose file / drag-drop) and Has-image (preview + Change + Delete buttons); validated client-side on select, re-validated server-side on save; on failure the error shows below the field and the existing image (if any) is preserved.
- WCAG accessibility (NFR-09) — keyboard navigable, labels associated with inputs, logical focus order.