MastriaDocs

Progress & tracking

Reading is public; progress is personal. The moment a learner signs in, their journey through your courses is tracked — every lesson start and completion, rolled up per course. (Per-account rollups and the impact reports below build on this data.)

What learners see

  • A course player, not bare pages — every lesson keeps the whole course in view: an outline beside the content (a collapsible drawer on phones) with per-lesson checkmarks, the current lesson highlighted, labs marked, a progress bar on top, and "Lesson 4 of 12" in the header. ← / → keys walk between lessons.
  • One button to finishComplete and continue marks the lesson done and lands on the next one in a single click (and can be undone). Lessons with labs complete themselves the moment every exercise passes — a passing check against real state is the most honest completion signal there is. What never counts: a page merely loading or a video merely playing. Honest signals beat vanity metrics.
  • Resume that follows the learner — "Continue course" reopens the lesson they most recently worked in, even if they skipped ahead; nobody is ever sent backwards to an earlier gap. Course cards carry each course's progress bar (or "✓ Completed"), and the academy home leads with a Continue-learning shortcut straight into that lesson.
  • Path progress comes free — a learning path shows "2 of 4 courses completed" on its card and page, derived live from the member courses' own progress (nothing separate to enroll in or get out of sync), and its Continue button always targets the first not-yet-completed course in the path's order.
  • A finish line — completing the last lesson lands on a completion card: the certificate (when the course grants one; an assessed certificate still short of clean lab passes shows "X of Y exercises passed" instead) and the author's recommended next course as "Continue with …".
  • Work that survives — code typed into a lab persists across leaving and returning to the page, and every checked attempt is saved server-side.
  • A profile that holds the records — the avatar menu's My profile page gathers everything a learner has earned in one place: every certificate (no remembering which course granted what), a learning record of all started and completed courses, and a display name that renders on their certificates in place of their email address. Courses you've since retired or deleted stay in the record — marked "no longer available" instead of vanishing from a learner's history. A Training history view turns the record into a printable transcript — courses, completion status, dates, and certificate verification URLs — for the learner who needs to hand a manager (or an auditor) the record. The profile is also where a learner adds a recovery email — a confirmed second address that signs into the same account, promotable to the primary in one click — so none of the above is ever lost with a work inbox (see Accounts & learners for the full leaving-the-company story).

What's recorded

Two events per lesson, both timestamped:

  • Started — the learner opened the lesson.
  • Completed — the learner clicked Complete and continue, or every exercise of the lesson's labs passed (whichever comes first).

Started-but-never-completed is a deliberate part of the model: the gap between the two is where drop-off analysis lives.

Certificates

Finishing a certificate-enabled course earns a public, verifiable certificate — a Certificate of completion, or an Assessed certificate when every lab check also had to pass. The page, the issuance email, names, LinkedIn, and the admin ledger are all on Certificates.

Anonymous readers

Visitors who never sign in can read everything but leave no trail — by design. The sign-in prompt on each lesson ("track your progress") is the conversion point, and because signing in is a magic link, the friction is one email.

Where this shows up

Progress data feeds the impact reporting built into the admin area:

  • Per-lesson funnels (Admin → Analytics) — where learners drop off inside a course, plus per-exercise lab difficulty: which checks fail most, named by their authored fail messages.
  • Account views (Admin → Accounts) — each customer's progress by course ("8 of 12 who started have completed"), learners active in the last 30 days, their roster and private-course access: the "how is Acme's onboarding going?" screen for your customer-success motion. Admin → Learners holds everyone — Individuals included — with each person's learning record.
  • Trained vs. untrained (Admin → Analytics → Impact) — send your product's own metrics (via webhook or CSV, keyed by learner email) and compare: "learners who completed the onboarding course activated at twice the rate of those who didn't."

Completion data also flows outward: signed webhooks push lesson.completed / course.completed / certificate.issued events into your own stack, and learners, certificates, funnels, metric events, and course waitlists export as CSV. The tracking has been on since day one — every learner journey is already in these reports.

Learning paths in the record

Every learning path a learner has touched — any member course started — appears on their profile, in the printable training history, and on the admin learner page, with the path's derived progress ("1 of 4 courses completed", lesson-weighted bar) and its certificate once held. Nothing is enrolled: the record is computed from the member courses' own progress, so it can't drift, and a course restricted away since still counts as walked (records are history). Admin → Analytics shows each path's funnel: learners who started it, who finished every course, and how far the starters got at each step.