Courses & curriculum
Nothing ships until somebody says so
Academics & Content
Upload, chapters, captions and signed-URL playback over a storage port that speaks local disk, S3-compatible or Azure Blob.
media · 14 API routes
Signed URLs, so a link that leaks stops working.
Authored per asset; captions are a first-class record, not a sidecar file.
local-disk, s3 (covering MinIO and R2) and azure-blob, chosen by an environment variable.
How it actually works
No feature module imports a cloud SDK. Storage is an interface with three implementations, selected at boot — which makes “move your data” a connection-string change rather than a project. Mail, search, AI and cache have the same shape.
A sample. Each is a real key in the catalogue, described for a school administrator rather than an engineer.
content.media.uploadcontent.media.viewcontent.caption.manageThe shipped role templates that hold it by default. Each is a copy you own and can edit — nothing in the code reads a role's name.
Naming these here is cheaper for both of us than discovering them in week six of a pilot.
Naming these is cheaper for both of us than discovering them in week six.
Nothing ships until somebody says so
Built for a bad connection
A hundred seats, twenty-five courses and no conversation. If you would rather see it driven by someone who knows it, that takes twenty minutes.
Or open the sandbox (opens in a new tab) and click around first. No form.