DigitalWonderlab.LearningHub
0.12.0-beta.3
dotnet add package DigitalWonderlab.LearningHub --version 0.12.0-beta.3
NuGet\Install-Package DigitalWonderlab.LearningHub -Version 0.12.0-beta.3
<PackageReference Include="DigitalWonderlab.LearningHub" Version="0.12.0-beta.3" />
<PackageVersion Include="DigitalWonderlab.LearningHub" Version="0.12.0-beta.3" />
<PackageReference Include="DigitalWonderlab.LearningHub" />
paket add DigitalWonderlab.LearningHub --version 0.12.0-beta.3
#r "nuget: DigitalWonderlab.LearningHub, 0.12.0-beta.3"
#:package DigitalWonderlab.LearningHub@0.12.0-beta.3
#addin nuget:?package=DigitalWonderlab.LearningHub&version=0.12.0-beta.3&prerelease
#tool nuget:?package=DigitalWonderlab.LearningHub&version=0.12.0-beta.3&prerelease
Digital Wonderlab LearningHub
An Umbraco-native e-learning / LMS package. Author courses in the backoffice, deliver them to Members on the front-end, track progress and assessments, issue certificates, and (optionally) sell course access with Stripe — all inside a standard Umbraco site, with no separate app to run.
Courses, modules, lessons and assessments are first-class Umbraco content. Enrolment, progress, assessment attempts and certificates are stored in the package's own transactional tables. The whole front-end re-skins from two brand colours, so a non-designer can make it look like their site in seconds.
📋 For a plain-English, brochure-style rundown of everything LearningHub does, see
docs/FEATURES.md.
Features
- Courses as content — a
Learning Catalogue → Course → Module → Lesson / Assessmenthierarchy, authored in the standard Content tree with full versioning and publishing. - Rich lessons — seven content block types: rich text, video (YouTube, Vimeo, or a self-hosted file uploaded to the site), image gallery, download, embed, callout and inline knowledge-check.
- Nine assessment question types — single choice, multiple choice, true/false, ordering, matching, categorise, short text, numeric and image hotspot. Ordering, matching and categorise are drag-and-drop as progressive enhancement over native controls, so they still work with JavaScript disabled. Scoring is server-side.
- Progress tracking — per-lesson completion, percentage complete, and "resume where you left off".
- Certificates — print-perfect A4-landscape completion certificates, brand-driven, issued automatically on course completion.
- Two-colour branding — the entire design system (surfaces, borders, shadows, gradients, dark
mode) derives from a primary + accent colour via CSS
color-mix(). Optional logo, dark mode, and "inherit host layout" so learning pages can render inside your own site chrome. - Enrolment & access — being a Member is not the same as having access; a single
CanAccesscheck gates delivery. Self-enrolment (per-course toggle) and self-registration are built in. - B2B onboarding — a
Learnermember type (organisation + job role), CSV bulk import with invitation emails, and a per-course Learners view in the backoffice. - Payments (optional) — pluggable payment providers, Stripe first. Hosted Stripe Checkout; access is granted only by the verified webhook, never the browser redirect. Refunds withdraw access automatically. Secrets live in configuration/user-secrets, never in content.
- Guided installer — a dedicated eLearning backoffice section with a one-click Setup dashboard, an Overview dashboard, and a Bulk Import dashboard.
Requirements
- Umbraco CMS 17.x
- .NET 10
Installation
dotnet add package DigitalWonderlab.LearningHub
The package auto-wires itself through an Umbraco composer — no Program.cs changes required.
- Add the package and start the site. On boot, the package creates its transactional tables
(
lhEnrolment,lhLessonProgress,lhAssessmentAttempt,lhAttemptAnswer,lhCertificate). The migration is idempotent and safe to run repeatedly. - Open the backoffice and go to the eLearning section → Setup → Install. This creates
the document types, data types, templates, the
Learnermember type and a starter catalogue. The installer is idempotent — re-running it repairs/upgrades and never deletes. - Browse the front-end at
/to see your catalogue.
The eLearning section is granted to the Administrators group on install. Custom sections are hidden until granted and the backoffice needs a hard refresh to reveal a new section.
Authoring a course
Under Content → Learning (the catalogue), create a Course, add Modules, and inside each module add Lessons (built from content blocks) and Assessments (built from Question blocks, each with Answer Options). Set the course pass mark, certificate toggle and — if you want learners to enrol themselves — the Allow self-enrolment toggle. Publish to make it live.
Branding
Open Content → Learning → Learning Settings and set the primary and accent colours (plus an
optional logo and dark-mode toggle), then Publish. The entire front-end re-skins from those two
values. Toggle Inherit host layout to render learning pages inside your site's own
Views/_Layout.cshtml instead of the standalone LearningHub chrome.
Learners & onboarding
Learners are Umbraco Members of the Learner type. There are two onboarding paths:
- Self-service — enable self-registration / self-enrolment; learners sign up and enrol themselves.
- B2B bulk (admin onboards staff) — the eLearning → Bulk import dashboard imports a CSV
(
email, name, organisation, jobRole, course), creating members and enrolling them, and — if SMTP is configured — sending invitation emails with a temporary password. Import is non-destructive: existing members are matched by email, never recreated. A sample CSV is indocs/sample-import-learners.csv.
Each course has a Learners workspace view in the backoffice showing everyone enrolled, their enrolment date, best score and progress.
Payments (optional)
LearningHub ships a pluggable payment seam with a Stripe provider (hosted Checkout). It is off by default and requires no configuration if you only run free courses.
Configure under the LearningHub:Payments section. Never put secret keys in appsettings.json or in
content — use user-secrets, environment variables or a key vault:
// appsettings.json — non-secret values only
{
"LearningHub": {
"Payments": {
"Enabled": true,
"Provider": "stripe",
"NotificationEmail": "owner@example.com" // owner "new purchase" alerts; blank = SMTP From
}
}
}
# secrets — user-secrets / environment, NEVER committed
dotnet user-secrets set "LearningHub:Payments:Stripe:SecretKey" "sk_live_…"
dotnet user-secrets set "LearningHub:Payments:Stripe:WebhookSecret" "whsec_…"
Register a Stripe webhook endpoint pointing at:
POST /learning-hub/payments/stripe/webhook
Payments are only offered when a secret key is configured and payments are enabled (via the config
flag or the backoffice Learning Settings toggle). Hosted Checkout needs only the Secret key and
Webhook secret. Access is granted solely by the signature-verified webhook; a charge.refunded
event withdraws access automatically.
Good to know
- Removing a learner's access: withdraw their enrolment rather than deleting the Member. Deleting a Member leaves orphaned enrolment rows (handled gracefully, but untidy).
- Password reset uses Umbraco's built-in Members flow; LearningHub does not replace it.
- Email (invitations, purchase/refund notifications) requires Umbraco SMTP to be configured. Without it, sends are skipped and logged — imports and payments still complete.
License
MIT © Digital Wonderlab
Part of the DigitalWonderlab.* family of Umbraco packages. Built by
Digital Wonderlab.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Stripe.net (>= 52.3.0)
- Umbraco.Cms.Api.Management (>= 17.2.1)
- Umbraco.Cms.Web.Common (>= 17.2.1)
- Umbraco.Cms.Web.Website (>= 17.2.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|
0.11.0-beta.3 — private pre-release for first-client pilot (not for public Marketplace; all umbraco* tags stripped). Installer no longer aborts when a host site already owns a doc-type alias (e.g. contentPage). Course content model, nine assessment question types, progress tracking, certificates, two-colour brandable UI + brand font, CSV learner onboarding, lifecycle emails, SCORM 1.2 import/consume, and optional Stripe payments. See CHANGELOG.md.