Skip to main content

Student Analytics

Every test, assignment, attendance mark, and module-tick a student does feeds an analytics view that they can open themselves, that their parent can open, and that their teachers see embedded in the student detail page. The view tells them where they're strong, where to focus, and gives them three small "quests" to do today to keep their streak.

At a glance

Who can see itStudents see their own dashboard · Parents see their child's (with the active child resolved from the linked-students list) · Teachers see a read-only mirror inside the student detail page (no daily quests, no AI recommendation cards)
Where it livesStudent app /dashboard/student-analytics · Parent app /analytics · Teacher app /dashboard/classes/:sectionId/students/:studentId (panel embedded in Student Detail)
Inputs that feed itPractice / prep / class / chapter / quick tests · Homework submissions and reviews · Attendance marks · Module completions in the syllabus / weekly plan · Quest completions
Related featuresClass Tests · Practice Tests · Attendance · Coins & Credits (quest XP + bonuses) · Learning Journey

How it flows

Step-by-step

The page is a vertical stack of blocks. They are the same blocks across student and parent; the teacher panel renders a subset.

1. Performance Cards (top stat tiles)

  • Three cards, each value% + a delta vs. last week and a tiny progress bar:
    • Tests — average score across recent tests.
    • Homework — submission / on-time rate.
    • Attendance — % present (Late and Excused count as attended; see Attendance).
  • Delta arrow turns green if up, red if down, gray "Stable" if unchanged.

2. Weekly Performance Trend

  • Line chart of weekly score over the recent ~8 weeks. Hovering / tapping a point reveals the value and date.
  • Used to spot week-on-week regressions.

3. Subject Cards

  • Horizontal scroll of cards, one per subject the student is taking, showing this-week effort and headline mastery for the subject.
  • Tapping a subject card filters the Cognitive Skills block (below) to that subject.

4. AI Recommendations (student + parent only)

  • Up to three pill-tagged cards generated from the student's activity:
    • Strength (purple) — what's going well.
    • Focus Area (orange) — what to work on.
    • Daily Tip (green) — concrete suggestion (e.g. "Try one Algebra MCQ before bed").
  • Insights are computed once per session/day and cached; opening the Daily Quests block forces the cache to be fresh.

5. Subject Mastery

  • Grid of every subject with a mastery percentage and a coloured bar. Mastery aggregates module-completion in the syllabus + per-subject test scores.

6. Performance Breakdown

  • Stacked bar / grouped chart breaking out the student's recent activity by type (MCQ, short-answer, descriptive, etc.) and outcome (correct, incorrect, skipped). Useful for finding "they get the answer but skip the descriptives" patterns.

7. Cognitive Skills (Bloom's taxonomy radar)

  • A radar chart with one spoke per cognitive category. The Bloom levels covered are:
    1. Remember — recall facts.
    2. Understand — explain ideas in own words.
    3. Apply — use a learnt method on a new problem.
    4. Analyze — break a problem into parts.
    5. Evaluate — judge a method/argument.
    6. Create — produce something novel.
  • Categories themselves are configured in the admin app under Cognitive Categories so the wording on the radar can vary per school. Each category has an icon (BookOpen / RotateCcw / Wrench / Calculator / Lightbulb / Brain) and a chapter-level drill-down.
  • Two filters control the data: subject (default: all) and chapter (only enabled once a subject is picked).

8. Daily Quests (student + parent only)

  • A purple card titled Daily Quests with a n/3 DONE pill. Three quests per day; each one tracks one of:
    • module_complete — finish a module in the syllabus → tap routes to /dashboard/syllabus/:subjectId.
    • assessment_count / assessment_score — take or score on a quick test → tap routes to /dashboard/quick-test/chapters/:subjectId.
    • attendance — be present today → tap routes to /dashboard/school/attendance.
  • A quest can be marked Bonus — badge XP renders amber.
  • Quests refresh once a day; while the page is open, status re-polls every 30 seconds so a quest the student just finished elsewhere ticks itself off without a manual refresh.
  • When all 3 are done, the card celebrates with a sparkle and "All Quests Completed! New quests will be available tomorrow."

9. Teacher embedded panel

  • App / route: Teacher app → /dashboard/classes/:sectionId/students/:studentId (Student Detail) renders the same blocks except Daily Quests and AI Recommendations.
  • All teacher-side requests carry the student's studentProfileId so a teacher always sees the student they're inspecting, not their own data.

10. Parent surface

  • App / route: Parent app → /analytics.
  • Active child is set from linkedStudents[0] if not already in nav state. Switching child re-fetches every block.
  • All 8 blocks are present, including Daily Quests (so a parent can see what their kid still needs to do today).

Edge cases & things to test

  • Brand-new student: account created today, zero tests / homework / attendance → Performance cards show 0% with "Stable", trend chart shows the empty state, mastery and cognitive blocks render placeholder rings/spokes, and Daily Quests still seeds 3 quests.
  • Quest auto-tick: a student finishes a syllabus module while the analytics page is open → within ~30s the corresponding quest ticks off without the student leaving the page.
  • Quest deep-link: tapping an incomplete quest must navigate to a contextual page (right subject, right test type) — never to a generic landing.
  • Subject filter on cognitive radar: pick a subject, then pick a chapter, then change subject → chapter must reset to "All" so we don't filter against a chapter that doesn't belong to the new subject.
  • Multi-child parent: parent opens analytics, switches child, and the page must re-fetch all blocks for the new child including AI insights / quests (don't leak the previous child's state).
  • Teacher viewing a student: opening the panel must hide Daily Quests and AI Recommendations, and every block must scope to that student's studentProfileId, not the teacher's own profile.
  • Bloom radar with one category at zero: if Apply has 0 attempts, the spoke must render at the centre, not collapse the chart shape.
  • Bonus XP rendering: a bonus quest should render its XP badge in amber, not the default green.
  • Stale AI insights: open the page, leave it idle for an hour, come back → insights should be regenerated (not show yesterday's reco indefinitely).
  • No linked students for a parent: parent opens /analytics with zero children linked → empty state with "No linked student" message; no spinners, no broken charts.
  • Late-night quest: a student finishes the last quest at 11:58 PM local → completion must register on today's quest set, not tomorrow's.
  • Privacy boundary: a teacher who is not assigned to a section must NOT be able to load that student's analytics by manually navigating to :studentId.
  • Recharts theming: dark mode toggle on the cognitive radar must redraw the polar grid + radar fill in the dark palette without leaving white residue from the previous theme.
  • Polling pause when tab hidden: when the analytics tab is backgrounded for a long time, the 30s quest poll should not run away (battery / data); coming back to foreground should refresh once.