Skip to content

Courses#460

Open
alasdairwilson wants to merge 100 commits intomainfrom
courses-revamp
Open

Courses#460
alasdairwilson wants to merge 100 commits intomainfrom
courses-revamp

Conversation

@alasdairwilson
Copy link
Copy Markdown
Member

@alasdairwilson alasdairwilson commented Jan 8, 2026

Summary

  • Added self-paced Courses as a new teaching model alongside instructor-led Events.
  • A new course db model and API routes for enrolment, unenrolment, completion, progress, import/export, and admin workflows.
  • admin only edit page, same as events but we also create some sort of simple info when the course is first created, unlike blank events
  • speaking of creating events: you can use a course as a blueprint for creating events, it turns all coursegroups into eventgroups so you just need to add dates/times
  • Added a /courses catalogue with search, level, tag, and language filters, plus sorting and admin handling for hidden courses.
  • Added course detail pages with grouped material, enrolment-aware actions, active-course selection, and progress tracking.
  • Added course-aware navigation across the app, including home-page course surfaces, sidebar context switching, material hints, and course previous/next links same as we have currently got event and material order dervied prev/next
  • Added a default course catalogue based on HPCu material, plus admin tooling to review and apply default courses into the database. This admin tooling is awesome btw, it presents you a diff of the changes and lets you optionally, per course, apply them.
  • Added Create event from course blueprints.
  • Reworked event editing onto the main event page with inline group/material editing.
  • Added admin stats pages for courses and events, with overview and per-item summaries for participation, completion, and progress.
  • Replaced placeholder course defaults and seed data with a real proof-of-concept catalogue and seeded progress.
  • Refreshed the docs for v2.0, including release notes, changelog updates, setup docs, and a first pass at a better docs theme.

I made some calls along the way that may have broader implications

  • Courses were added as a separate model rather than trying to stretch events into self-paced learning. Events remain for scheduled teaching; courses are for self-paced study.
  • renamed the existing Theme, Course, and Section material types to MaterialTheme, MaterialCourse, and MaterialSection to avoid a naming collision once app-level Course became a real concept.
  • The default-course sync flow was designed with a review/apply step, maybe defaults can diverge from manually edited data, so this stops local changes being overwritten
  • Default courses live in app config for now, even though the longer-term home should probably be the material repos. I;'ve opened issue Move course defaults into material repos and use repo-local section references #517 on this.
  • Event editing was moved onto the main event page instead of keeping separate group-edit navigation. The old interface was super awlward.
  • Stats are admin-only, its possible that summary stats could be exposed but I don't see the benefit. I can't wait to see the deployed sites stats.

In addition there is a single essential follow on:

Enrolment on events has not changed but it really needs to change to single-endpoint enrolment, eseentially all keys are uniquye (enrolKey and instructorKey) such that entering one of them will enrol you on the given event magically.

This necessitates, in my opinion, a new db model "enrolmentKey" which will have an enum of type STUDENT or INSTRUCTOR, and, importantly, the primary key is the enrolmentKey so we can enforce uniqueness. I'll write an issue.

@alasdairwilson alasdairwilson force-pushed the courses-revamp branch 2 times, most recently from ba77bb2 to 9e75479 Compare January 9, 2026 12:27
@alasdairwilson alasdairwilson marked this pull request as ready for review March 25, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant