Skip to main content

Learning Journey (Student)

The Learning Journey is the student app's video curriculum. It mirrors the school syllabus but adds sequencing (you must finish video 1 before video 2 unlocks), progress tracking (per-video watch %, per-chapter % complete) and an end-of-chapter chapter test that unlocks once every video in the chapter is finished.

The companion read-only surface is the Syllabus page, which exposes the same subject → chapter → module hierarchy as text content (no locking, no progress).

At a glance

Who can do thisStudents only — view and progress
Where it livesStudent app /dashboard/learning-journey/*
Triggers notifications?No — progress is silent. Chapter-test completion can trigger downstream notifications via Class Tests.
Related featuresChapter Tests · Syllabus · Coins & Credits

Status lifecycle (per video module)

Step-by-step

1. Subjects hub

  • App / route: /dashboard/learning-journey
  • Loads the student's subjects (via useSubjects — driven by the section's mapped subjects).
  • Renders one SubjectCard per subject with the subject's icon, brand color, name, and an overall % progress ring.
  • Tapping a card → /dashboard/learning-journey/:subjectsForSchoolClassId.

2. Subject detail (chapter list)

  • App / route: /dashboard/learning-journey/:subjectsForSchoolClassId
  • Lists every chapter mapped to that subject, in syllabus sequence.
  • Locking rule:
    • Chapter 1 is always unlocked.
    • Chapter N+1 is locked until Chapter N has any progress (the locking is at the chapter list, but stricter sequential locking happens at the module level).
  • Each chapter card shows progress %.
  • Tapping a chapter → /dashboard/learning-journey/:subjectsForSchoolClassId/:chapterId, with the chapter's junction id (chaptersForSchoolClassSubjectId) passed in route state.

3. Chapter detail (video module list)

  • App / route: /dashboard/learning-journey/:subjectsForSchoolClassId/:chapterId
  • Loads modules for the chapter (via getModuleProgressByChapter). Each module has:
    • Title
    • Duration (always shown as "1 hr" for Learning Journey; "Reading" in Syllabus mode)
    • Per-student progress: percentage, watchedDuration, isCompleted
  • Sequential locking is enforced here:
    • Module index 0 is unlocked.
    • Module N (N > 0) is locked until module N-1 isCompleted.
    • Locked modules show a "Complete video N first" hint.
  • Below the module list, a ChapterTestCard is rendered. See Chapter Tests for its full state machine.
  • Tapping a module → /dashboard/learning-journey/:subjectsForSchoolClassId/:chapterId/:videoId (prefixed video-, e.g. video-42).

4. Video player

  • App / route: /dashboard/learning-journey/:subjectsForSchoolClassId/:chapterId/:videoId
  • Embeds the Wistia player.
  • Progress is reported back periodically:
    • percentage — current watch %.
    • watchedDuration — seconds watched.
    • Max-progress wins: scrubbing back doesn't decrease saved progress; only forward progress counts.
  • A "Mark complete" button appears once the student is near the end (or always, depending on UX rules).
  • Marking complete:
    • Persists isCompleted: true for the module.
    • Unlocks the next module on the chapter detail page.
    • If this was the last module of the chapter, unlocks the Chapter Test (the ChapterTestCard re-evaluates eligibility on focus).

5. Returning to the chapter

  • Going back from the player auto-refreshes the chapter detail page (driven by location.key), so the student sees fresh progress and the next module unlocks immediately.

6. Subject-level progress

  • The subject card's overall progress is the rolled-up % across all chapters of that subject. So as videos complete, both the chapter % and the subject ring fill up.

7. Dashboard surfacing

  • The student dashboard's "Explore" section can deep-link directly to a Learning Journey chapter (driven by recommendations, doubts, or upcoming tests).

Syllabus vs Learning Journey

The two share routes by structure but differ in behaviour:

Learning Journey (/dashboard/learning-journey/*)Syllabus (/dashboard/syllabus/*)
Content typeVideos (Wistia player)Reading modules (text content via ModuleContentPage)
LockingSequential per moduleNone — anything can be opened
ProgressTracked per video, saved liveNot tracked the same way
End-of-chapter testYes — ChapterTestCardSame card surfaces, but flow is video-led
Module URL prefixvideo-{id}module-{id}

The same ChapterDetailPage and SubjectDetailPage components serve both routes; the path determines whether locking + the video player or the reading flow is used.

Edge cases & things to test

  • Sequential lock cheat: try to navigate directly to /dashboard/learning-journey/:subjectId/:chapterId/video-42 for a video that should be locked — page should reject or surface a "complete previous video first" state, not silently play.
  • Mark-complete immediately: student loads the player and immediately taps "Mark complete" before watching — should it block (require some watch %) or trust the tap?
  • Scrubbing forward: student scrubs to 95 % and exits — saved progress should be 95 %, not 100 % until they actually mark complete.
  • Scrubbing back: student watches 80 % then scrubs back to 10 % — saved progress must remain at 80 % (max-progress wins).
  • Re-opening a completed video: completed videos remain accessible; reopening should not reset progress.
  • Chapter unlock cascade: completing the last video of Chapter 1 should unlock Chapter 2 in the chapter list; verify with a refresh-less return navigation.
  • Chapter test gating: completing all videos must trigger the ChapterTestCard to flip from "Locked" to "Eligible" without a manual refresh.
  • Subject change mid-flow: student opens Math chapter 3, backs out, switches to Science — the previously visited chapter's progress must persist correctly.
  • Network drop during progress save: video plays offline (cached) and progress saves fail — does the next save replay the missed progress, or is it lost?
  • Empty subject: a subject with zero chapters mapped — list should render an empty state, not crash.
  • Empty chapter: a chapter with zero modules — what does the chapter detail page show? Does the ChapterTestCard react sensibly?
  • Wistia outage: video fails to load — UI should show a clear error, not a broken iframe.
  • Switching device mid-video: progress saved on phone — opening the same video on another device should resume from saved % (server is the source of truth).
  • Chapter Tests — completing all chapter videos is what unlocks the chapter test
  • Syllabus — same hierarchy, no locking, reading content instead of videos
  • Coins & Credits — completing modules / chapters can award coins
  • Student Analytics — Learning Journey progress feeds the analytics dashboard