Skip to main content
The student portal is live. It gives a signed-in student a read-mostly view of their own school record at /student/*: homework, goals, grades, progress, attendance, calendar, activities, and notifications.
Access is gated to the student Clerk organization role. Every other role is redirected away from /student/* routes, and the middleware plus the (student) route group layout both enforce the check.

Self-scoped by design

Every server action resolves the student’s identity from students.clerk_user_id = auth().userId. A student ID is never accepted from the client, so a student can only ever load their own record. This closes off the class of bug where one student could request another student’s data by changing an ID in a request.

What the portal offers

Dashboard

A personalized greeting, a count of homework due today (or “All caught up!” when there is none), today’s PACE goals with status pills, and a 30-day attendance widget.

Homework

Today, Upcoming, and Done tabs. One-tap Mark Done on a pending item, an Overdue badge on the Today tab, and a Done history capped at the most recent 30 items.

My Goals

Today’s PACE goals plus a 30-day history collapsed to one status per day, and a current met streak.

My Grades

Finalized PACE scores only. In-flight PACEs show a parent-safe status instead of a number, and no moderator identities or notes are exposed.

My Progress

A 30-day goal-achievement trend chart plus per-subject termly projections with an on-track, at-risk, or off-track badge.

Attendance

The student’s own last-30-school-day attendance, shown on the dashboard.

Calendar

A read-only agenda of the student’s own centre plus org-wide events, with a Subscribe link for a private ICS feed.

Activities

Browse the extracurricular catalog for the student’s own centre and org-wide activities, and express interest in one.
Notifications are reached from the header bell’s “See all” link rather than a main sidebar item, and open the full in-app notification history at /student/notifications.

Homework: Today, Upcoming, Done

1

Land on the dashboard

A student who signs in is routed to /student/dashboard. Any other role is bounced to /dashboard instead.
2

Open homework

The dashboard card shows how many homework items are due today, with a “View Homework” button to /student/homework. The Today tab is the default.
3

Mark a page done

Clicking Mark Done on a homework item updates the item optimistically. It moves to a read-only chip and reappears under the Done tab, which keeps the most recent 30 items.
Items already marked done by a parent, verified by a teacher, or marked missed render as a read-only chip rather than an actionable button.

Goals and grades

Today’s goals show a subject, PACE number, page range, and a status pill: Met, Keep trying, Absent, Excused, No attempt, or Pending. A “View goal history” link opens /student/goals, which shows the current met streak and a 30-day history with one worst-of-day status per day (met, missed, non-attempt, pending). /student/grades shows a PACE score only once it is finalized. A finalized PACE that was failed on every attempt shows N/A rather than 0%. A PACE still moving through moderation shows a status label instead: Awaiting moderation, Under external review, Returned for re-entry, Under review, or Pending. Readiness checks (self-tests) are excluded from graded results.

Progress

/student/progress shows a 30-day goal-achievement-rate line chart and, per subject, a termly PACE projection card: PACEs completed against the term target, a status badge (on track, at risk, off track), and the student’s current weekly pace against the required weekly pace. The view is strictly read-only, with no comparison to other students or centres, and an empty state reads “No progress data yet” rather than showing an error.

Calendar

/student/calendar lists events for the student’s own learning centre plus org-wide events, filtered to student-visible items only. Admin, staff, and parent-only events are excluded. Each entry shows a title, formatted date or time, and an event-type badge, with no edit or delete controls. The Subscribe link at /student/calendar/subscribe generates a private ICS feed URL scoped to the student’s own visibility and centre, for syncing with an external calendar app.

Activities

/student/extracurriculars shows the same activity catalog staff use, narrowed to org-wide activities plus the student’s own centre, with admin controls hidden and an option to express interest. Opening an activity from the catalog goes to /student/extracurriculars/[id] for its detail view; an activity from a different centre renders as not found.

Student guide: getting started

A step-by-step walkthrough for students using the portal.

Parent portal overview

The equivalent read-only view for a parent, covering the same domains.

Homework overview

How homework is assigned and verified on the staff side.

Roles and permissions reference

The full list of roles and what each can access.