v2 Gap Analysis — Student Management
Student Management — V2 Review Gap Analysis
Source: BACKEND-RAMBLINGS.md lines 15-132
Spec: docs/admin-spec/03-student-management.md
Implementation: src/pages/student-management/
Screens covered
- Students list
- Student Detail (profile, submissions tab, appointments tab, payments, semester history, actions, admin notes)
- New Semester Registration Tracker (subsection stakeholder wants)
- Failed Sign-ups
- Submissions Management (the cross-student submissions view)
Students List
Matches
- Name, email, level, semester, TA, status columns ✓
- Subscription status column ✓
- Submissions count column ✓
- Last submission date column ✓
- Filters: semester, level, status, subscription, TA ✓
- Search by name/email ✓
- Add Student button + modal ✓
- Export button ✓
- Bulk deactivate ✓
Expands
- Stakeholder specifies exact column list: name, email, assigned teacher, level/mastery, gender, semester, submission count, appointment count, status.
- MISSING: Gender column (not currently displayed, though it's in the data model)
- MISSING: Appointment count column (not in current implementation)
Deviates
- None detected.
Adds
- None detected.
Ambiguous
- Stakeholder mentions "for mastery course students, the number of meetings and number one-to-one appointments" — unclear if this means a separate "Appointments" column visible only for mastery students, or aggregated count across all students. Implementation does not have this column at all.
Student Detail — Profile tab
Matches
- Personal Information section (name, age, timezone, email, phone, device type, gender, country) ✓
- All fields marked as editable by admin ✓
- Enrollment section (level, semester, enrollment status, TA) ✓
- Edit Profile and Edit Enrollment buttons ✓
- Tags section ✓
- System Information section (collapsed) ✓
Expands
- None detected.
Deviates
- Spec shows "Device Type" as read-only; implementation shows it as read-only ✓
- Spec shows "Enrollment ID" as system reference; implementation shows it as
ENRL-{id}-{semesterId}✓
Adds
- Admin Notes tab: Stakeholder says "I would like for there to be a notes tab for a personal account where the admins can keep any notes or links to tickets." This is NOT implemented.
Ambiguous
- Stakeholder lists "age" as editable personal data, but spec Section 3.5 shows it as optional. Implementation allows editing via modal (not yet functional).
Student Detail — Submissions tab
Matches
- Table of submissions with assessment name, week, date submitted, status, grade, reviewed by, review date, rejection reason ✓
- Semester filter (current + all semesters) ✓
- Summary bar showing submission counts and average grade ✓
- Delete submission action (with confirmation) ✓
- Play recording action ✓
- View details action ✓
Expands
Stakeholder wants "access to the recordings of both the submission and the feedback, and to be able to copy and send links for the student in case they need it. I also need to be able to download it if needed."
- Implementation: Play recording button exists (mock).
- MISSING: Copy link button / Send link button.
- MISSING: Download button.
Stakeholder wants "reject a submission that's under review so that it doesn't count towards the submission that the student has already made."
- NOT IMPLEMENTED: Reject submission action (with rejection reason input).
Stakeholder wants "add a desired number of submissions per week as an exception... make this on a week-by-week basis."
- NOT IMPLEMENTED: Exception/override submissions per week UI (nowhere in submissions tab or actions tab).
Deviates
- None detected.
Adds
- None beyond what stakeholder requested.
Ambiguous
- Stakeholder says "select all of them and delete all of them" — unclear if this means bulk delete via checkbox selection in the table, or something else. Implementation has per-row delete action only.
Student Detail — Appointments tab (Mastery only)
Matches
- Table of upcoming and past appointments ✓
- Columns: date/time, TA, group, status, rescheduled to ✓
- Filters: upcoming / past / all (default: upcoming) ✓
- Summary bar showing upcoming and completed counts ✓
- Schedule appointment button ✓
- Reschedule action ✓
- Cancel appointment action ✓
- Calendar View link ✓
Expands
- Stakeholder wants "both upcoming and past appointments. Ideally, this would also allow for viewing appointments in the previous semesters as well."
- Implementation: Shows all appointments for the student (no semester filter visible in the code).
- Spec Section 3.8 mentions "All appointments (past and upcoming)" but no semester filtering is explicitly defined.
- POSSIBLE MISSING: Semester filter for appointments (similar to submissions tab).
Deviates
- None detected.
Adds
- None detected.
Ambiguous
- Stakeholder specifies fields: "what time it is EST, what the TA is, the status of the appointment (upcoming, completed, or cancelled), who cancelled it in case it's cancelled."
- Implementation shows timezone as user's timezone (from
student.timezone), not hardcoded EST. Unclear if stakeholder wants EST only or student's local timezone.
- Implementation shows timezone as user's timezone (from
Student Detail — Payments tab
Matches
- Subscription Status section (plan, current period, cancel at period end, trial, stripe subscription ID) ✓
- Payment Method section (card brand, last 4, expiry) ✓
- Payment History section (date, amount, status, invoice link) ✓
- Special Flags section (scholarship, family plan, deferment) ✓
- Upcoming Payment section ✓
- Cancel Subscription button ✓
- Cancel & Deactivate button (linked deactivation) ✓
- Pause Billing button ✓
- Send Payment Link button ✓
- View in Stripe link ✓
Expands
Stakeholder mentions "cancel subscription button. I need a Cancel and deactivate now, and then cancel and deactivate at a certain date."
- MISSING: "Cancel and deactivate at a certain date" option (spec shows
cancel_at_period_end=truebut no future deactivation date option).
- MISSING: "Cancel and deactivate at a certain date" option (spec shows
Stakeholder says "pause billing would also be good, but to have a date for unpausing also."
- Spec Section 3.7 shows "Pause Billing" button with resume date picker.
- Implementation: Not fully visible in truncated read; needs verification.
Stakeholder lists special cases: "scholarships, family plan, deferment on family plan."
- Implementation shows these as "Special Flags" section ✓
Deviates
- None detected.
Adds
- None beyond what stakeholder requested (Retry Payment, Apply Discount are in spec but not explicitly requested).
Ambiguous
- Stakeholder says "I need to have a good overview of who is on that plan [family plan], their payment method, and also their card information."
- Unclear if this means from the Payments tab of one student, show all family plan members' card info (privacy concern?), or just the card on file for this student.
Student Detail — Semester History tab
Matches
- Table of all semesters student enrolled in ✓
- Columns: semester, level, status, elective (for Year 2), TA, submissions, average grade ✓
- Summary bar: enrolled semesters, current level, student since ✓
- Status filter ✓
- First semester message ✓
Expands
- None detected.
Deviates
- None detected.
Adds
- None detected.
Ambiguous
- None detected.
Student Detail — Actions tab
Matches
- Promote to Next Level action ✓
- Reset Progress action ✓
- Deactivate Account action ✓
- Reactivate Account action ✓
- Set Temporary Password action ✓
- Resend Registration Email action ✓
- Academic and Account Actions sections ✓
Expands
Stakeholder wants: "graduate a student manually. Graduating a student means that they are being promoted to the next level in the upcoming registration semester."
- Spec calls this "Promote to Next Level" (not "Graduate").
- Implementation: Has "Promote to Next Level" ✓
Stakeholder wants: "reset lesson progress... reset to level zero, so the first assessment."
- Spec lists "Reset Progress" and "Reset to Level 1" as separate actions.
- Implementation: "Reset Progress" is visible; "Reset to Level 1" needs verification in full file.
Deviates
- None detected.
Adds
Stakeholder wants "Enroll in a mastery course... manually enroll a student in a mastery course."
- NOT IMPLEMENTED: "Register for Mastery" or "Enroll in Mastery Course" action.
Stakeholder mentions "Resend registration email" — spec has this ✓
Stakeholder mentions "Set and send a temporary password" — spec has this ✓
Ambiguous
- None detected.
Student Detail — Admin Notes tab
Adds (net new, not mentioned in spec at all)
- Stakeholder explicitly asks: "I would like for there to be a notes tab for a personal account where the admins can keep any notes or links to tickets that make it easy to manage whatever special case that student might have."
- NOT IMPLEMENTED: No admin notes tab visible in implementation or spec.
New Semester Registration Tracker
Status
- NOT IMPLEMENTED in current codebase.
Stakeholder Requirements
- Separate subsection under Student Management.
- Shows list of students enrolling in registration semester.
- Displays both old students (returning) and new students (first-time).
- Columns: name, email, current level, previous level, registration semester, semester enrollment date, first assessment sent status (for Level 0), status (graduate/repeat/new student), mastery course (if applicable).
- Filters: by semester (default: current registration semester), option for "all semesters".
- Export function.
- Key feature: Filter out level zero students who haven't submitted first assessment, select all, promote to level two.
Spec Coverage
- Spec Section 5 mentions "Promoted Students" but this is different from "New Semester Registration Tracker." Promoted Students shows completed promotions; Tracker shows in-flight registrations.
Adds
- This is a wholly new workflow not in spec or implementation.
Failed Sign-ups
Matches
- Name, email, registration date, status, device, phone columns ✓
- Detail modal showing all fields ✓
- Resend registration action ✓
- Delete record action ✓
- Bulk delete action ✓
- Export button ✓
- Date range and device type filters ✓
Expands
Stakeholder wants: "to resend them their credentials."
- MISSING: "Resend Credentials" button (only "Resend Registration" in spec/impl).
Stakeholder wants: "manually activate their account so to change your status from failed to active."
- MISSING: "Activate Account" or "Promote to Active" button.
Deviates
- None detected.
Adds
- None beyond what stakeholder requested.
Ambiguous
- Stakeholder says "failed sign-ups need to be explored, but essentially those are the students whose student account isn't created for whatever reason."
- Spec Section 6.1 says these are
users.user_type = 4(incomplete registrations). - Unclear what "resend credentials" means vs. "resend registration email."
- Spec Section 6.1 says these are
Submissions Management (cross-student view)
Matches
- Two views: Assessments and Submissions (toggled via segmented control) ✓
- Assessments view columns: title, description, level, semester, questions count, audio files count, submission count, under review count ✓
- Submissions view columns: student, assessment, week, level, status, reviewed by, date ✓
- Create Assessment action ✓
- Edit Assessment action ✓
- Delete Assessment action ✓
- Play Recording action (submissions view) ✓
- Review Submission action ✓
- Bulk Delete action (submissions view) ✓
Expands
Stakeholder says: "For any submission that's under review, I need to be able to assign that submission to another teacher. I need to be able to click on the submission, but I have a button that allows me to reassign the submission to somebody else."
- MISSING: "Reassign Submission" action in submissions view.
Stakeholder says: "Also, for submissions which are under review, I need all of those who haven't been responded to in 48 hours on work days to be flagged as a late response. And for an automatic reminder be sent to the teacher to respond to that submission."
- NOT IMPLEMENTED: Late response flag/indicator.
- NOT IMPLEMENTED: Automatic reminder (this is a backend process, not UI).
Stakeholder specifies filter: "I also need to filter it out by the teacher as well."
- Spec Section 4.5 shows TA filter ✓
- Implementation: TA filter visible in submissions.tsx ✓
Stakeholder wants: "a search field so I can search for the student."
- MISSING: Student name search in submissions view (not visible in spec or impl, though students list has global search).
Deviates
- Stakeholder says "closing submissions": "there needs to be a button for closing submissions in case I want to close submissions manually at a certain date. There also needs to be a display of when the submissions are closing based on the automatic semester dates list, and for me to be able to change that. Let's just say I do not have a close submissions button, but have a date selection option where you can select the date when these submissions will close."
- NOT IMPLEMENTED: Submissions close date UI (neither button nor date picker visible in implementation).
Adds
- None beyond what stakeholder requested.
Ambiguous
Stakeholder says "I need their name, their assessment (the name of the assessment), the week, what level they are, what the status of their submission is, who reviewed it, the date when the submission was uploaded, and when the feedback was received."
- Implementation shows: student, assessment, week, level, status, reviewed by, date (submitted).
- MISSING: "when the feedback was received" (review date visible in individual student's submissions tab but not in cross-student view).
Stakeholder says "I need the student's gender also in that list."
- NOT IMPLEMENTED: Gender column in submissions view (though gender is in student data).
Summary
Net-new screens/sections:
- Admin Notes tab on Student Detail (explicitly requested for all students)
- New Semester Registration Tracker subsection (wholly new workflow)
Biggest deviations:
- Students list missing appointment count column (stakeholder wants it for mastery course students)
- Failed Sign-ups missing "Resend Credentials" and "Activate Account" actions
- Submissions Management missing:
- Reassign submission action
- Late response flagging (48-hr SLA)
- Student name search field
- Submissions close date picker
- Gender column
- Review date (feedback received) column
- New Semester Registration Tracker entirely absent (critical workflow for semester-close period)
- Submissions tab missing:
- Reject submission action (with rejection reason input)
- Exception submissions per week UI
- Copy/send recording link button
- Download recording button
Top ambiguities:
- Appointment count column — should it be visible for all students or only mastery course students? Is it a single aggregated count or separate "scheduled" vs. "completed" counts?
- "Resend credentials" in Failed Sign-ups — does this mean temporary password, or actual login credentials?
- First assessment sent indicator in Reg Tracker — what constitutes "sent"? (Email sent, file received, etc.)
- Student timezone for appointments — stakeholder mentions EST specifically; implementation uses student's timezone. Which is correct?
- Submissions close date — should this be per-assessment, per-level, or semester-wide?