Courses, lessons & video
A course is a container — title, description, cover image, and an ordered list of lessons — created and edited under Courses (/dashboard/courses) in the dashboard. Each lesson carries an uploaded video, optional written notes, and an optional comprehension quiz.
Creating a course
A new course starts in draft — visible only to you, never in the public catalog. Add lessons in whatever order you like (reorder anytime; lessons render to subscribers in that order), each one created lessons-first if you want to write the outline before recording anything — a lesson's video can be attached later.
Uploading lesson video
Attaching video to a lesson is a three-step, upload-directly-to-storage flow, not a single form post:
- MailInApp mints a
videoAssetsdoc plus a short-lived signed upload URL, after checking the upload wouldn't exceed your plan's video storage cap. - The browser uploads the raw file bytes straight to that signed URL — the file never passes through a MailInApp server.
- Once the upload completes, a finalize call kicks off transcoding: a Transcoder API job converts the upload into a private HLS rendition plus a poster frame, and the asset's status moves
uploading→processing→ready(orfailed, with a short human-readable reason shown back to you). The course editor polls and shows whichever state the asset is currently in — there's nothing to babysit, but a large file can take a few minutes to finish processing before it's watchable.
Video is stored and served privately — never a public URL you could paste elsewhere. Playback is only ever granted through a per-request entitlement check (see Member portal & subscription billing), not a link that works for anyone who has it.
Free previews
Turn on Free preview for any lesson (typically lesson 1) to let it play for anyone who reaches your portal, subscribed or not — the obvious "give people a taste before they pay" lever. Every other lesson requires an active subscription.
Lesson comprehension checks
Attach a short quiz to a lesson — a pass threshold plus a set of questions, each with its own options and correct answer, checked server-side the same way the studio's Quiz block is. It's a separate, portal-only implementation (a lesson has no campaign to attach an emailed quiz block to), but the scoring model — exact-answer matching against a pass score — is the same one you already know from the Quiz block if you've used it in a campaign.
Watch progress
As a subscriber watches, their position is saved every ~15 seconds and again the moment a lesson finishes, so returning to a lesson resumes where they left off. A lesson marked complete stays complete even if they rewatch an earlier part of it. You see rollup completion counts per lesson on the course detail page — a plain "how many subscribers have finished this" number, the portal's version of the per-question rollups you already get on a survey's Responses dashboard.
Publishing & the community review step
A course stays in draft until you submit it for review, at which point it moves to pending — a manual admin review queue, the same "a human looks at it before it goes live" shape as the public template gallery's own pending status. Once approved it becomes published and appears in your portal's catalog; if it's bounced back, you'll see a short rejected reason and can resubmit after fixing whatever was flagged. You can only ever request draft or submit-for-review yourself — nothing you do flips a course straight to published or rejected.
Notifying subscribers of a new lesson
Publishing a lesson doesn't automatically email anyone — a Notify subscribers button on the course detail page is a deliberate, opt-in send, so dropping five lessons at once doesn't fan out five separate emails. It reaches every currently-entitled subscriber through the same lifecycle-email path as your welcome/cancellation notices, not the studio's campaign pipeline — this is a plain transactional-style notice, not a project render.