Back to blog
Engineering · 8 May 2026 · 5 min read

Authoring Courses, Serving SCORM Without the Cloud Tax

Most platforms rent their SCORM runtime from a US cloud and charge per launch. We author and serve courses inside our own schema, on Melbourne metal, with no per-play toll.

Caitlin O'Flynn
Caitlin O'Flynn
UI/UX Designer & Media

There’s a quiet line item buried in a lot of compliance LMS contracts: the SCORM launch fee. Many suites don’t actually run your interactive courseware themselves. They hand each launch off to an external SCORM-Cloud runtime, the package gets uploaded to someone else’s bucket in someone else’s jurisdiction, and you pay a small toll every time a depot worker presses play on a manual-handling module. Multiply that by ten thousand staff across seventy-nine councils and the toll stops being small.

We didn’t want a toll, and we didn’t want the data leaving the country. So the authoring and delivery engine lives where the rest of the platform lives: inside our own schema, on our own object storage, in Melbourne. The LMS isn’t a module bolted onto compliance. It’s the same system.

Authoring: blocks, not a black box

The course editor is built on Tiptap v2 as a block-structured document. An author assembles a course from typed blocks — text, video, image, document, quiz, branching, and SCORM — and each block is a first-class row, not an opaque blob of HTML we can’t reason about. A branching block routes a learner down different paths based on an answer. A document block pins a controlled procedure straight into the lesson. A SCORM block hosts a vendor package where you genuinely need one.

Because the blocks are structured, the rest of the platform can read them. A document block isn’t a hyperlink someone pasted; it’s a real linkage. That’s what makes the bidirectional Document Control edge work: controlled documents embed into a course as linked resources, and Document Control reads that linkage back, so a procedure under revision knows which courses teach it. The structure isn’t a nicety. It’s the thing that lets learning and operations share a single source of truth.

SCORM: served from our own cookieless sandbox

For SCORM 1.2 and 2004 we run the package ourselves, using the open-source scorm-again runtime served from a dedicated cookieless sandbox subdomain. Origin isolation keeps untrusted vendor JavaScript away from session cookies and the rest of the app; the runtime brokers the CMI data model — completion status, score, suspend data — back into our own tables. No external launch service sits in the path, which means no per-play fee and no learner-progress telemetry taking a detour through a foreign cloud.

The honest market contrast: most platforms connect learning to operations through SCORM export and an outsourced playback service, then reconcile the results later. We kept the runtime in-house and AU-sovereign on purpose. It’s more engineering up front, and it’s the reason a completion can do something the moment it lands.

Video: H.264 and HLS on Melbourne metal

Author-uploaded video is transcoded to H.264 and packaged as HLS for adaptive playback, then stored on our self-hosted Minio object storage in Melbourne — the same data-sovereignty posture described in building for Australian data sovereignty. A grader watching a forklift assessment clip on a regional depot’s patchy 4G gets a stream that steps down gracefully instead of buffering. The bytes never leave the jurisdiction, and there’s no third-party video CDN invoice scaling with every view.

Versioning and the accessibility gate

Courses change, and a learner who completed version 3 of an induction must not be silently retconned into version 5. We use copy-on-write versioning: editing a published course forks a new immutable version while the prior one stays intact for everyone who already sat it. Completion records point at the exact version that was studied, which matters when an auditor asks what, precisely, a worker was taught in March.

Publishing is gated, not just permitted. The author-to-publish path runs a WCAG 2.2 AA accessibility check — alt text, contrast, heading structure, captions — and a course that fails the gate doesn’t ship. Accessibility for a government buyer isn’t a polish pass; it’s a procurement condition, so we enforce it at the moment of publish rather than discovering it in a complaint.

Why in-house delivery earns its keep

The payoff isn’t just a cheaper bill. Because completion is captured in our own tables, finishing a mapped course writes a record into employee_courses and triggers a council compliance recalculation — the score moves on its own, with no nightly reconciliation job. That same completion materialises into a skills record the gap view diffs against each position’s required competencies. Mandatory rules authored at the peak-body level cascade down and auto-enrol matching cohorts by position. And a high-risk-work licence minted from an LMS-verified competency is enforced at the PPE pre-start gate under OHS Regs reg 129 — an uncertified operator is simply blocked from the plant. Author a course once and a super-tenant can distribute it to many councils with tenant-isolated cross-council reads and copyright-licence modes intact.

None of that is possible if your runtime lives in someone else’s cloud and reports back on a delay. The cloud tax isn’t only a fee — it’s the latency between finishing the training and the system acting on it.

For the architectural spine, see the LMS that lives in your compliance schema. For where these completions land, read proving someone actually did the training and when finishing a course changes what’s allowed on site. For the broader pattern of one platform rather than a federation of products, see one platform, sold in pieces.

lms authoring scorm video data-sovereignty

Ready to see Lattice Look in action?

Five minutes to sign up. Free onboarding.