v2.0
Gutenberg v2.0 is a substantial rewrite: Events are no longer the only teaching model. This release adds courses as a separate self-paced model while keeping events for scheduled cohort delivery.
See What’s New in Gutenberg v2.0 for an overview of what has changed in 2.0.
New in 2.0
- Added self-paced courses as a new teaching model alongside events.
- Added new course database tables and API routes.
- Added a new EventSwitcher component, improving on the previous dropdown and making it reusable for courses as well as events.
- Added a
/coursesarea for browsing all courses, including admin handling for hidden courses. - Added a curated default course catalog based on current material.
- Added course detail pages with enrolment-aware views, progress, tags, languages, breadcrumbs, and front-page course surfaces.
- Added grouped one-page course editing and improved JSON import guidance around grouped material.
- Added course import and export as JSON.
- Added course enrolment, unenrolment, completion, and better progress handling.
- Added course sorting and filtering by search, level, tags, and languages.
- Added active course selection, enrolment-aware course actions, and better course surfaces on the home page and course list.
- Added a Start button to front-page course cards for quicker access to new courses.
- Added active course state in local storage and course switching alongside events.
- Added course-aware sidebar views and material-page hints when a section belongs to a course.
- Added batched course progress fetching for list-style views.
- Added default-course sync with review of unchanged, new, and changed courses.
- Added Course-aware previous/next material navigation and return-to-course behavior.
- Added Material-page course hints and course-aware actions.
- Added admin stats pages for courses and events, including overview and per-event/course progress summaries.
- Added Event creation from a course blueprint.
- Added Individual Event Breadcrumbing.
- Added Course views to the profile page
Fixed in 2.0
- Event-group material editing moved into the main event edit page so groups and material can be managed inline.
- Event authoring made more consistent with the grouped course model.
- Active learning context for courses and events.
- Sidebar behavior improved so course and event context is surfaced more consistently while navigating.
- Seed data was replaced with more realistic course content.
- Course APIs, slug handling, and add-course error handling were tightened up.
- Course access, enrolment, sync, export, filter, and progress test coverage was expanded substantially.
- Accessibility fixes landed across the new course and event UI, including component roles and related interaction tests.
- The docs were rewritten to represent the new course model.
- Local setup documentation improved for databases, seeds, and material checkout.
- Fixed TOC title from floating over the rest of the layout.
- Improved presentation of the event table on profile view.
- Fixed icon alignment on event and course active-action buttons.
- Fixed copy-to-clipboard design to avoid nested-button hydration errors on Headings/CodeBlocks.
- Fixed progress fetches on material to returning an empty success response when no saved problem state exists, instead of a 404.
v1.2
New in 1.2
- Added dynamic internal links #329
- Added support for relative links in markdown #347
- Improved the table of contents and previous/next links on small devices #343
- Added unique page titles #358
- Adopted Flowbite CSS to improve page loads #361
- Added enrolment buttons to the event page #363
- Added active event selection and toggle actions to the sidebar #364
- Added problem view and submission modals #390
- Improved cron runs with startup execution and status reporting #393
- Added event filtering in the event timeline #396
- Added Oxford SSO as an OAuth provider #431
- Added navigation to the new event after creation #415
- Added anchor links to the event page #438
- Added more logos to the breadcrumb, sidebar, and main page #440
- Added README visits badge #452
- Added event page navigation #459
Fixed in 1.2
- Fixed recursive Prisma typing so
tscpasses cleanly #336 - Fixed download links being detected as domain names #349
- Fixed home page heading structure for accessibility #360
- Pre-rendered event times for WAVE accessibility checks #359
- Fixed event timeline buttons for accessibility #362
- Adjusted relative URL handling for diagram mode and cleaned up link handling #354
- Added built-site link checking in CI and made broken-link parsing more robust #352, #365, #381
- Preserved event group ids on edit #377
- Saved
UserOnEventstatuses on event edit #380 - Fixed broken solution ids #388
- Updated the search system to comply with OpenAI changes #392
- Moved
mat.jsonto a temporary path #394 - Hid login text when a session is active #398
- Stopped older events being hidden when an active filter is applied #399
- Changed enrolment key checking to use a new API route #401
- Fixed the user account menu for accessibility #404
- Used client-side routing from the sidebar and content pages #410
- Cleaned up
TableOfContentsaccessibility #412 - Removed
NEXT_PUBLIC_MATERIAL_URLenvironment variable #417 - Cached material data to improve build speed #418
- Reworked string similarity and reverted the first replacement attempt #422, #449, #450
- Updated dependencies and documentation gems, including Next.js, NextAuth,
@babel/runtime,nokogiri,rexml,js-yaml,mdast-util-to-hast, andpreact#334, #330, #338, #366, #376, #368, #378, #384, #389, #405, #407, #423, #430, #444, #446, #451, #458 - Updated build and deploy workflows, moved Corepack earlier in deploy, and moved to standalone Next builds on Node 24 #427, #428, #436
- Improved comment thread accessibility and moved comment popovers to the popover API #429, #441
- Updated Docker workflow docs and cleaned up link excludes and dead SVG handling #432, #435
- Fixed text selections containing DOM nodes #443
- Handled null comment threads to prevent crashes #453
- Fixed security alerts, including the
qsupgrade #454, #457
v1.1
New in 1.1
- Updated the package ecosystem for Node 22 #298
Fixed in 1.1
- Ran DB migrations correctly in the Docker dev image #319
- Fixed Cypress async configuration #331
- Fixed the lockfile #335
v1.0
New in 1.0
- Added automatically generated, interactive table of contents on section pages #252
- Added completely new interactive comment table on events page #271
- Added delete account option #253
- Added redirect from old to new URL #248
- Made theme cards equal height #242
- Wrapped course grids in nav landmarks #241
- Added anchor links to all headings in a section #247
- Changed default material browsing to Grid #238
- Various mobile UI improvements #235
- Styling improvements on previous and next buttons #236
- Styling improvements on course outcomes #233
- Python script to fetch material #201
- Proxied Plausible to a local route (adblock reasons) #222
- Vastly improved adding and reordering materials in event group #221
- Added a user profile page #219
- Docker compose file for alternative deployments #215
- Skip to main content link for accessibility #207
- Accessible page header #205
- Page language attribute on HTML element #203
- Learning outcomes displayed at the top of sections #202
- Accessible names for navigation and theme toggle #200
- E2E tests for create/delete events and paragraph component tests #112
- Nullable enrollment key #101
- Plausible analytics tracking #175
- HTML template for title #174
- Previous/next navigation links in sections #162
- Mouse over navigation in navbar #166
- Automatic hiding of older events #157
- New callout styles #156
- Docs added #115
- Quality workflow #129
- Ability to create comment threads on list items #139
- Duplicate existing events #144
- Event timeline delete button #106
- Autofocus on textareas when writing or editing comments #109
- Enrolment via secret key #90
- Edit source button linking to material in GitHub repo #49
- Tags when choosing items from event group #52
- Top-level material reorganization to cards instead of React Flow #47
Fixed in 1.0
- Fixed various Next.js hydration errors #254
- Fixed broken CSS on system default light mode and background colors in
_document.tsx#267 - Code headings padding issue #249
- Navigation accessibility issues #211
- API search page #225
- Semantic HTML headings #196
- Avatar tooltips on events problems table with lazy loading #102
- Enrollment key bug #153
- Corepack deploy #147
- Reply button disable when editing a comment #135
- URL fixes for multi-repo switch #136
- Material UI datepicker swap #134
- LocalStorage swap for active event state #108
- Prevent problems with same tag from conflicting on completion #107
- Build errors due to yarn.lock issues #99
- Only return
useroneventsfor selected event #96 - Thread with no comments issue #85
- Event page tick marks #80
useEffectproblems in dependency arrays #71select eventbutton appearing over sidebar #72- Cypress errors from ResizeObserver #68
- Build speed improvements in Docker #68
- Remove active event from storage when unset #46
- Copyright always up to date #150
- Padding changes for markdown rendering #133
- Instructor view to show all students in sidebar #105
- Performance improvements on events problems table #98