v2 Review — Pre-Meeting Framework (5-Category Risk Model)
V2 Review — Categorization Framework
This document proposes a framework for triaging the stakeholder feedback captured in BACKEND-RAMBLINGS.md against the existing spec (docs/admin-spec/) and mockup implementation (src/pages/). Each item is classified by its risk to the evaluated architecture of the spec, so we know what to build directly, what needs clarification, and what needs an architectural decision before we touch it.
The working principle: the spec is not arbitrary. Enhanced Candidate A was selected via structured multi-candidate evaluation in WS1.5 (scoring 30/35, top of 3 candidates), and specific mechanisms inside it — gated Close Workflow, 8-domain sidebar, entity detail pages — were designed to solve documented admin pain points with quantified workflow improvements. Changes that touch those mechanisms carry a risk of regressing the workflow benefits that justified the redesign. Changes that don't touch them are low-risk additions.
1. The Framework: 5 Categories + Tags
Category A — Refinements
Small additions or modifications that build on existing spec items (new columns, new filter options, new fields, new action buttons, label changes). Don't touch the IA or the workflows.
- Risk: Low
- Action: Implement (after brief confirmation)
- Examples: Adding gender column to students list; adding "Reassign Submission" action; adding date-range filter to Upcoming Appointments
Category B — Additive Features
Net-new capabilities that stack on top of the existing IA without changing it. New tabs within existing entity pages, new subsections within existing domains, new fields or data concepts that don't disturb the shape of the product.
- Risk: Low-medium (scope, not structure)
- Action: Draft a spec addition, then build
- Examples: Admin Notes tab on Student Detail; Onboarding Support tab on Semester Hub; One-to-One Appointment Usability dashboard; Bulk-add UI for live sessions
Category C — Replacements / Reframings
Stakeholder proposes a different model for something the spec already solves. The spec's model was chosen for documented reasons; her model may or may not preserve those benefits. These require an explicit architectural decision with rationale, not a default swap.
- Risk: HIGH (may regress workflow benefits)
- Action: Architectural decision with explicit rationale; if we replace, we must confirm the spec's original benefit is preserved or explicitly accepted as a loss
- Examples: Semester "End Checklist" (flat) vs. spec's "Close Workflow" (5-step gated); Assignment Criteria weighted-algorithm vs. rules engine
Category D — Structural Additions
Introduces a new top-level domain, new first-class sub-nav, or a cross-cutting concept (identity, audit trail) that changes the evaluated IA. These alter the mental model that the WS1 scoring was based on.
- Risk: HIGH (changes architecture scored in WS1.5)
- Action: Architectural decision; assess against the 6 core workflows in
00-spec-index.md§ 6 - Examples: Communication as a 9th top-level domain; New Semester Registration Tracker as a new Student Management subsection; "Send as TA/admin" identity-switching as a cross-cutting concept
Category E — Deferred
Stakeholder explicitly punted. Blocks building until she defines the scope.
- Risk: N/A until unblocked
- Action: Schedule a working session
- Examples: Reporting specifics (financial/student/composition metrics); Issue Queue state machine & action set
Tag — Backend-bound
Orthogonal to the 5 categories. Marks any item whose real behavior requires backend/integration work beyond the mockup. In the mockup we show the UI affordance; production does the actual work.
- Examples: Zoom auto-upload of recordings; Stripe cancel/pause variants; automation email sequencing engine; 48-hour late-response SLA reminder job; InfusionSoft tag sync
2. What's Changed From My Earlier Analysis
After re-reading the spec with the content-vs-semester separation confirmed as intentional, two items I had flagged as "structural" collapse:
| Item | Earlier classification | Revised classification | Why |
|---|---|---|---|
| "Master + per-semester copy" pattern for content | Structural — new data model | Category A (Refinement) | The spec already has Clone from Previous (semester hub §3.6, welcome package §4.5, email management §5.5) with OQ5 resolution of "independent copies." This is effectively what she's describing, just phrased differently. No new data model required. |
| Assignments appearing in Content domain | Structural — missing screen | Ambiguity | Spec deliberately places Submissions under Student Management (student activity) and keeps Content for passive curriculum materials. Her placement in Content is likely a narrative slip, not an IA change. |
These reclassifications reduce the "high-risk" count meaningfully.
3. Categorization by Domain
A compact catalog. Every ask in BACKEND-RAMBLINGS.md maps to exactly one category. Backend-bound items are marked with [backend].
3.1 Student Management
Category A — Refinements
- Students list: add gender column; add appointment count column (see Ambiguous in §4.1)
- Student Detail › Submissions: reject-under-review action; copy/download/send recording link buttons; bulk delete via selection
- Student Detail › Submissions: per-week submission exception UI
- Student Detail › Actions: "Enroll in Mastery Course" action
- Failed Sign-ups: "Activate Account" action
- Submissions Management (cross-student): reassign submission action; student name search; submissions close-date picker; gender column; "feedback received" date column
- Student Detail › Appointments: semester filter for past appointments
Category B — Additive Features
- Student Detail › Admin Notes tab (new tab)
- Submissions Management: 48-hour workday late-response flag
[backend](UI badge + reminder job)
Category D — Structural Additions
- New Semester Registration Tracker subsection (see §4.2)
Category E — Deferred
- None in this domain
Ambiguities
- Appointment count scope (all students vs mastery-only; scheduled vs completed)
- "Resend Credentials" on Failed Sign-ups — does this mean temp password or login credentials?
- Appointment time display in student or EST timezone?
- Level 0 bulk-promote target level: ramblings say "level two"; spec says Level 1. Likely a stakeholder misstatement; confirm.
3.2 Semester Management
Category A — Refinements
- Semesters list: Edit semester action on each row
- Semesters list: more prominent auto-transition button
- Setup Checklist: implement the existing "Add Note" feature (already in spec §3.6, missing in code)
Category B — Additive Features
- Setup Checklist: ability to add custom checklist items
- Onboarding Support tab — 3 sub-features:
- Telegram/WhatsApp group link management with student-access scoping
- Welcome videos for home screen
[backend] - Countdown timer to next semester start
Category C — Replacements
- Semester "End Checklist" in place of spec's "Close Workflow" (see §4.3)
Category E — Deferred
- End-checklist default items: "need to be discussed"
Ambiguities
- Submission Close Date field — does this exist elsewhere? Per-semester/per-level/per-assessment scope?
- "One-to-One Schedules" checklist item — distinct from TA Schedules, or same thing?
- Telegram/WhatsApp access control model (role/level/per-student)
- Welcome videos scope (tutorial vs. semester-specific)
3.3 Content
Category A — Refinements
- Video Lessons: multi-video input UI inside a lesson; description field
- Video Lessons: clone-from-previous at semester level (exists in spec; confirm implementation)
- Resources: multi-level tagging (data model tweak:
level→levels) - Resources: support for links and video URLs as resource types
- Recordings: lesson-class vs QRC type column; time-of-day column
Category B — Additive Features
- Recordings: Zoom auto-upload + auto-tag by level/gender
[backend]— UI affordance needed (sync status, manual override)
Ambiguities
- Assignments location: she described them in Content, spec places them under Student Management. Likely a stakeholder narration slip given the intentional separation.
- Zoom integration UI scope (sync button, pending-review queue, manual override?)
3.4 Scheduling
Category A — Refinements
- Live Sessions: teacher field on create form
- Live Sessions: recurrence + date-range controls (semester start default, end-date override, single-date option)
- TA Schedules: date-bound slots within a semester
- Upcoming Appointments: date range filter; reschedule action
- Calendar: cancel-session, mark-session-inactive, reassign-session actions
Category B — Additive Features
- Bulk-add live sessions (same name, different times/days/teachers)
- Bulk-add TA appointment slots (same TA, different time slots)
- Cancellation reason templates + send message on cancel
- "Needs replacement" flag on live sessions when TA is on personal break (cross-cutting with TA Holidays)
- One-to-One Appointment Usability dashboard (gender-split slot fill rates; week-by-week underutilized slots; remove-slot button)
Ambiguities
- "Needs replacement" computation: manual, automatic from TA break, or both?
- Gender filter on calendar: TA gender vs. student gender for appointments?
- Bulk-add UX pattern (modal with inline add rows?)
3.5 Teacher Management
Category A — Refinements
- Teachers list: semester filter
- Teachers list: live-sessions-per-week and session-slots-per-week metrics
- Teacher profile › Performance tab: average-grade-given metric
- Teacher profile › Performance tab: "submissions received" (total) vs. "reviewed" disambiguation
Category B — Additive Features
- Teacher Assignment Criteria: per-TA capacity configuration (not a global rule)
- Teacher Assignment Criteria: per-TA level specialization matrix
- Teacher Assignment Criteria: new-vs-returning student routing configuration
- Teacher Assignment Criteria: visual representation of weighted distribution algorithm
Category C — Replacements
- Assignment Criteria shape: rules engine vs. per-TA configuration matrix (see §4.4)
Ambiguities
- Weighted distribution: deterministic from capacity (auto) or admin-configurable weights?
- Conflict resolution when constraints can't all be satisfied
- Semester binding on Assignment Criteria — entry point is Semester Hub per spec; is that sufficient?
3.6 Communication
Category D — Structural Additions
- Communication as a 9th top-level domain (see §4.5)
- "Send as TA / Send as Admin" identity switching as a cross-cutting concept (see §4.6)
Category B — Additive Features (contingent on D above)
- Automation Emails: sequence view (search student → see future email schedule)
- Blast Emails screen (compose, template library, filter-by-criteria recipient selection)
- Push Notifications: recipient filtering (enhance existing)
- Announcement Board screen
- Private Messages screen (bidirectional)
- Communication Logs screen
Ambiguities
- Sequence view data source (all students vs. sample vs. searched student)
- Template library: unified or separate (automation vs. blast)
- Scheduling: send-now only or future scheduling?
- Identity-switching reply routing (reply to named TA, original composer, or both?)
3.7 Billing & Payments
Category A — Refinements
- Family Plans › Family member: per-member discount % field
- Family Plans › Family member: per-member semester status (repeat/regular/mastery) field
- Payment Plans: grouped presentation (Standard / Family / Scholarships / Discounts)
- Subscription cancel variants on Student Detail › Payments: verify all 4 variants (cancel-now, cancel-at-date, pause-with-unpause-date, send-payment-link) are in UI
[backend](most already in spec via Stripe pause_collection + cancel_at_period_end) - "Verify Stripe Sync" result modal instead of toast
Category E — Deferred
- None (cancel variants deferred to live Stripe integration but spec'd)
3.8 Reporting
Category E — Deferred
- All three stakeholder-named categories (financial, student, student composition) need working-session scoping
- Financial reports are not in the current spec at all and would be Category B (Additive) once scoped
3.9 Admin & System
Category E — Deferred
- Issue Queue: "Handle it" action semantics; delete vs. resolve distinction; state machine (Resolved terminal? backward transitions?)
Category A — Refinements
- Admins screen: fully covered, no changes needed
4. Deep Dive: Categories C and D
For each Category C (Replacement) and Category D (Structural Addition) item: what the spec currently does, why it was designed that way, what her ask implies, second-order impacts, and a recommendation.
4.1 New Semester Registration Tracker (Category D, Student Management)
Her ask: A dedicated subsection under Student Management, shown during the registration window. Lists both returning and new students enrolling in the upcoming semester. Columns include current level, previous level, registration semester, enrollment date, first-assessment-sent indicator (for Level 0), status (graduate/repeat/new). Key action: filter Level 0 students without first assessment → select all → bulk promote to Level 2 (the spec says Level 1 — confirm which).
What the spec currently does:
Student Management > Promoted Students— shows already-promoted students after close. Retrospective.Semester Hub > Enrollment tab— shows current semester's enrolled students with filters.Semester Management > Operations > Level 0 Promotion card— the bulk-promote action for Level 0 students without submissions (spec §7.4 Card 5).
Why it was designed this way: The redesign consolidates student-state views on the Student Detail page (6 tabs — workflow WF2 reduced from 5-7 screens to 1-2). The Semester Hub's Enrollment tab gives per-semester visibility inside the semester context. The Level 0 bulk promote is an operation, placed with other operations.
What her ask implies:
- A list view optimized for the registration window (temporal context), not the semester context.
- "New vs returning" as a first-class filter at the list level, not just as a data attribute.
- The Level 0 bulk promote action co-located with the list, rather than tucked into Operations.
Second-order impacts:
- Splits student-list logic across two screens (
StudentsandRegistration Tracker). Admins need to know which to use when. - Competes with Semester Hub › Enrollment for the "who's in this semester" question. May confuse WF1 (Semester Setup) workflow.
- The Level 0 bulk promote action is already surfaced in Operations; moving or duplicating it here creates two entry points to the same action.
Recommendation:
- If the temporal framing (registration window vs. semester context) is the real need, this is Category B (additive): add a
Registrationfilter preset and an entry-point into Semester Hub › Enrollment from Student Management for the active-registration window. Locate the bulk-promote action where she's looking for it (list view), not hidden in Operations. - If she really wants a standalone screen, add it as a sub-nav item but make sure it complements (not duplicates) Semester Hub › Enrollment. Document the division of responsibility.
- Confirm Level 0 → Level 1 vs Level 2 (spec says Level 1; ramblings line 108 says Level 2; likely misstatement).
4.2 Appointment Count column on Students List (Ambiguity, Student Management — not strictly Cat C/D but worth flagging)
Her ask has a subtle scope issue: "for mastery course students, the number of meetings and number one-to-one appointments." Could mean (a) a column visible only for mastery students, (b) a column aggregating across all students, or (c) two columns. Decide before implementation — the spec has a single student list.
4.3 "End Checklist" in place of Close Workflow (Category C, Semester Management)
Her ask: A "Semester End Checklist" tab on Semester Hub — a simple flat checklist with default items (TBD) and ability to add custom items. Parallel in structure to the Start Checklist.
What the spec currently does:
Semester Hub > Close Workflow— a 5-step gated workflow:- Review EOC assessments (set pass/fail per student)
- Confirm Promotions (who is continuing? who leaving?)
- Bulk Payment Setup (create/renew Stripe subscriptions) — gated behind Step 2
- Handle Leavers (linked deactivation) — can run in parallel with Step 3
- Verify (summary dashboard + mark-complete)
Why it was designed this way:
The gate between Step 2 and Step 3 is load-bearing. It is the direct solution to documented workaround W4 in 04-semester-management.md: "Payment setup done before promotions finalized — tracked in Stripe Dashboard + guesswork → Close Workflow gate between Step 2 and Step 3." This specific mechanism was called out in WS2 billing discovery. The quantified workflow improvement is WF3: Semester Close reduced from 8+ screens / 40-70 clicks / 3 external tools to 4-6 screens / 15-25 clicks / 0 external tools (00-spec-index.md §6, §10).
What her ask implies: Replacing the gated workflow with a flat checklist discards the Step-2→Step-3 gate. Without the gate, nothing stops the admin from setting up payments before promotions are finalized — which is the exact pain point the redesign was built to fix.
Second-order impacts:
- Reintroduces workaround W4 (payment before promotion) — the WS2 billing pain point.
- Regresses WF3 workflow improvement — the measured 38-50% screen reduction is partly attributable to the gated sequence eliminating redundant back-and-forth.
- Loses the linked-deactivation workflow (Step 4) unless custom items are added — custom items in a checklist don't carry the same structured semantics (confirmation modals, Stripe API orchestration, audit logs) as spec'd steps.
- Loses Step 5 verification dashboard, which catches unresolved exceptions before the semester is marked closed.
Recommendation: Do not replace Close Workflow with a flat checklist. Two options that address her likely underlying concern:
- Option A (preferred): Keep Close Workflow as-is but rename the tab label to "End Checklist" if she finds "Close Workflow" confusing. Present each step with a checklist-like visual inside the step, and allow admin-defined notes/custom items within steps (not replacing them).
- Option B: Have both — a "Close Workflow" for the gated billing/promotion ritual, and an "End Checklist" for ad-hoc tasks (e.g., "email instructors to wrap up"). The Close Workflow remains load-bearing; the checklist is supplementary.
This is the single highest-risk item in the review. Push back explicitly before swapping.
4.4 Assignment Criteria — Rules Engine vs. Per-TA Matrix (Category C, Teacher Management)
Her ask: Per-TA-per-semester configuration of capacity, level specialization, new-vs-returning routing, plus a weighted distribution algorithm ("if one TA can take 10 and another 50 and we have 6 total, split 1:5").
What the spec currently does:
- A generic rules engine with rule types (Gender Match, Timezone, Level, Capacity) and priority ordering.
- A separate system-level auto-assign-to-previous-TA toggle for repeat students.
Why it was designed this way: The spec's rules engine is flexible — any combination of constraints can be expressed. It was framed as a configuration-light system consistent with the admin's stated preference for automation (WS1 Q4: "I would group things by what they're about").
What her ask implies: A per-TA matrix is more declarative and legible for this admin's mental model ("TA Smith handles Level 1–2 female students, max 12"). The weighted distribution algorithm is a specific behavior with a specific rule ("fill each TA's capacity proportionally"), not a generic rule that can be tuned.
Second-order impacts:
- Replacing rules with a matrix loses flexibility (what if a new routing dimension comes up?).
- Two paradigms side-by-side (rules + matrix) increases UI complexity and can create conflicts.
- The weighted distribution algorithm needs somewhere to live. Pure matrix doesn't express it; pure rules engine doesn't either. Could be a separate "Distribution Strategy" setting on top.
Recommendation: Hybrid approach:
- Per-TA matrix becomes the primary configuration surface (capacity, level, student-type). This is concrete and matches her mental model.
- A small set of named rules layered on top of the matrix (gender match auto, repeat-student auto-assign toggle, distribution strategy dropdown: "Weighted by capacity" / "Round robin" / "Manual").
- Drop the generic rules engine's more exotic rule types (Timezone proximity — she didn't mention and may not want).
- Render a read-only preview: "If 6 students enroll, current config will assign: [TA A]: 1, [TA B]: 5."
This is a substantial spec expansion (07-teacher-management.md §4 needs rewriting) but not a full regression — the matrix is additive to what exists.
4.5 Communication as a 9th Top-Level Domain (Category D, Communication)
Her ask: A dedicated Communication section in the sidebar with 6 subsections (Automation Emails, Blast Emails, Push Notifications, Announcement Board, Private Messages, Communication Logs), plus identity-switching (§4.6 below).
What the spec currently does:
Semester Management > Email Management— automated email templates, semester-scoped.Admin & System > Notifications— broadcast push.Admin & System > Issue Queue— student-to-admin issue tracking (one-way).- No blast emails, no announcement board, no private messaging, no logs, no identity switching.
Why it was designed this way: Email Management sits under Semester Management because emails are semester-scoped (welcome emails for Spring 2026, promotion emails tied to that semester's close). Notifications is under Admin & System because broadcasts are operational tools. The spec didn't scope bidirectional messaging or an announcement board — those are effectively new product surfaces.
What her ask implies: Adding 4-5 new screens (blast email, announcement, private messages, logs) plus sequence-preview for automation emails. If these all go under a new Communication domain, that's a 9th top-level item.
Second-order impacts:
- IA change: Enhanced Candidate A was evaluated as "8+1 domains" (8 domain sidebar + Dashboard). The WS1.5 scoring was based on this mental model. A 9th domain isn't disqualifying, but it warrants a sidebar re-review (do other domains feel crowded? is the admin's mental model still a match?).
- Email Management: Currently under Semester Management because emails are semester-scoped. If Automation Emails moves to Communication, the semester linkage becomes a filter rather than a nav structure. Defensible but non-trivial.
- Logs: Already a screen under Reporting (
Reporting > Logs). A Communication Logs screen creates two logs locations. Should they be unified, linked, or kept separate? - Issue Queue overlap: Private Messages (bidirectional admin-student) overlaps in purpose with Issue Queue. The distinction (Issue Queue = ticketed support with priority/status; Private Messages = conversational) needs to be drawn explicitly or the two should be merged.
Recommendation: Add Communication as a 9th domain with these rules:
- Move Email Management out of Semester Management into Communication › Automation Emails. Preserve semester-scoping as a filter. Cross-link from Semester Hub › Setup Checklist (the deep-link pattern already exists).
- Move Notifications out of Admin & System into Communication › Push Notifications. Enhance with recipient filtering.
- Build 4 new screens: Blast Emails, Announcement Board, Private Messages, Communication Logs.
- Resolve Issue Queue vs. Private Messages: recommend keeping Issue Queue as ticketed support (priority/status/handle/resolve) and Private Messages as conversational. They serve different purposes.
- Revalidate against WF1–WF6 to ensure the 9-domain structure still holds up.
4.6 "Send as TA / Send as Admin" Identity Switching (Category D, cross-cutting)
Her ask: Any outbound communication (email, push, announcement, private message) can be composed by an admin but sent "in the name of" a specific TA or another admin.
What the spec currently does: Nothing. Communications are implicitly sent "from QuranFlow" or similar.
Why it wasn't in the spec: Not surfaced in WS1/WS2 interviews. The redesign focused on consolidating information surfaces, not on communication identity.
What her ask implies: A "Send as" selector on every communication form, plus a backend audit trail (who composed vs. who was named as sender). Also a policy decision about reply routing.
Second-order impacts:
- Audit trail: Every communication needs
composed_byandsent_asfields. Communication Logs must surface both. Permissions (who can send as whom) must be defined. - Reply routing: If student replies to "Ahmed" (TA), where does the reply go? Ahmed? The composer? Both? Current Email Management doesn't handle replies at all — this adds an inbox concept.
- TA awareness: Should the TA be notified that an admin sent something in their name? If not, TAs can be impersonated without their knowledge.
- Deactivated TAs: If a TA leaves, do their historical sent-as messages retain the name or redact?
- Cross-domain impact: This concept bleeds into Billing (payment reminders "from Ahmed"?) and Scheduling (cancellation messages). Scope creep risk.
Recommendation: Treat this as a Category D structural decision, not a Category B feature. Before implementing:
- Scope narrowly: which communication types support Send-as? (Recommend starting with Blast Emails and Private Messages only.)
- Decide reply routing explicitly in the spec, not implicitly.
- Require TA acknowledgement or notification for send-as actions.
- Log both composer and sender in Communication Logs, always.
This is a real product concept (it's common in CS tools), but it's new scope. Worth a separate conversation before building.
5. Summary Statistics
| Category | Count | Risk | Action |
|---|---|---|---|
| A — Refinements | ~32 items | Low | Implement after brief confirmation |
| B — Additive Features | ~15 items | Low-medium | Spec addition, then build |
| C — Replacements | 2 items (End Checklist; Assignment Criteria shape) | HIGH | Architectural decision with rationale |
| D — Structural Additions | 3 items (Registration Tracker; Communication domain; Send-as identity) | HIGH | Re-evaluate against WS1 workflow analysis |
| E — Deferred | 3 areas (Reporting; Issue Queue; End Checklist default items) | Blocked | Working session |
Backend-bound tag: ~8 items (Zoom sync, Stripe variants, email sequencing engine, late-SLA job, InfusionSoft, audit trail for Send-as, push delivery tracking, webhook-cached billing alerts).
6. What This Means for a New Spec
Nothing in Category A or B threatens the existing spec's benefits. Most of the ramblings can land as additions or refinements to current spec sections.
The 2 Category C items are where we can regress the workflow analysis. Close Workflow especially is load-bearing and the gate must be preserved. Assignment Criteria shape is flexible but needs decision before redesign.
The 3 Category D items expand scope and/or restructure IA. They warrant revalidation of the 6 workflow analyses in 00-spec-index.md §6 — especially WF1 (Semester Setup) and WF4 (Daily Monitoring), which touch Communication and Registration flows.
Proposed sequence:
- Resolve Category C items via architectural decision with her (§4.3, §4.4)
- Resolve Category D items via architectural decision + WF revalidation (§4.1, §4.5, §4.6)
- Unblock Category E with working sessions (Reporting, Issue Queue, End-checklist items)
- Update
docs/admin-spec/with the decisions - Build Category A and B items against the updated spec
Only after steps 1-4 should any implementation work start — the risk of building to the wrong spec is higher than the cost of the decision-making sessions.