Student Management
The student management page is the primary view for tracking every child on the platform, from initial intake through active tutoring. Coordinators use it to monitor funnel health, assign tutors, and ensure no student falls through the cracks.
Student List
The student list at /admin/students is a paginated, filterable table showing all children on the platform. It supports funnel-based filtering to help coordinators focus on specific stages.
// Query parameters
?page=1&limit=25&funnel=active&search=ethan
// Response
{ "students": [...], "total": 142, "page": 1, "limit": 25 }Funnel Tabs
The student list has tabbed filters that segment the funnel. Badge counts are loaded separately for performance.
funnel=activefunnel=awaitingfunnel=has_optionsfunnel=needs_attention// Returns badge numbers for each funnel tab
{ "active": 42, "awaiting": 8, "has_options": 5, "needs_attention": 3 }Student Detail Page
Clicking a student opens the detail view at /admin/students/view/[id]/ with four sub-routes accessible via tabs.
| Sub-route | Content |
|---|---|
/overview | Child profile (name, age, school, special needs), parent contact info, current status, intake summary |
/tutors | Active tutor matches with match date, subject, session count. Tutor names shown only after Parent_Accepted |
/sessions | Full session history with status badges, check-in/out times, and tutor notes preview |
/insights | Tutor observations, AI-generated snapshots, parent reviews, and readiness reports |
Name Display Convention
All admin pages display names in the format {display_name} ({id}) -- for example, "Amelia (2)" or "Alex Tan (9)". This ensures coordinators can always disambiguate people with similar names.
Supporting Endpoints
Recent Sessions
// Returns the last N sessions for a specific student
[{ "id": 301, "date": "2026-03-20", "status": "Approved",
"tutor_name": "Alex Tan (9)", "subject": "Math",
"checked_in_at": "...", "checked_out_at": "..." }]Pool Status
// Shows which tutor pool the student is in and match candidates
{ "child_id": 12, "pool": "matching",
"candidates": [{ "tutor_id": 9, "score": 78, "status": "Pushed" }] }Parent Detail
// Full parent profile with all children and package info
{ "parent_id": 5, "name": "Sarah Lim", "email": "...",
"phone": "...", "children": [...], "packages": [...] }Parent Account Maintenance
// Coordinator-only account maintenance for linked parent users
{ "email": "[email protected]", "password": "demo" }
// Response
{ "parent_user_id": 1789, "updated_fields": ["email", "password"], "password_updated": true,
"parent": { "id": 1789, "email": "[email protected]", "display_name": "...", "phone": "..." } }This route is intended for coordinator/operator fixes through the existing worker, not for parent self-service. It supports temporary-password resets for account recovery and email correction after resolving the linked family from the student detail.
Child Insights
The insights system aggregates tutor observations and AI-generated summaries for each child over time.
| Endpoint | Description |
|---|---|
GET /insights/admin/children | List all children with insight summaries (paginated) |
GET /insights/admin/children/:id | Full insight detail for a specific child: observations, snapshots, trend analysis |
Readiness Reports
Tutoring Readiness profiles are parent-filled questionnaires scoring children across developmental and learning domains. Alerts trigger when a child has a match (even before first session). Multiple snapshots over time track progress.
// Returns all readiness reports across all children
[{ "child_id": 12, "child_name": "Ethan", "status": "Completed",
"total_b": 8, "total_c": 10, "total_d": 9, "total_e": 7, "total_g": 18, "total_h": 6, "overall_af": 40 }]Readiness Domains
| Domain | Name | What it measures |
|---|---|---|
| B | Emotional Regulation | Managing frustration, recovery, calming strategies. Includes coping_mechanisms text field. |
| C | Communication & Social | Expressing needs, turn-taking, peer interaction |
| D | Learning Readiness | Focus, curiosity, willingness to attempt new tasks |
| E | Independence & Self-Management | Working without prompting, organizing materials, time awareness |
| G | Literacy & Numeracy | Age-appropriate reading, writing, and math foundations (9 items) |
| H | Sensory Processing | Sensory sensitivity, sensory seeking, sensory avoidance, self-regulation strategies |
Domains A (Classroom Compliance) and F (Group Readiness) were removed as they are not relevant for 1:1 tutoring. Legacy reports with A/F scores are preserved for backward compatibility.
Each item is scored 0-3: 0 = Not Yet, 1 = With Full Support, 2 = With Some Support, 3 = Independently. Each domain also has a free-text notes field for qualitative observations. Overall score = B+C+D+E+H (G scored separately).
Subject-Specific Proficiency
In addition to developmental domains, the readiness report includes subject-specific proficiency questions based on the child's level and subject. 459 curriculum topics across 3 subjects are stored in proficiency-topics.json:
| Subject | Levels | Topics |
|---|---|---|
| English | 21 (Primary 1-6 Standard/Foundation, Secondary 1-5 G1/G2/G3) | 117 |
| Maths | 21 (Primary 1-6 Standard/Foundation, Secondary 1-5 G1/G2/G3) | 222 |
| Science | 19 (Primary 3-6 Standard/Foundation, Secondary 1-5 G1/G2/G3) | 120 |
Each topic uses a 4-point scale: Not Yet Started, Beginning, Getting There, Proficient. Scores are stored in proficiency_scores_json on the readiness report.
Soft Delete
When a parent removes a child, the record is not deleted. Instead, a deactivated_at timestamp is set. The parent list filters out deactivated children, but admin views show all children including deactivated ones (greyed out).
// Sets deactivated_at = NOW() -- does not delete the record
// Response: 200 OK
{ "success": true, "deactivated_at": "2026-03-27T10:30:00Z" }