WS1.2 — Admin Workflow Maps
WS1.2 — Admin Workflow Maps
Purpose: Step-by-step maps of 6 real admin workflows, annotated with screen paths, click counts, information gaps, external tool dependencies, and error-prone points. These maps are the measuring stick against which navigation candidates will be evaluated. Source data: Capability Map, Navigation Interview Report, Redesign Plan (Section 1.2) Date: March 2026
How to Read These Maps
Each workflow documents:
| Element | What it means |
|---|---|
| Trigger | What initiates the workflow |
| Steps | Numbered actions with screen paths, information needed, and information available vs. missing |
| Screen count | Total distinct screens/pages the admin must visit |
| Click estimate | Navigation clicks — section changes, page loads, modal opens, tab switches (does not count form field interactions) |
| External tool dependencies | Steps that require leaving the admin backend entirely |
| Error-prone points | Where the interview identified mistakes happen, cited by question number |
| Pain quotient | Critical / High / Medium / Low based on frequency, impact, and interview evidence |
Screen paths use the exact routes from the Capability Map (e.g., /lessons-new/index). Where a step requires navigating to a detail/edit view of a specific record, the path is shown as /lessons-new/update?id={id}.
Workflow 1: Set Up a New Semester
Trigger
New semester approaching (occurs 2-3 times per year). The admin must configure all content, enrollment settings, TA assignments, schedules, and communications before the semester goes live.
Interview Evidence
- Q1: Content re-upload, no cloning, confusing date fields, manual semester status switching, manual TA movement, welcome package re-upload (21 documents), automation email manual updates
- Q8: Manually uploading all semester content is so time-consuming and error-prone that it's a task the admin dreads and delays
Step-by-Step Flow
Step 1 — Create the new semester record
- Action: Navigate to Semesters, click "Create New Semester"
- Screen:
/semester/indexthen/semester/create - Information needed: Semester name, start date, end date, registration start date, content availability date, registration status
- Available: Form fields for all dates and status toggles
- Missing: No explanation of what each date field controls downstream. No preview of what activating registration or setting
is_currentwill do to the rest of the system. No warning if another semester is still markedis_current = 1(Q1 — "leaving old semester active corrupts student profiles") - Risk: Admin must manually deactivate the old semester's
is_currentflag. If forgotten, both semesters are active simultaneously, causing data corruption. There is no automatic transition.
Step 2 — Deactivate the previous semester
- Action: Navigate back to Semesters list, find the old semester, edit it, toggle
is_currentoff andregistration_statusoff - Screen:
/semester/indexthen/semester/update?id={old_id} - Information needed: Which semester is currently active
- Available: Semester list shows all semesters, but
is_currentstatus may not be immediately visible in the list view - Missing: No single-action "switch active semester" tool. No confirmation dialog warning about the consequences. No audit trail of when the switch happened.
Step 3 — Set up Video Lessons (per level)
- Action: Navigate to Program > Video Lessons. Create lessons for each of the 6 levels (Level 0 through Year 2), uploading video URLs and configuring thumbnails
- Screen:
/lessons-new/indexthen/lessons-new/create(repeated per lesson) - Information needed: Video URLs (from Vimeo), lesson titles, descriptions, thumbnails, level assignments, ordering
- Available: Create/edit form with video URL field and auto-thumbnail extraction
- Missing: No way to clone lessons from the previous semester. Every lesson must be recreated from scratch even when the curriculum is identical. No bulk upload. No way to see what the previous semester had for reference without opening a new browser tab and switching the semester filter.
- External dependency: Vimeo — video URLs must be retrieved from the Vimeo account
Step 4 — Set up Submissions / Assessments (per level)
- Action: Navigate to Program > Submissions. Create assessment prompts for each level, attaching questions and audio files
- Screen:
/assessments/indexthen/assessments/create(repeated per assessment) - Information needed: Assessment titles, descriptions, questions, audio prompt files, level assignments
- Available: Create form with file upload
- Missing: No cloning from previous semester. No bulk creation. Same repetitive manual process as video lessons.
Step 5 — Set up Resources (per level)
- Action: Navigate to Program > Resources. Upload downloadable PDFs/documents for each level
- Screen:
/resources/indexthen/resources/create(repeated per resource) - Information needed: Resource files, titles, level assignments
- Available: Create form with file upload and level selector
- Missing: No cloning. Resources are often identical across semesters (e.g., pronunciation guides).
Step 6 — Set up Live Sessions (per level)
- Action: Navigate to Program > Live Sessions. Create live session schedule entries for each level
- Screen:
/live-sessions/indexthen/live-sessions/create - Information needed: Session dates, times, level assignments, session details
- Available: Create form. Auto-creates one per level.
- Missing: No way to set up a recurring weekly schedule — each session must be created individually. No calendar view to verify the schedule across levels.
Step 7 — Set up Tutorials (per level)
- Action: Navigate to Program > Tutorials. Upload PDF-based supplementary materials
- Screen:
/tutorials/indexthen/tutorials/create(repeated per tutorial) - Information needed: Tutorial PDFs, titles, level assignments
- Available: Create form with PDF upload
- Missing: No cloning from previous semester.
Step 8 — Set up MCQ Questions and Quizzes
- Action: Navigate to Program > MCQ Questions to create the question bank, then to Program > Quizzes to assemble quizzes from those questions
- Screens:
/mcqquestion/indexthen/mcqquestion/create(repeated), then/quiz/indexthen/quiz/create(repeated) - Information needed: Question text, answer options, correct answers, quiz titles, question assignments
- Available: Create forms for questions and quizzes. Quiz transfer feature exists (
transfer-all) to copy quizzes between semesters. - Partially solved: Quizzes are the ONE content type that has a transfer/clone mechanism. MCQ questions still must be manually created if new.
Step 9 — Set up Recordings library
- Action: Navigate to Program > Recordings. Add any pre-existing session recordings for the new semester
- Screen:
/recordings/indexthen/recordings/create - Information needed: Recording URLs (from Vimeo), titles, level and type assignments
- Available: Create form with filtering by level and type
- Missing: No cloning. Recording links must be manually verified on Vimeo.
- External dependency: Vimeo — verify recording links are still active
Step 10 — Upload Welcome Package (21 documents)
- Action: Navigate to Settings > Welcome Package. Upload all onboarding documents for new students
- Screen:
/semester/index-upload-file - Information needed: 21 individual document files for the welcome package
- Available: Upload interface per semester
- Missing: No persistence between semesters. All 21 documents must be re-uploaded individually even when they haven't changed. No way to "carry forward" from the previous semester. No way to edit a single document without re-uploading the entire set. (Q1 — explicitly called out as a pain point)
Step 11 — Update Email Management templates
- Action: Navigate to Settings > Email Management. Review and update automated email templates for the new semester (registration confirmation, welcome emails, weekly reminders, EOC notifications)
- Screen:
/emails/indexthen/emails/update?id={id}(repeated per template) - Information needed: Which templates reference semester-specific dates, names, or details
- Available: Template editor with preview and test send
- Missing: No indicator of which templates need updating for a new semester. No diff view to show what changed. Admin must manually review each template to find semester-specific content. (Q1 — "automation emails require manual updating each semester")
Step 12 — Configure Tags for the new semester
- Action: Navigate to Settings > Tags Management. Verify/create tags for the new semester's student segmentation and marketing automation
- Screen:
/tags/indexthen/tags/createif needed - Information needed: Which tags are needed, marketing automation rules
- Available: Tag CRUD. Syncs with InfusionSoft.
- Missing: No visibility into which tags are semester-specific vs. persistent. No indication of what the previous semester's tag setup looked like.
- External dependency: InfusionSoft — verify tag sync is working
Step 13 — Configure Teacher Assignment Criteria
- Action: Navigate to Settings > Teacher Assignment Criteria. Define or update rules for auto-assigning students to TAs
- Screen:
/teacher-assignment-criteria/indexthen/teacher-assignment-criteria/createorupdate - Information needed: Assignment rules (gender matching, capacity, language, timezone)
- Available: Criteria CRUD
- Missing: No way to preview what assignments the criteria would produce. No way to clone criteria from the previous semester. Located under Settings, which is unintuitive — the admin noted this doesn't logically belong in Settings (Q6).
Step 14 — Move TAs to the new semester and set up schedules
- Action: Navigate to People > Teaching Assistants to verify TA accounts. Then navigate to Appointments > TA Schedules to configure weekly availability for each TA in the new semester.
- Screens:
/users/index?type=2, then/appointments/ta-schedule - Information needed: Which TAs are continuing, their availability, timezone preferences
- Available: TA list and schedule configuration per TA with timezone setting
- Missing: No way to clone TA schedules from the previous semester. Each TA's weekly availability must be manually re-entered. No way to see all TAs' schedules side by side for coverage verification. The admin maintains a separate Google Sheets spreadsheet for the full weekly TA schedule overview (Q2).
- External dependency: Google Sheets — TA schedule overview spreadsheet
Step 15 — Configure Operations for bulk tasks
- Action: Navigate to Settings > Operations if any bulk imports are needed (e.g., bulk user registration via CSV for pre-registered students, Year 1 to Year 2 promotions)
- Screen:
/operations/index - Information needed: CSV files prepared with student data
- Available: Bulk promote Year 1 to Year 2, bulk user registration, resource upload
- Missing: No validation preview before executing bulk operations. No undo capability.
Step 16 — Verify everything — manual cross-check
- Action: Revisit every content section (Steps 3-10) to verify nothing was missed. Check the app as a test student to confirm content appears correctly.
- Screens: All content screens revisited —
/lessons-new/index,/assessments/index,/resources/index,/live-sessions/index,/recordings/index,/tutorials/index,/mcqquestion/index,/quiz/index,/semester/index-upload-file - Information needed: Checklist of what should exist per level
- Available: Individual list views with filtering
- Missing: No semester setup checklist or dashboard showing completion status. No "content readiness" view that shows all 8 content types and their setup status for the new semester in one place. The admin must manually remember and verify every category.
Summary
| Metric | Value |
|---|---|
| Screen count | 19+ distinct screens (Semesters, Semester create/edit x2, Video Lessons index + create, Submissions index + create, Resources index + create, Live Sessions index + create, Tutorials index + create, MCQ Questions index + create, Quizzes index + create, Recordings index + create, Welcome Package, Email Management index + edit, Tags index, Teacher Assignment Criteria, TA list, TA Schedules, Operations) |
| Click estimate | 50-80+ navigation clicks (each content section requires: sidebar click to section, click to create, save, repeat per level/item; plus the verification pass) |
| External tool dependencies | 3 — Vimeo (video/recording URLs), Google Sheets (TA schedule overview), InfusionSoft (tag sync verification) |
| Error-prone points | 4 critical: (1) Forgetting to deactivate old semester — Q1; (2) Missing a content category during setup — Q1, Q8; (3) Leaving a welcome package document out of the 21-document upload — Q1; (4) Failing to update semester-specific content in email templates — Q1 |
| Pain quotient | Critical — This is the single most dreaded workflow. Q8: the admin explicitly delays it because it's "time-consuming, error-prone, requires extensive double-checking." No cloning, no checklist, no bulk operations for most content types. Every semester is built from scratch. |
Ideal Flow
- Target screen count: 1-3 screens (semester hub with tabbed sub-views)
- Target click estimate: 10-15 clicks
- Target external tool dependencies: 0-1 (Vimeo may remain for video hosting, but URLs should auto-resolve)
The admin opens a Semester Hub page that shows the full setup status of the new semester at a glance — a checklist of all 8 content types with green/amber/red status indicators for each level. From this hub, the admin clicks a "Clone from Previous" button that copies all content from the last semester (lessons, submissions, resources, tutorials, recordings, quizzes, welcome package, email templates) into draft state, ready for review and selective editing. The admin works through the checklist tab by tab, confirming or modifying cloned content, and each save updates the checklist status in real time. Live sessions are configured once as a recurring weekly pattern and auto-generated across the semester date range. When all checklist items are green, the admin clicks "Activate Semester" — which simultaneously sets the new semester to is_current = 1, deactivates the old semester, and triggers the registration and welcome email pipeline. The entire workflow is guided, sequenced, and self-verifying.
What's consolidated vs. current state: 19+ screens collapse into a 1-3 screen hub. 16 steps collapse into a clone-review-activate sequence. The verification pass (Step 16) is eliminated because the checklist IS the verification. External dependencies drop from 3 to 0-1.
Opportunities
Content Cloning Engine — Copies all content (or selected content types) from one semester to the next in draft state, ready for review. Eliminates the manual re-upload of videos, submissions, resources, tutorials, recordings, and quizzes that the admin dreads and delays (Q1, Q8: "manually uploading all semester content is time-consuming and error-prone"). Type: Feature addition.
Semester Template System — Saves a semester's full configuration as a reusable template, including content structure, email templates, tag setups, and TA assignment criteria. Allows rapid setup for recurring program structures (e.g., standard Year 1 semester vs. summer intensive). Builds on cloning but adds cross-semester persistence. Type: Feature addition.
Auto-Activation Based on Dates — Automatically transitions
is_currentstatus based on the configured start date, eliminating the manual deactivation step that has caused data corruption (Q1: "leaving old semester active corrupts student profiles"). Includes a safety confirmation 24 hours before activation. Type: Feature addition.Setup Checklist Dashboard — A single-page status view showing all 8 content types across all 6 levels, with completion indicators (configured / partially configured / not started). Replaces the manual verification pass that currently requires revisiting every content section (Step 16: "no semester setup checklist or dashboard showing completion status"). Type: Nav change + feature addition.
Welcome Package Persistence — Welcome package documents persist across semesters and can be individually edited, replaced, or carried forward, rather than requiring all 21 documents to be re-uploaded from scratch (Q1: "welcome packages must be re-uploaded individually each semester"). Type: Feature addition.
Bulk Content Upload — Upload multiple items of the same content type at once (e.g., all Level 1 resources via multi-file upload, or all lesson metadata via CSV). Reduces the per-item create-save-repeat cycle that dominates Steps 3-9. Type: Feature addition.
Recurring Live Session Scheduler — Define a recurring weekly pattern (e.g., Level 1 on Tuesdays at 7pm) and auto-generate all session instances for the semester date range, rather than creating each session individually (current state: "no way to set up a recurring weekly schedule"). Type: Feature addition.
Workflow 2: Handle a Student Support Issue
Trigger
A student emails or reports a problem — could be billing-related, access-related, content-related, or scheduling-related. The admin must find the student, diagnose the issue, act, and resolve.
Interview Evidence
- Q2: Wishes for a consolidated student profile showing level, TA, gender, semester history, submission count, payment status — currently scattered across multiple screens and external tools
- Q5: Payment/billing data is the highest-friction gap — all payment information requires leaving the backend
Step-by-Step Flow
Step 1 — Receive the support request
- Action: Student emails or messages with a problem description
- Screen: External — email client
- Information needed: Student name or email, description of the issue
- Available: Whatever the student provides
- Missing: No in-app issue reporting that surfaces in the admin dashboard (Q7 wish list). Every issue comes through email or informal channels.
Step 2 — Find the student in the system
- Action: Navigate to People > Students. Search for the student by name or email.
- Screen:
/users/index?type=3 - Information needed: Student name or email
- Available: Student list with search functionality and performance stats
- Missing: Search may not surface students who are deactivated or in a different semester. If the student's name in the email doesn't exactly match the system record, finding them is harder.
Step 3 — Open the student profile
- Action: Click on the student to view their detail page
- Screen:
/users/update?id={student_id} - Information needed: Full picture of the student — level, semester, TA, group, submission history, appointment history, payment status, enrollment history
- Available: Profile fields (name, email, contact, gender, age), current level, current semester, current TA assignment, semester status (enrolled/pass/fail), activation status. Actions: edit profile, deactivate, reset progress, promote, set temp password.
- Missing (critical gaps):
- No payment/billing data — cannot see subscription status, payment plan, outstanding balance, or payment history. Must go to Stripe. (Q2, Q5)
- No semester history — cannot see which semesters the student has been in, at what levels, with what outcomes. Must mentally reconstruct this or check Sheets. (Q2)
- No submission history — cannot see the student's actual submissions or their review status from this screen. Must navigate to a separate reports view. (Q2)
- No appointment history — cannot see past or upcoming appointments (especially problematic for Year 2 students). (Q2)
- No sign-up date — or the sign-up date field is unreliable. (Q2)
- No elective history — for Year 2 students, cannot see which electives they took in prior semesters. (Q2)
- Cannot delete/reset individual submissions — if a student has a corrupted or accidental submission, the admin cannot remove it from this screen. (Q2)
Step 4 — Diagnose: Is this a billing issue?
- Action: If the issue involves payment, the admin must leave the backend and navigate to Stripe
- Screen: External — Stripe Dashboard (stripe.com)
- Information needed: Student's Stripe customer ID, subscription status, payment history, failed payments, plan details
- Available on Stripe: Full payment and subscription data
- Available on backend:
stripe_customer_idfield exists in the users table, but it's unclear if it's reliably populated or easily visible on the student profile - Missing: No link from the student profile to their Stripe record. The admin must copy the student's email, open Stripe, search for them there.
- External dependency: Stripe
Step 5 — Diagnose: Is this a billing edge case (family plan, scholarship, deferment)?
- Action: If the student is on a special billing arrangement, the admin must check Google Sheets
- Screen: External — Google Sheets
- Information needed: Whether the student is on a family plan, scholarship, or deferment; the terms of that arrangement
- Available on Google Sheets: Family plan groupings, scholarship amounts and terms, deferment timelines
- Available on backend: Nothing. These categories do not exist in the admin backend at all. (Q2, Q5)
- Missing: No flags, tags, or fields in the student profile for family plan, scholarship, or deferment status.
- External dependency: Google Sheets
Step 6 — Diagnose: Is this a submission/grading issue?
- Action: Navigate to Reports > Student Report to check the student's submission count and grades
- Screen:
/reports/index?type=3 - Information needed: How many submissions the student has made, their grades, whether any were rejected
- Available: Student performance metrics with submission counts
- Missing: Cannot see individual submission details from the report. Cannot see TA feedback. Cannot delete or modify a specific submission from here. To see actual submissions, would need to cross-reference with the Submissions section and filter.
Step 7 — Diagnose: Is this an appointment/scheduling issue?
- Action: Navigate to Appointments > Upcoming Appointments to check the student's scheduled sessions
- Screen:
/appointments/index - Information needed: Student's upcoming and past appointments, their TA's availability
- Available: Appointment list filterable by various criteria
- Missing: No way to view a single student's full appointment history. The list shows all appointments; filtering to one student requires knowing their group or enrollment ID. No calendar view. (Q2)
Step 8 — Take action based on diagnosis
- Action: Depending on the issue, the admin takes one or more of the following actions:
- Billing action: Go to Stripe to adjust subscription, issue refund, or update payment method → return to backend to update student status if needed
- Access action: On student profile (
/users/update?id={id}) — reset password, reactivate account, re-send registration email - Level/progress action: On student profile — reset progress, revert promotion, change level
- Submission action: Cannot be done from student profile — must navigate to the TA or find the specific submission through other means
- Scheduling action: Navigate to Appointments to reschedule or cancel → then to TA Schedules if the TA's availability needs updating
- Screens: Varies by action — potentially
/users/update?id={id},/appointments/index,/appointments/ta-schedule, plus Stripe externally - Missing: No single-action "deactivate student + cancel Stripe subscription." These are two completely separate steps in two separate systems. If the admin does one but forgets the other, the student either retains app access after payment cancellation or continues being charged after account deactivation. (Q3)
Step 9 — Verify resolution
- Action: Return to student profile and/or Stripe to confirm the action took effect
- Screen:
/users/update?id={id}and/or Stripe - Information needed: Updated student status, updated payment status
- Missing: No way to see the full resolution from one screen. No support ticket or case notes system — if another admin handles a follow-up, there's no record of what was done.
Step 10 — Respond to the student
- Action: Email the student with the resolution
- Screen: External — email client
- Missing: No in-system communication channel. No templated responses. No record in the backend that this support interaction occurred.
Summary
| Metric | Value |
|---|---|
| Screen count | 5-7 backend screens + 2-3 external tools (Students list, Student profile, Student Report, Appointments, TA Schedules; plus Stripe, Google Sheets, email client) |
| Click estimate | 15-25 clicks depending on issue type (initial navigation to student: 3-4 clicks, each diagnostic section: 2-3 clicks, action steps: 3-5 clicks, verification: 2-3 clicks) |
| External tool dependencies | 3 — Stripe (any billing issue), Google Sheets (family plans, scholarships, deferments), Email client (all communication) |
| Error-prone points | 3: (1) Deactivating student in backend but forgetting to cancel Stripe subscription, or vice versa — Q3; (2) Not checking Google Sheets for special billing arrangements before making changes — Q5; (3) Missing context because semester history isn't on the student profile — Q2 |
| Pain quotient | High — This is the most frequent workflow (happens daily/weekly). The information fragmentation across backend, Stripe, and Google Sheets means every support interaction requires 3+ tool switches. The admin is the only person who knows the full picture because the system doesn't consolidate it. Support staff cannot handle billing questions independently (Q5). |
Ideal Flow
- Target screen count: 1-2 screens (consolidated student profile with tabs)
- Target click estimate: 5-8 clicks
- Target external tool dependencies: 0 (Stripe data integrated, Sheets data absorbed)
The admin receives a support request — ideally through an in-app issue queue that surfaces on their dashboard rather than email. They click the student's name to open a consolidated student entity page with tabs: Profile, Submissions, Payments, Appointments, History. The Profile tab shows current level, TA, group, semester status, sign-up date, and activation status. The Payments tab shows Stripe subscription status, payment history, plan type (standard / family / scholarship / deferment), and outstanding balance — all pulled from Stripe in real time, no tab-switching required. The Submissions tab shows all submissions with grades, TA feedback, and review status. The History tab shows every semester the student has been enrolled in, with level, outcome, and TA per semester. From this single page, the admin can take any resolution action — deactivate + cancel subscription as a linked single action, reset progress, adjust level, or add a case note. The case note creates an audit trail visible to any staff member who handles a follow-up.
What's consolidated vs. current state: 5-7 backend screens + 2-3 external tools collapse into 1-2 screens with zero external tools. Diagnosis steps 4-7 (billing, edge cases, submissions, appointments) become tab switches within a single page. The linked deactivation+cancellation eliminates the most dangerous error-prone point.
Opportunities
Consolidated Student Entity Page — A single page with tabbed views (Profile, Submissions, Payments, Appointments, History) that replaces the current fragmented approach of visiting 5+ screens and 2+ external tools to build a full picture of a student. Directly addresses the admin's top wish (Q2: "a consolidated student profile showing level, TA, gender, semester history, submission count, and payment status"). Type: Nav change + feature addition.
Stripe Data Integration on Profile — Real-time display of subscription status, payment history, plan type, and failed payments within the student's Payments tab. Eliminates the most friction-heavy external tool dependency (Q5: "payment/billing data is the highest-friction gap"). Enables support staff to answer billing questions without admin escalation. Type: Data integration.
Linked Deactivation — A single "Deactivate Student" action that simultaneously sets
user_activation_status = 0in the backend AND cancels the Stripe subscription. Includes a confirmation dialog showing both actions. Eliminates the most dangerous error-prone point in the system (Q3: "student deactivation requires a separate manual step in Stripe"). Type: Feature addition.Case Notes / Audit Trail — Ability to add timestamped notes to a student's profile recording what action was taken, by whom, and why. Creates institutional memory so that follow-up interactions have context — currently all support history lives in the admin's memory or scattered email threads. Type: Feature addition.
Student Issue Reporting System — In-app mechanism for students to report problems, surfacing issues in the admin dashboard as an actionable queue. Replaces the current email-only channel and makes issue tracking systematic (Q7: "student-reported app issues" on dashboard wish list). Type: Feature addition.
Support Staff Billing Access — View-only billing tab on student profiles available to support staff roles, enabling them to diagnose and answer payment questions without escalating to the admin. Directly addresses the bottleneck where the admin is the only person who can see the full picture (Q5: support staff "cannot handle billing questions independently"). Type: Feature addition + data integration.
Workflow 3: Close a Semester / Promote Students
Trigger
Semester end date approaching. The admin must review student performance, handle edge cases, execute promotions, set up payments for continuing students, and deactivate departing students. This spans 2-4 weeks.
Interview Evidence
- Q3: Automation handles standard promotions but breaks on edge cases (teacher discretion, semester length variation, sub-3.5 grades on 12+ submissions). Setting up Stripe payments before promotions are finalized creates cascading corrections. Student deactivation is disconnected from payment cancellation.
- Q8: Setting up Stripe payments for continuing students is explicitly avoided/delayed because it's "risky, frequently requires corrections, and is decoupled from the student deactivation process."
Step-by-Step Flow
Step 1 — Review EOC (End-of-Course) assessment tracking
- Action: Check the Google Sheets spreadsheet where teaching staff have entered EOC assessment outcomes for each student
- Screen: External — Google Sheets
- Information needed: Per-student: total submissions, final submission grade, teacher's pass/fail recommendation, teacher notes on edge cases
- Available on Sheets: Teacher-populated assessment outcomes
- Available on backend: Submission counts and grades exist in the reports, but the teacher's narrative assessment and discretionary decisions are only in Sheets
- Missing: No EOC assessment feature in the backend. The entire pass/fail decision-making process happens outside the system. (Q3)
- External dependency: Google Sheets
Step 2 — Pull student performance reports
- Action: Navigate to Reports > Student Report to cross-reference the Sheets data with system data
- Screen:
/reports/index?type=3 - Information needed: Per-student submission count, average grade, last submission grade, semester status
- Available: Performance metrics, CSV export
- Missing: No flag for students near the pass/fail threshold (e.g., 11 submissions, or grade of 3.4 on submission 12). No indication of teacher discretion cases. No merge with the EOC Sheets data.
Step 3 — Identify edge cases requiring manual review
- Action: Cross-reference the student report with the EOC sheet to find discrepancies — students the automation would promote but the teacher says shouldn't be, or students the automation would hold back but the teacher wants to promote
- Screen:
/reports/index?type=3alongside Google Sheets (two browser windows) - Information needed: Automation criteria (12+ submissions AND last grade >= 3.5), teacher overrides, semester length variation (16 vs. 17 weeks affects who qualifies)
- Available: Raw data in both systems
- Missing: No automated comparison. No edge-case flagging. No way to mark a student as "teacher discretion override" in the backend. The admin must manually build the edge-case list by comparing two data sources side by side. (Q3 — "teachers sometimes assign sub-3.5 grades on submission 12+ despite instructions, triggering incorrect repeat emails")
Step 4 — Handle automation email errors
- Action: Identify students who received incorrect automated emails (e.g., repeat/fail emails sent to students who actually passed based on teacher discretion) and send correction communications
- Screen: External — email client, possibly
/emails/indexto review which automated emails went out - Information needed: Which students received which automated emails, whether those emails were correct
- Available: Email templates exist in Email Management, but there's no log of which specific students received which emails
- Missing: No email send log per student. No way to see "student X received the repeat email on date Y." No way to recall or correct an automated email. (Q3)
Step 5 — Execute standard promotions (automated)
- Action: For students who clearly meet the criteria (12+ submissions, last grade >= 3.5, no teacher override), the promotion system processes them
- Screen: Varies — promotion may be triggered from student profile or through a bulk action
- Available: Individual promotion on student profile (
/users/update?id={id}— "Promote student to next level") and bulk promotion via Operations (/operations/indexfor Year 1 to Year 2) - Missing: No batch promotion for students within Year 1 levels (0→1, 1→2, 2→3, 3→4). Bulk promote via Operations only handles Year 1 to Year 2 (CSV upload). All other promotions must be done individually on each student's profile page.
Step 6 — Execute manual/discretionary promotions
- Action: For edge-case students flagged in Step 3, navigate to each student's profile and manually promote or hold
- Screen:
/users/index?type=3then/users/update?id={id}(repeated per student) - Information needed: The edge-case list from Step 3, teacher recommendation
- Available: Promote action on student profile
- Missing: No way to add a note explaining why a manual override was made. No audit trail of discretionary decisions.
Step 7 — Handle Level 0 students who didn't submit assessments
- Action: Navigate to Students Management for the special Level 0 promotion tool
- Screen:
/users/student-managementthen/user-link-level-tag/level-zero-not-submitted-assesment-students-promotion - Information needed: Which Level 0 students exist and didn't submit
- Available: Dedicated tool that identifies and promotes these students
- Missing: This tool is buried under "Students Management" which is a grab-bag page (Q6). It's not discoverable and its name doesn't indicate what it does.
Step 8 — Set up Stripe payments for continuing students (PREMATURE — this is the pain point)
- Action: For every student who was promoted and is continuing, the admin must go to Stripe and create or update their subscription for the next semester
- Screen: External — Stripe Dashboard
- Information needed: Which students are continuing, what payment plan they should be on, whether they have existing subscriptions that need updating vs. new subscriptions, special pricing (family plans, scholarships)
- Available on Stripe: Subscription creation and management tools
- Available on backend: Student list with promotion status
- Missing (this is the core problem): Payment setup happens in Stripe before all promotion decisions are finalized. When a teacher changes a pass/fail decision after payment setup, or a student decides not to continue after their subscription was created, the admin must go back to Stripe and reverse the setup. This cascade of corrections is the single most error-prone part of semester close. (Q3 — "Setting up Stripe payments for continuing students before promotions are finalized creates corrections when students opt out, switch plans, or teachers change pass/fail decisions")
- External dependency: Stripe
- Additional external dependency: Google Sheets — for family plans, scholarships, deferments that affect pricing
Step 9 — Handle payment corrections
- Action: As promotion decisions change or students opt out, return to Stripe to cancel or modify subscriptions that were set up prematurely
- Screen: External — Stripe Dashboard
- Information needed: Which students' status changed since payment setup
- Available: Nothing automated — the admin must manually track which students had changes
- Missing: No link between promotion status changes in the backend and subscription status in Stripe. No alert when a student's backend status changes after their Stripe subscription was created.
- External dependency: Stripe
Step 10 — Deactivate departing students (backend)
- Action: For students who failed, chose not to continue, or graduated, navigate to their profiles and deactivate their accounts
- Screen:
/users/index?type=3then/users/update?id={id}(repeated per student) - Information needed: Which students are departing
- Available: Deactivation action on student profile (sets
user_activation_status = 0) - Missing: No bulk deactivation. Each student must be deactivated individually.
Step 11 — Cancel Stripe subscriptions for departing students
- Action: For every student deactivated in Step 10, go to Stripe and cancel their subscription
- Screen: External — Stripe Dashboard
- Information needed: Stripe customer IDs for deactivated students
- Available: Subscription cancellation on Stripe
- Missing: This is a completely separate step from Step 10. There is no link between backend deactivation and Stripe cancellation. If the admin deactivates 15 students in the backend but only cancels 14 subscriptions in Stripe, one student continues being charged. If they cancel a subscription but forget to deactivate the backend account, the student retains app access. (Q3 — "Student deactivation requires a separate manual step in Stripe")
- External dependency: Stripe
Step 12 — Update promoted students report
- Action: Check the Promoted Students report to verify all promotions are recorded correctly
- Screen:
/reports/promoted-student - Information needed: List of promoted students, their old and new levels
- Available: Promoted student list and repeat signup students
- Missing: No comparison against expected promotions. No flag for students who were expected to be promoted but weren't, or vice versa.
Step 13 — Prepare the new semester (links to Workflow 1)
- Action: Begin Workflow 1 for the next semester, which overlaps with the close of the current one
- Screen: All screens from Workflow 1
- Information needed: Which content carries forward, which needs updating
- Missing: The overlap between semester close and semester setup means the admin is managing two semester states simultaneously with no system support for this duality. (Q3, phase overlap confirmed in interview)
Summary
| Metric | Value |
|---|---|
| Screen count | 8+ backend screens + 2-3 external tools (Student Report, Student profiles x many, Students Management, Operations, Promoted Students, Users list; plus Stripe, Google Sheets, email client) |
| Click estimate | 40-70+ clicks (reviewing reports: 5-8, individual student profile visits for promotions: 2-3 per student x N students, Stripe navigation: 10-20 for payment setup/corrections, deactivation: 2-3 per student x N students) |
| External tool dependencies | 3 — Stripe (payment setup, corrections, cancellations — the dominant external tool), Google Sheets (EOC assessments, special pricing), Email client (correction communications) |
| Error-prone points | 5 critical: (1) Setting up Stripe payments before promotions are final — Q3; (2) Forgetting to cancel Stripe when deactivating a student, or vice versa — Q3; (3) Automation sending incorrect emails to edge-case students — Q3; (4) Teacher grading inconsistencies triggering wrong automation — Q3; (5) Missing a student during manual promotion/deactivation with no bulk tools — Q8 |
| Pain quotient | Critical — The most error-prone workflow. The premature payment setup problem is structural — the workflow's sequencing is fundamentally broken. Every error cascades into manual corrections across two systems. The admin explicitly avoids/delays this workflow (Q8). |
Ideal Flow
- Target screen count: 2-3 screens (semester close workflow page with sequenced phases)
- Target click estimate: 15-25 clicks
- Target external tool dependencies: 0 (EOC assessment in-system, Stripe integrated, Sheets eliminated)
The admin opens a Semester Close Workflow page that presents the close process as a sequenced pipeline with four phases: (1) EOC Review — teachers submit assessments directly in the backend; the system auto-flags edge cases (students near the 12-submission threshold, grades between 3.0-3.5, teacher discretion overrides) and presents them as an exception list for admin review. (2) Promotion — once all EOC assessments are submitted and edge cases resolved, the admin triggers bulk promotion across all levels with a single action; the system shows a preview of who will be promoted, held, or flagged, and the admin confirms. (3) Payment Setup — only unlocked AFTER promotions are finalized; the system auto-generates Stripe subscriptions for continuing students based on their new level and existing payment plan (standard, family, scholarship, deferment), with a review screen before execution. (4) Deactivation — for departing students, a bulk deactivation action that simultaneously cancels Stripe subscriptions. Each phase gates the next, preventing the premature payment setup problem. An email send log shows exactly which automated emails went to which students at each phase.
What's consolidated vs. current state: 8+ backend screens + 2-3 external tools collapse into a 2-3 screen sequenced workflow. The 13 manual steps collapse into 4 gated phases. The structural sequencing problem (payments before promotions) is eliminated by design. External dependencies drop from 3 to 0.
Opportunities
In-System EOC Assessment — Teachers submit end-of-course assessments (pass/fail recommendation, narrative notes, discretion flags) directly in the backend rather than in Google Sheets. The system auto-compares teacher assessments against automation criteria and highlights discrepancies. Eliminates the manual cross-referencing of two data sources (Q3: "the entire pass/fail decision-making process happens outside the system"). Type: Feature addition.
Sequenced Close Workflow — A gated pipeline where each phase (EOC Review, Promotion, Payment Setup, Deactivation) must be completed before the next unlocks. Structurally prevents the premature payment setup problem that is the single biggest source of cascading errors (Q3: "setting up Stripe payments before promotions are finalized creates corrections"; Q8: admin "avoids/delays" this workflow). Type: Feature addition.
Bulk Promotion Across All Levels — A single bulk action that promotes all qualifying students across all Year 1 levels (0-1, 1-2, 2-3, 3-4) and Year 1-to-Year 2, with a preview and confirmation step. Currently, bulk promotion only exists for Year 1-to-Year 2 via CSV; all other promotions must be done one student at a time (Step 5-6: "no batch promotion for students within Year 1 levels"). Type: Feature addition.
Linked Deactivation + Payment Cancellation — A single "Deactivate Departing Students" action that simultaneously deactivates backend accounts and cancels Stripe subscriptions, with a preview list and confirmation. Eliminates the most dangerous error in the close workflow (Q3: "if the admin deactivates 15 students in the backend but only cancels 14 subscriptions in Stripe, one student continues being charged"). Type: Feature addition + data integration.
Promotion-Gated Payment Setup — Payment setup is architecturally blocked until all promotions are finalized and confirmed. The system auto-generates the correct subscription for each continuing student based on their post-promotion level and existing plan type. Eliminates the cascade of corrections that currently occurs when students opt out or teachers change decisions after payment setup (Q3, Q8). Type: Feature addition.
Edge Case Flagging — Automatic identification of students near decision thresholds: 11 submissions (one away from qualifying), last grade between 3.0-3.5 (near the 3.5 cutoff), teacher grade inconsistencies (sub-3.5 on submission 12+ despite instructions). Presents these as an exception list for admin review rather than requiring manual scanning (Q3: "teachers sometimes assign sub-3.5 grades on submission 12+ despite instructions, triggering incorrect repeat emails"). Type: Feature addition.
Email Send Log Per Student — A record of every automated email sent to each student during the close process (promotion notification, repeat notification, payment confirmation), with timestamps and content. Enables the admin to see exactly what happened when incorrect emails are sent and to issue targeted corrections (Step 4: "no email send log per student"). Type: Feature addition.
Workflow 4: Daily Monitoring / Operations
Trigger
Daily admin check — the admin logs in each day to monitor system health, check for issues, and respond to emerging problems. This is the most frequent workflow.
Interview Evidence
- Q7: The admin's ideal dashboard would show: student-reported app issues, Year 2 appointment utilization, session attendance, TA submission response time alerts (>48hr flag), failed payment alerts, students falling behind on submissions
- Q6: The current dashboard is "inaccurate and unhelpful"
Step-by-Step Flow
Step 1 — Check the Dashboard
- Action: Log in. The Dashboard (
/site/index) is the landing page. - Screen:
/site/index - Information needed: Actionable overview of what requires attention today
- Available: Weekly submission chart, daily notes, TA statistics, live session notification button
- Missing (everything the admin actually needs):
- No student-reported app issues (no in-app reporting exists)
- No failed payment alerts
- No TA submission response time tracking (no flag for >48hr delays)
- No "students falling behind" tracking
- No appointment utilization metrics
- No session attendance data
- The dashboard is essentially a decorative page with a submission chart that doesn't drive action. (Q6 — "dashboard is inaccurate and unhelpful", Q7 — full wish list of what should be there)
Step 2 — Check TA submission response times
- Action: Navigate to Reports > TA Reports to see if any TAs have pending submissions they haven't reviewed
- Screen:
/reports/index?type=2 - Information needed: Per-TA: how many submissions are pending review, how long they've been pending, whether any have exceeded 48 hours
- Available: TA performance data, weekly submissions by teacher
- Missing: No response-time tracking. No "hours since submission" metric. No alert for TAs who are behind. The admin must manually estimate based on submission dates and review dates — if those are even visible in this report. (Q7)
Step 3 — Check student submission progress
- Action: Navigate to Reports > Student Report to identify students falling behind on submissions
- Screen:
/reports/index?type=3 - Information needed: Per-student: expected submissions vs. actual, weeks since last submission, students at risk of not reaching the 12-submission threshold
- Available: Submission counts per student
- Missing: No "expected vs. actual" comparison based on week of semester. No "at risk" flagging. No way to see which students haven't submitted in the last 2+ weeks without manually scanning the entire list. (Q7)
Step 4 — Check for failed payments
- Action: Leave the admin backend and check Stripe for failed payment attempts
- Screen: External — Stripe Dashboard
- Information needed: Which students have failed payments, what type of failure, how many retry attempts remain
- Available on Stripe: Full payment failure data
- Available on backend: Nothing. Zero payment data in the admin backend. (Q5, Q7)
- External dependency: Stripe
Step 5 — Check appointment utilization (Year 2)
- Action: Navigate to Appointments > Upcoming Appointments to review Year 2 student appointment booking rates
- Screen:
/appointments/index - Information needed: How many Year 2 students booked their weekly appointments, who hasn't booked, utilization percentage
- Available: List of upcoming appointments
- Missing: No utilization metric. No "students who haven't booked" view. The admin must mentally compare the appointment list against the Year 2 student roster — which is on a different screen. (Q7)
Step 6 — Check TA schedules and coverage
- Action: Check that TA availability is properly configured and there are no gaps in coverage
- Screen:
/appointments/ta-scheduleand/or external Google Sheets - Information needed: Full weekly view of all TA availability across all days and times
- Available on backend: Individual TA schedule views (one TA at a time)
- Available on Google Sheets: Consolidated weekly schedule across all TAs
- Missing: No consolidated calendar view of all TAs' availability in the backend. Must check each TA individually or use the external spreadsheet. (Q2)
- External dependency: Google Sheets
Step 7 — Review daily notes / follow-ups
- Action: Return to Dashboard to check or add daily notes
- Screen:
/site/index - Information needed: Notes from previous days, pending follow-ups
- Available: Daily notes feature on dashboard
- Missing: No task tracking, no reminders, no follow-up system. Notes are informational only — they don't trigger actions or alerts.
Step 8 — Check for new student emails / support requests
- Action: Check email for student-reported issues
- Screen: External — email client
- Information needed: New student issues requiring attention
- Missing: No in-app issue reporting. No support ticket system. All issues arrive via email and must be mentally tracked by the admin. (Q7 wish: "student-reported app issues" on dashboard)
- External dependency: Email client
Summary
| Metric | Value |
|---|---|
| Screen count | 4-5 backend screens + 2-3 external tools (Dashboard, TA Reports, Student Report, Appointments, TA Schedules; plus Stripe, Google Sheets, email client) |
| Click estimate | 12-18 clicks for the full monitoring circuit (dashboard: 0 — it's the landing page, navigate to each report: 2-3 clicks each, appointments: 2-3 clicks, Stripe and Sheets: external) |
| External tool dependencies | 3 — Stripe (failed payment monitoring), Google Sheets (TA schedule overview), Email client (support requests) |
| Error-prone points | 2: (1) Missing a failed payment because it's only visible in Stripe — Q5, Q7; (2) Missing a student falling behind because there's no alert — Q7 |
| Pain quotient | High — While individual steps are quick, the fundamental problem is that the dashboard provides zero actionable information. The admin must manually visit 4-5 screens and 2-3 external tools to build a picture that a well-designed dashboard would surface in one view. Every monitoring check is a manual scan rather than an alert-driven response. The admin described the current dashboard as useless (Q6). |
Ideal Flow
- Target screen count: 1 screen (smart operations dashboard)
- Target click estimate: 2-3 clicks (dashboard loads automatically; clicks are only for drilling into specific alerts)
- Target external tool dependencies: 0 (Stripe alerts integrated, Sheets data absorbed, issue queue replaces email)
The admin logs in and lands on a smart operations dashboard that shows everything requiring attention today. The dashboard is organized into alert panels: Failed Payments (pulled from Stripe, showing student name, failure reason, retry status — clickable to the student's payment tab), TA Response Times (flagging TAs with submissions pending >48 hours, with a count of overdue reviews — clickable to the TA's submission queue), Students Falling Behind (students whose submission pace puts them at risk of not reaching the 12-submission threshold, based on current week vs. expected progress — clickable to the student profile), Appointment Utilization (Year 2 students who haven't booked their weekly appointment — clickable to the booking view), and Student Issues (in-app reported problems from students, replacing the email-based system). Each alert panel shows a count badge and links directly to the resolution context — no intermediate navigation required. The daily notes feature remains, enhanced with follow-up reminders.
What's consolidated vs. current state: 4-5 backend screens + 2-3 external tools collapse into 1 screen with zero external tools. The 8-step manual monitoring circuit becomes a single page load. The admin shifts from reactive (manually hunting for problems) to proactive (system surfaces problems automatically).
Opportunities
Alert Engine with Configurable Thresholds — A rules-based alert system that surfaces exceptions on the dashboard based on configurable thresholds (e.g., TA response time >48 hours, student submission pace below expected, appointment utilization below 70%). Replaces the manual scanning of 4-5 screens that currently constitutes the daily monitoring circuit (Q7: full wish list of alerts the admin wants). Type: Feature addition.
Failed Payment Detection — Real-time surfacing of Stripe payment failures on the dashboard, showing student name, failure type (card declined, expired, insufficient funds), retry count, and a direct link to the student's payment profile. Eliminates the need to check Stripe as a separate tool during daily monitoring (Q5: "all payment data requires going to Stripe"; Q7: "failed payment alerts" on wish list). Type: Data integration.
TA Response Time Tracking — Automated tracking of how long each TA takes to review student submissions, with a flag when any submission has been pending for more than 48 hours. Shows on the dashboard as an alert with the TA name, number of overdue submissions, and oldest pending submission age (Q7: "TA submission response time alerts — flagging >48 hours"). Type: Feature addition.
Submission Pace Monitoring — Per-student tracking that compares actual submission count against expected pace based on current week of the semester. Flags students at risk of not reaching the 12-submission threshold in time, enabling early intervention rather than end-of-semester surprises (Q7: "students falling behind on submissions"). Type: Feature addition.
Student Issue Queue — An in-app mechanism for students to report problems, replacing the email-based support channel. Issues appear on the dashboard as an actionable queue with status tracking (new / in progress / resolved), reducing the admin's dependence on email monitoring and creating a record of all support interactions (Q7: "student-reported app issues" on dashboard wish list). Type: Feature addition.
Appointment Utilization Metrics — Dashboard panel showing Year 2 appointment booking rates: how many students booked their weekly appointment, who hasn't booked yet, and overall utilization percentage. Eliminates the manual cross-referencing of the appointment list against the Year 2 student roster that currently happens across two separate screens (Q7: "Year 2 appointment utilization for the week"). Type: Feature addition.
Workflow 5: Manage Appointments / Scheduling
Trigger
Rescheduling requests from students or TAs, TA availability changes, public holiday additions, or weekly schedule verification. Can happen daily during active semester.
Interview Evidence
- Q2: No calendar view of all live sessions and 1:1 appointments across all TAs. TA schedules maintained externally in Google Sheets.
- Q6: Holidays are split between two locations — public holidays under Appointments, but live session holidays are buried under Students Management (a grab-bag page that doesn't logically contain holiday management)
Step-by-Step Flow
Step 1 — Receive rescheduling request or availability change
- Action: A student requests a reschedule via email, or a TA reports they're unavailable for upcoming sessions
- Screen: External — email client
- Information needed: Who is requesting, what appointment/session, what dates are affected
- Missing: No in-app rescheduling request system. All requests come through informal channels.
Step 2 — Check the affected appointment(s)
- Action: Navigate to Appointments > Upcoming Appointments to find the specific appointment
- Screen:
/appointments/index - Information needed: The student's current appointment time, the assigned TA, the group
- Available: Appointment list with filtering, reschedule flag, ability to cancel
- Missing: No search by student name — must filter by group or scroll. No calendar view to see the appointment in the context of the TA's full schedule.
Step 3 — Check the TA's availability for alternative times
- Action: Navigate to Appointments > TA Schedules and select the relevant TA
- Screen:
/appointments/ta-schedule - Information needed: The TA's available time slots for the week
- Available: Individual TA weekly schedule with slot configuration
- Missing: Cannot see this alongside the appointment from Step 2 — must navigate away. Cannot see other TAs' availability for comparison (e.g., if the original TA is unavailable, who else could take the session?). No consolidated view of all TAs' schedules. (Q2)
- Workaround: Check Google Sheets for the full TA schedule overview
- External dependency: Google Sheets
Step 4 — Cancel the existing appointment
- Action: Return to Upcoming Appointments and cancel the original appointment
- Screen:
/appointments/index - Information needed: The appointment ID from Step 2
- Available: Cancel action on appointments
- Missing: No "reschedule" as a single action — must cancel and then create a new appointment. No notification sent to the student automatically when cancelled.
Step 5 — Create the replacement appointment
- Action: Create a new appointment for the student at the agreed time
- Screen:
/appointments/indexthen/appointments/create - Information needed: Group ID, student enrollment ID, TA ID, new time
- Available: Appointment creation form
- Missing: The form requires knowing the group ID and enrollment ID, which aren't immediately visible. Must cross-reference from the student's profile or the group list. No "reschedule" workflow that pre-fills the student and TA from the cancelled appointment.
Step 6 — If this is a TA availability change: Update TA schedule
- Action: Navigate to TA Schedules and modify the TA's weekly availability
- Screen:
/appointments/ta-schedule - Information needed: Which slots to add or remove, the TA's timezone
- Available: Slot management with timezone setting
- Missing: No way to see the impact of the schedule change — how many existing appointments are affected by removing a slot. No bulk reschedule for affected students.
Step 7 — If this is a holiday: Add to the appropriate holidays list
- Action: This is where it gets confusing. There are TWO holiday systems:
- Public holidays (system-wide, affect all appointment availability):
/appointments/public-holidays - Live session holidays (affect group live sessions): Accessible via
/users/student-managementthen/live-session-holidays/index
- Public holidays (system-wide, affect all appointment availability):
- Screens:
/appointments/public-holidaysAND/OR/users/student-management→/live-session-holidays/index - Information needed: What type of holiday is it? Does it affect appointments, live sessions, or both?
- Available: Separate CRUD interfaces for each holiday type
- Missing: These two holiday systems are in completely different parts of the navigation with no cross-reference. Public holidays are under Appointments (logical). Live session holidays are under Students Management (illogical — Q6: "holidays should apply to all live sessions, not just appointments"). An admin adding a national holiday must remember to update BOTH locations. (Q6)
Step 8 — Update external TA schedule spreadsheet
- Action: After any schedule change, update the Google Sheets TA schedule to keep it in sync with the backend
- Screen: External — Google Sheets
- Information needed: What changed in the backend
- Missing: The Google Sheets schedule is a manual mirror of the backend data. Every change must be reflected in both places. There is no sync.
- External dependency: Google Sheets
Step 9 — Notify affected parties
- Action: Email the student and/or TA about the change
- Screen: External — email client
- Missing: No automated notification for appointment changes. No in-app messaging.
- External dependency: Email client
Summary
| Metric | Value |
|---|---|
| Screen count | 4-6 backend screens + 2 external tools (Upcoming Appointments, TA Schedules, Public Holidays, Students Management → Live Session Holidays; plus Google Sheets, email client) |
| Click estimate | 12-20 clicks for a full rescheduling (find appointment: 2-3, check TA schedule: 3-4, cancel: 2, create new: 4-5, update holidays if applicable: 3-5) |
| External tool dependencies | 2 — Google Sheets (TA schedule overview), Email client (notifications) |
| Error-prone points | 3: (1) Forgetting to update BOTH holiday systems for a public holiday — Q6; (2) Creating an appointment at a time the TA isn't actually available (schedule viewed on a different screen) — Q2; (3) Forgetting to update the Google Sheets schedule after a backend change — Q2 |
| Pain quotient | Medium — Individual rescheduling tasks are manageable, but the split holiday system is a design flaw that causes real errors. The lack of a calendar view forces constant screen-switching and external spreadsheet dependency. The workflow is more tedious than it is risky, but the holiday split is a genuine error source. |
Ideal Flow
- Target screen count: 1-2 screens (calendar view + inline scheduling tools)
- Target click estimate: 5-10 clicks
- Target external tool dependencies: 0 (Google Sheets schedule eliminated, notifications automated)
The admin opens a cross-TA calendar view that shows all TAs' availability, all 1:1 appointments, and all group live sessions in a unified weekly or monthly view. The calendar is filterable by gender (for gender-matched scheduling), by level, and by individual TA. When a reschedule is needed, the admin clicks the existing appointment and selects "Reschedule" — a single action that opens an inline panel showing the TA's available slots for the week. The admin picks a new slot, confirms, and the system automatically cancels the old appointment, creates the new one, and sends a notification to the student and TA. For holidays, there is a unified holiday system: the admin adds a holiday once, selects whether it affects appointments, live sessions, or both, and the system applies it across all relevant schedules. No dual entry, no split navigation. The external Google Sheets schedule is eliminated because the calendar view IS the consolidated schedule.
What's consolidated vs. current state: 4-6 backend screens + 2 external tools collapse into 1-2 screens with zero external tools. The 9-step reschedule process (find appointment, check TA schedule, cancel, create new, update holidays, update Sheets, notify) becomes a 3-step inline action (click appointment, pick new slot, confirm). The split holiday system is unified.
Opportunities
Cross-TA Calendar View — A visual calendar showing all TAs' availability, appointments, and live sessions in a single view, with filtering by gender, level, and individual TA. Eliminates the need for the external Google Sheets schedule and the one-TA-at-a-time backend view (Q2: "no calendar view of all live sessions and 1:1 appointments across all TAs"; "TA schedules require a separate spreadsheet for a full weekly overview"). Type: Nav change + feature addition.
Unified Holiday Management — A single holiday system where the admin adds a holiday once and selects its scope (appointments only, live sessions only, or both). Replaces the current split between public holidays under Appointments and live session holidays buried under Students Management (Q6: "holidays should apply to all live sessions, not just appointments"; "holidays are split between two locations"). Type: Nav change.
Reschedule as Single Action — A "Reschedule" button on any appointment that opens an inline panel with the TA's available alternative slots, then handles cancellation of the old appointment and creation of the new one as a single transaction. Eliminates the current 3-step cancel-navigate-create process that requires cross-referencing information from two separate screens (Steps 4-5: "no reschedule as a single action — must cancel and then create a new appointment"). Type: Feature addition.
Automated Change Notifications — Automatic email or in-app notification to affected students and TAs when an appointment is rescheduled, cancelled, or when a holiday is added. Eliminates the manual email step that currently ends every scheduling change (Step 9: "no automated notification for appointment changes"). Type: Feature addition.
Schedule Impact Preview — When modifying a TA's weekly availability (adding or removing slots), the system shows a preview of which existing appointments would be affected by the change, enabling the admin to handle rescheduling proactively rather than discovering conflicts after the fact (Step 6: "no way to see the impact of the schedule change — how many existing appointments are affected"). Type: Feature addition.
Gender-Filtered Calendar View — Calendar filter that shows only male or female TAs and their schedules, supporting the gender-matched scheduling requirements. Enables quick identification of available slots within the correct gender pool when rescheduling or assigning new students (Q2 cross-ref; interview follow-up question on TA gender filtering). Type: Feature addition.
Workflow 6: Onboard / Manage a TA
Trigger
A new TA is joining the team, or the semester is transitioning and TAs need to be moved to the new semester with updated schedules and student assignments.
Interview Evidence
- Q1: "Teachers must be manually moved to new semesters" and "TA appointment schedules cannot be cloned" — each TA's schedule must be re-entered every semester
- Q2: TA schedules require a separate spreadsheet for a full weekly overview. No calendar view.
Step-by-Step Flow
Step 1 — Create the TA account (new TA only)
- Action: Navigate to People > Teaching Assistants, click Create
- Screen:
/users/index?type=2then/users/create?type=2 - Information needed: TA name, email, contact info, gender, timezone
- Available: Account creation form
- Missing: No onboarding checklist. No way to see what steps remain after account creation (schedule setup, student assignment, etc.).
Step 2 — Configure the TA's weekly schedule
- Action: Navigate to Appointments > TA Schedules. Select the new TA and define their weekly availability slots.
- Screen:
/appointments/ta-schedule - Information needed: TA's available days and times, timezone, session duration preferences
- Available: Slot management per TA with timezone configuration
- Missing: No way to clone another TA's schedule as a starting template. No way to clone the same TA's schedule from a previous semester. Each slot must be added individually. If a TA has 15 weekly slots, that's 15 individual additions. (Q1 — "TA appointment schedules cannot be cloned")
Step 3 — Update the external TA schedule spreadsheet
- Action: Add the new TA's schedule to the Google Sheets weekly overview
- Screen: External — Google Sheets
- Information needed: The schedule just configured in Step 2
- Missing: No automatic sync. Manual dual maintenance.
- External dependency: Google Sheets
Step 4 — Set up student groups for the TA
- Action: Navigate to the Student Group management to create groups and assign the TA
- Screen:
/student-group/indexthen/student-group/create - Information needed: Which students should be in this TA's groups, group size limits, level assignments
- Available: Group creation with TA assignment, student addition
- Missing: This screen is not directly accessible from the main navigation — it's accessed through the student or TA detail pages or through a direct URL. No visibility into how many students each TA currently has relative to capacity.
Step 5 — Assign students to the TA's groups
- Action: Add students to the TA's groups, either individually or through auto-assignment
- Screen:
/student-group/add-studentsor via Teacher Assignment Criteria (/teacher-assignment-criteria/index) - Information needed: Which students need assignment, gender matching rules, capacity per TA
- Available: Manual student addition to groups, auto-assignment criteria
- Missing: No preview of what auto-assignment would produce before executing it. No way to see the TA's current student load alongside the assignment interface. For repeat students, the admin wants them auto-assigned to their previous TA — this isn't supported. (Q1 — "repeat students aren't auto-assigned to previous teachers")
Step 6 — For semester transitions: Move the TA to the new semester
- Action: The TA's association with a semester needs to be updated. This may involve updating their profile or their group/enrollment associations.
- Screen:
/users/index?type=2then/users/update?id={ta_id} - Information needed: Which semester the TA should be associated with
- Available: TA profile edit
- Missing: No "move to new semester" action. The admin must manually ensure the TA's groups, schedule, and student assignments are all updated for the new semester context. (Q1 — "teachers must be manually moved to new semesters")
Step 7 — Verify TA's students and appointment slots
- Action: Cross-check that the TA has the right students assigned, the right number of appointment slots, and that students can book appointments
- Screens:
/users/update?id={ta_id}(view assigned students),/appointments/ta-schedule(verify slots),/appointments/index(verify bookings appear) - Information needed: Expected student count, expected slot count, actual bookings
- Available: Individual TA view, individual schedule view, appointment list
- Missing: No unified TA dashboard showing all of this in one place. Must visit 3 screens to verify one TA's setup. Cannot compare across TAs to ensure balanced distribution.
Step 8 — Check TA Reports for baseline
- Action: Navigate to Reports > TA Reports to confirm the TA appears correctly and has a baseline
- Screen:
/reports/index?type=2 - Information needed: TA is listed, student count is correct, no data anomalies
- Available: TA performance data
- Missing: For a new TA, there may be no data yet. No "new TA onboarding status" indicator.
Summary
| Metric | Value |
|---|---|
| Screen count | 6-8 backend screens + 1 external tool (TA list, TA create/edit, TA Schedules, Student Groups, Teacher Assignment Criteria, Appointments, TA Reports; plus Google Sheets) |
| Click estimate | 20-35 clicks (account creation: 4-5, schedule setup: 10-15 for multiple slots, group setup: 4-6, student assignment: 3-5, verification: 4-6) |
| External tool dependencies | 1 — Google Sheets (TA schedule overview) |
| Error-prone points | 3: (1) Forgetting to update Google Sheets after setting up the schedule in the backend — Q2; (2) Not cloning schedules because it's impossible, leading to manual re-entry errors (wrong times, missed slots) — Q1; (3) Repeat students not being assigned to their previous TA because there's no auto-assignment for this — Q1 |
| Pain quotient | Medium — The workflow is straightforward for a single new TA but becomes painful during semester transitions when ALL TAs need their schedules re-entered (multiplied by the number of TAs). The inability to clone schedules turns a simple transition into hours of repetitive manual entry. |
Ideal Flow
- Target screen count: 1-2 screens (TA entity page with onboarding checklist)
- Target click estimate: 10-15 clicks
- Target external tool dependencies: 0 (Google Sheets schedule eliminated)
The admin opens a TA entity page — a single page with tabs for Profile, Schedule, Students, Groups, and Performance. For a new TA, the page shows an onboarding checklist across the top: account created, schedule configured, groups assigned, students assigned, welcome materials sent. The admin works through each tab to complete setup. For the Schedule tab, the admin can either build a new schedule from scratch or click "Clone Schedule" to copy another TA's availability pattern or the same TA's schedule from the previous semester — then adjust individual slots as needed. For student assignment, the system auto-suggests repeat students who were with this TA last semester and flags them for one-click assignment. The Students tab shows current student load with capacity indicators, enabling balanced distribution. For semester transitions, a "Transition to New Semester" action carries forward the TA's schedule, groups, and student assignments into the new semester context, with a review step before confirmation. The Performance tab shows response times, submission review stats, and student outcomes — giving the admin a complete operational view of each TA.
What's consolidated vs. current state: 6-8 backend screens + 1 external tool collapse into 1-2 screens with zero external tools. The verification step (Step 7) that currently requires visiting 3 separate screens becomes a single-page view. Schedule setup time drops from 15+ individual slot additions to a clone-and-adjust workflow.
Opportunities
Schedule Cloning — Copy a TA's weekly availability from the previous semester, or copy another TA's schedule as a starting template, then adjust individual slots. Eliminates the manual re-entry of 15+ weekly slots per TA during every semester transition (Q1: "TA appointment schedules cannot be cloned"; the admin must "manually re-enter" each TA's schedule). Type: Feature addition.
Repeat Student Auto-Assignment — System identifies students who were assigned to a specific TA in the previous semester and auto-suggests them for assignment to the same TA, with one-click confirmation. Maintains student-teacher continuity without manual tracking (Q1: "repeat students aren't auto-assigned to previous teachers"). Type: Feature addition.
TA Onboarding Checklist — A visible checklist on the TA entity page showing all setup steps (account, schedule, groups, students, welcome materials) with completion status. Provides a clear "done" signal and prevents forgotten steps — currently there is no way to see what remains after account creation (Step 1: "no onboarding checklist"). Type: Feature addition.
TA Dashboard (Workload and Performance) — A Performance tab on the TA entity page showing: average submission response time, number of pending reviews, student count vs. capacity, student outcomes (pass/fail rates), and appointment utilization. Creates visibility into TA effectiveness and workload balance that currently requires visiting 3+ screens and has no response-time tracking (Step 7-8: "no unified TA dashboard showing all of this in one place"; Q7: TA response time alerts). Type: Feature addition.
Consolidated TA Entity Page — A single page with tabs (Profile, Schedule, Students, Groups, Performance) that replaces the current workflow of visiting the TA list, TA profile, TA Schedules page, Student Groups page, and TA Reports page as separate screens. Each tab links to actionable views — schedule slots can be managed inline, students can be assigned from the Students tab, groups can be configured from the Groups tab (Steps 1-8 currently span 6-8 screens). Type: Nav change.
Semester Transition Wizard for TAs — A guided "Move to New Semester" action that carries forward a TA's schedule, group structure, and student assignments into the new semester, with a review-and-confirm step. Replaces the manual process of updating the TA's profile, re-entering their schedule, recreating groups, and re-assigning students across multiple screens (Q1: "teachers must be manually moved to new semesters"; Step 6: "no move to new semester action"). Type: Feature addition.
Summary Comparison Table
| Dimension | WF1: Semester Setup | WF2: Student Support | WF3: Semester Close | WF4: Daily Monitoring | WF5: Scheduling | WF6: TA Onboarding |
|---|---|---|---|---|---|---|
| Screen count | 19+ | 5-7 | 8+ | 4-5 | 4-6 | 6-8 |
| Click estimate | 50-80+ | 15-25 | 40-70+ | 12-18 | 12-20 | 20-35 |
| External tool count | 3 (Vimeo, Sheets, InfusionSoft) | 3 (Stripe, Sheets, Email) | 3 (Stripe, Sheets, Email) | 3 (Stripe, Sheets, Email) | 2 (Sheets, Email) | 1 (Sheets) |
| Error-prone step count | 4 | 3 | 5 | 2 | 3 | 3 |
| Pain quotient | Critical | High | Critical | High | Medium | Medium |
| Frequency | 2-3x / year | Daily-weekly | 2-3x / year | Daily | Weekly | 2-3x / year + ad hoc |
| Automation potential | High (content cloning, semester checklist, auto-activation, schedule cloning) | Medium (consolidated profile, Stripe integration, linked deactivation) | High (sequenced promotion → payment workflow, linked deactivation, bulk tools) | High (smart dashboard, Stripe alerts, TA response tracking, submission monitoring) | Medium (calendar view, unified holidays, schedule cloning) | Medium (schedule cloning, repeat student auto-assignment, TA dashboard) |
Cross-Cutting Observations
1. Google Sheets appears in 5 of 6 workflows. It serves as the shadow database for: TA schedules, family payment plans, scholarship tracking, deferment tracking, and EOC assessment outcomes. Any navigation redesign that doesn't account for the data currently living in Sheets will only partly reduce friction.
2. Stripe appears in 3 of 6 workflows. Every workflow involving money (student support, semester close, daily monitoring) requires leaving the backend. Billing integration would collapse multiple external-tool steps into inline actions.
3. No workflow has a "completion view." Semester setup has no checklist. Semester close has no status dashboard. Daily monitoring has no alert surface. TA onboarding has no progress tracker. Every workflow requires the admin to hold the full picture in their head and manually verify each step. This is the most consistent pattern across all 6 workflows.
4. The two Critical workflows (Setup and Close) are mirror images. Setup is about building from nothing with no cloning. Close is about unwinding and transitioning with no linked actions. Both suffer from the same root cause: the system treats each entity independently and never orchestrates entities together into a workflow.
5. Candidate evaluation implications:
- A candidate that reduces screen count but doesn't address external tool dependencies only partially solves the problem.
- A candidate that adds a smart dashboard directly solves Workflow 4 (daily monitoring) and partially solves Workflow 2 (student support — faster issue detection).
- A candidate that adds rich entity pages directly solves Workflow 2 (student support — consolidated profile) and partially solves Workflow 6 (TA onboarding — TA dashboard).
- A candidate that adds workflow orchestration (checklists, sequenced steps, bulk actions) directly solves Workflows 1 and 3 (semester setup and close).
- No single candidate pattern solves all 6 workflows equally. The comparison table above should be the evaluation lens for WS1.5.