DocsAdministration

Parent Portal

Linking parents to students and what they see in OptiLearn

OptiLearn surfaces a parent dashboard that shows each linked child's courses, recent grades, upcoming assignments, live class attendance, gamification, and certificates. The portal pulls from the LMS for course/grade data and from OptiCRM for the parent↔child relationship.

How parents are linked to students

OptiLearn does not own the parent↔student graph. The relationship lives in OptiCRM as ContactStudentLink, which records:

  • The parent Contact (contactType: CONTACT_PARENT)
  • The student (the corresponding Student record)
  • A relation label (FATHER, MOTHER, GUARDIAN, OTHER)
  • An isPrimary flag

OptiLearn reads this relationship through two OptiCRM endpoints:

DirectionEndpointUsed by
Parent → childrenGET /api/lms/parent/[id]/childrenParent dashboard, child selector
Student → parentsGET /api/lms/student/[id]/parentsNotification fan-out

Both are cached no-store — newly linked children must appear immediately.

Linking workflow (admin side)

Linking happens in OptiCRM, not OptiLearn:

  1. Open the student's profile in OptiCRM
  2. Add a parent Contact (or link an existing one)
  3. Pick the relation
  4. Mark isPrimary if applicable
  5. Save

Within seconds the parent will see the student in their OptiLearn dashboard on next refresh.

To confirm a parent can see a student in OptiLearn:

  1. Have the parent log in to OptiCRM (<slug>.opticrm.app)
  2. Open learn.opticrm.app — they should land on the parent dashboard
  3. Their child(ren) appear in the header switcher
  4. Selecting a child loads the read-only overview

If the child doesn't appear:

  • Confirm the parent Contact has contactType: CONTACT_PARENT in OptiCRM
  • Confirm ContactStudentLink exists between the two records
  • Check OptiLearn server logs for [opticrm] getParentChildren errors — usually an auth or slug issue

What parents see

Parents have their own dashboard layout (/parent) with a header child-switcher when more than one child is linked. The per-child overview is read-only and includes:

  • Courses — all active + completed enrollments with progress, last accessed, completion status
  • Recent grades — last 10 graded submissions with score, percentage, pass/fail
  • Upcoming assignments — next 5, scoped to the child's active enrollments
  • Live classes — attended this month, missed this month, and the next 5 upcoming
  • Gamification — current streak, longest streak, total points, badges
  • Certificates — every issued certificate (with PDF link)

Parents cannot:

  • Submit assignments or quizzes on behalf of the child
  • Edit notes or bookmarks
  • See another parent's children
  • Access the leaderboard / catalogue / forum (those are student-only)

Notifications

Parents have their own notification preference set (4 keys):

KeyTrigger
PARENT_CHILD_GRADEDChild's assignment graded
PARENT_CHILD_LOW_GRADEChild's average drops below passing threshold
PARENT_CHILD_ABSENTChild missed a live class they registered for
PARENT_WEEKLY_DIGESTWeekly progress summary

Fan-out: when a relevant student event fires, OptiLearn calls getParentsForStudent(childContactId) and dispatches one notification per linked parent through the same NotificationService pipeline as student notifications. Each parent's own preferences apply.

Parents see and edit their preferences at /settings/notifications like any other user.

Multi-child households

Households with multiple children get one row per child in the dashboard switcher. Notifications are per-child — a parent with two children gets two PARENT_WEEKLY_DIGEST emails on Sunday morning, one per child.