QuranFlow iOS App — Requirements Traceability Matrix
Part of the production handoff package, alongside FEEDBACK-SYNTHESIS.md
(the synthesized stakeholder asks) and handoff/PRODUCT-SPEC.md (the screen-by-screen
functional spec). This document's job is narrower and mechanical: prove that every
stakeholder ask landed somewhere — designed, deferred, or rejected — so nothing
silently fell through between the four feedback sources (Coaches' Questionnaire,
IT Revamp Discussion transcript, App Wishlist, Mock App Feedback) and the finalized
Sakīna mockup at ../mockup/.
Sources checked against: FEEDBACK-SYNTHESIS.md, ../mockup/REVIEW.md
(adjudicated design decisions), ../mockup/src/main.jsx (finalized screen
inventory — artboard labels are cited as design evidence below), spot-checked against
the individual ../mockup/src/sak-*.jsx files, and — where the synthesis
summarized rather than quoted — the raw source files in
/feedback for new app/ (the Coaches' Questionnaire responses, the App Wishlist,
the IT Revamp transcript, and the Mock App Feedback doc).
1. How to read this document
Every ask gets exactly one status:
| Status | Meaning |
|---|---|
| Designed | Built into a mockup screen. The Design evidence column names the artboard label from main.jsx (or the specific component/line, when spot-checked). |
| Partially designed | Part of the ask is on-screen; the disposition note says what's missing and why. |
| Deferred — backlog | A valid ask, not in v1 scope. Restated with pickup context in §3. |
| Rejected | Considered and decided against. The note says why. |
| Ops/process | Not an app feature at all — routes to a business-process owner (Hammad's program-strategy items, coach compensation policy, etc.), not to engineering. |
"Designed" is a claim about the mockup, not about shipped code — the mockup is the design evidence; implementation fidelity is verified separately during build QA.
2. The matrix
Coach review workspace
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Assignment text visible while reviewing audio (the single most damning current-app gap) | Wishlist "View Submission Assignment Text During Review"; Questionnaire 8/11 coaches' #1 workspace complaint; IT discussion | Designed | SakSubmissionFeedback combines assignment/passage text (SakPassageCard) with audio player and notes in one object (F1, sak-feedback.jsx); Coach side: "Coach — review a submission" (SakCoachReview, section C) |
| Unified workspace: assignment text + per-student notes/history + time tracking + feedback recorder on one screen | Questionnaire 8/11 coaches | Designed | "Coach — review queue" (SakCoachQueue), "Coach — review a submission" (SakCoachReview), "Coach — student record" (SakCoachStudent) — section C, sak-coach.jsx. Time tracking: see Attendance/data row below |
| Notes on submissions: private (coach-only) + student-facing, same place | Wishlist "Notes on Submissions"; Questionnaire | Designed | SakCoachReview — FbNoteRow timestamped notes plus the "For Sarah" / "Private — just me" audience split (sak-coach.jsx:184-200) |
| Cross-teacher shared notes, visible to every coach who has taught the student (Year 2 emphasis) | Wishlist "Year 2 Student Attendance Record & Shared Notes"; Questionnaire | Designed | SakCoachStudent — "Coach notes" section marked "visible to all coaches" (sak-coach.jsx:285-291); the Rania/Amina resolution (REVIEW.md A4) keeps one legitimate cross-coach note ("Ust. Rania · Week 6 · one-to-one") specifically to demonstrate this |
| Student list filtering (by submission count, alphabetical, level, oldest pending) | Wishlist "Student List Filtering" | Partially designed | "Coach — review queue" sorts oldest-pending-first by default (sak-coach.jsx:47, "the coaches' own filter ask"); the other filter axes (count, alphabetical, level) are not built as UI in the mockup — same screen, additional filter chips needed at implementation |
| Timestamps in feedback (mark a point in the recording) | Wishlist "Timestamps in Feedback"; Questionnaire | Designed | SakCoachReview FbNoteRow — notes carry a timestamp stamped at the playhead ("Marked at 0:41 while listening", sak-coach.jsx:179-180) |
| Coach access to all levels/mastery courses + lesson-breakdown preview, for prep reference | Wishlist "Access to All Levels & Curriculum Overview" | Deferred — backlog | Not represented on any Coach-app artboard in main.jsx section C; see §3 |
| Weekly assignments & lesson overviews surfaced for Year 2 appointment prep | Wishlist "Weekly Assignments & Lesson Overviews for Year 2 Content" | Deferred — backlog | Same gap as above — Year 2 appointment screens (F5) cover booking/attendance, not lesson-reference material; see §3 |
| First Assessment guideline surfaced before review | Wishlist "First Assessment Guideline" | Deferred — backlog | See "assessment rubrics" in §3 |
| End of Course Assessment (EOC) guideline surfaced before assessing | Wishlist "End of Course Assessment Guideline" | Deferred — backlog | See "assessment rubrics" in §3 |
| Pass/fail decision button per student | Wishlist "Pass / Fail Decision per Student" | Partially designed | The submission object's data model includes pass/fail (FEEDBACK-SYNTHESIS.md "Business rules"), but no Coach-app artboard shows the pass/fail control explicitly — closest is SakCoachReview/SakCoachStudent; needs an explicit control at implementation |
| Ready-made lesson asset banks (slides, games, exercises) for coach prep | Questionnaire (Radwa: "we could also potentially create some slides, games, etc for each lesson"); FEEDBACK-SYNTHESIS.md explicit backlog | Deferred — backlog | See §3 |
Feedback loop
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Submissions and feedback tied into one integrated experience (not two separate places) | Wishlist "Submissions & Feedback Integrated in One Place"; convergent finding #1 | Designed | SakSubmissionFeedback / SakSubmissionPending (F1) — single object: assignment text, audio, annotations, notes, status |
| Visual/annotated feedback synced to audio: mark up submission text, comparison clips, makharij diagrams | Questionnaire 5/11 coaches; Wishlist "Annotation & Markup on Submission Text"; Yasmine (questionnaire): "visual plus comparison clip from their submission" | Designed | SakCoachReview/SakSubmissionFeedback — FbNoteRow text-span-anchored notes with tone (danger/warm) rendered against SakPassageCard; comparison-clip/makharij-diagram media types are not separately modeled — annotation anchoring is the built primitive, media type is a content decision at implementation |
| Coach can re-record a portion of the student's take within feedback, to demonstrate correct pronunciation | Wishlist "Record Student's Recitation Within Feedback (Year 1)" | Deferred — backlog | Not present on any F1/Coach artboard; see §3 |
| Correction–resubmission loop: re-record just the corrected portions, coach acknowledges | Questionnaire 5/11 coaches (two independently) | Designed | "Practice the corrections" (SakRecPractice) and "Practice — review take" (SakRecPracticeReview), F1. Practice takes don't burn attempts (sak-feedback.jsx:273,542); "Attach to feedback" CTA closes the loop back to the submission (REVIEW.md C3) |
| Voice replies instead of the text comment box, prompted right after feedback playback | Questionnaire 3/11 coaches (two independently) | Designed | SakSubmissionFeedback "Voice reply" affordance directly under the heard feedback (sak-feedback.jsx:277-295) |
| Comment box replaced with something more specific than free text ("Comment is very general") | Yasmine (questionnaire) | Partially designed | Voice reply (above) is the built alternative to the text comment box; the specific "notes-to-self" reflection prompt is a separate, distinct ask — see Student experience row below and self-reflection item in §3 |
| Comment-truncation bug (current text comments get cut off) | Mock App Feedback; FEEDBACK-SYNTHESIS.md convergent finding | Ops/process (launch-day bug class) | Not a design gap — the comment box itself is being de-emphasized in favor of voice reply, but truncation as a class of bug must be verified fixed wherever text input persists (note field, message thread). See §4 launch checklist |
| AI-generated feedback summary for teacher and student | Wishlist "AI-Generated Feedback Summary"; IT discussion "flagged as a priority even ahead of the app"; Yasmine (questionnaire) | Deferred — backlog | See §3 |
| Easy, prominent access to previous feedback, including past semesters | Wishlist "Easy Access to Previous Feedback"; convergent finding #6 | Designed | "Submissions archive" (SakSubmissions, section 02) — full multi-semester history per FEEDBACK-SYNTHESIS.md data model; "Submissions — empty archive" (SakSubmissionsEmpty, section 06) covers the empty state |
| Revoke submission without burning the weekly 2-submission limit (5–10 min window) | Wishlist "Revoke Submission Button"; data model | Designed | SakSubmissionPending — "Revoke window open" with live countdown, "won't count as one of your two weekly attempts" (sak-feedback.jsx:355-375). REVIEW.md A1 resolved a duplicate-countdown bug by making this screen the sole owner of revoke UI |
| 2 submissions/week limit, visualized | Wishlist data model; questionnaire | Designed | SakRecHeader attempts dots (sak-recording.jsx:4-20); "Recording — No attempts" state (SakRecNoAttempts, section 01) |
Schedule / time
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Weekly live-class schedule, easy to view/access for all students | Wishlist "Weekly Live Class Schedule"; Wishlist "Live Session Schedule with Filters & Reminders" (teacher side) | Designed | "Sessions — Tuesday timeline" (SakSchedule, section 00); "Week at a glance" (SakWeekAtGlance, F2), reached via the Sessions tab's calendar icon (REVIEW.md B2) |
| All times must display in the student's local time; kill the "+7 hours in my head" math | IT discussion (live timezone bug: calendar shows 7 PM for an 8 PM class); Mock App Feedback ("local time, not hardcoded EST"); convergent finding #3 | Designed | F2's one-line zone banner ("All times shown in Toronto (EDT)") is the canonical treatment (REVIEW.md B3); every bare "EST"/"EDT" suffix elsewhere was swept out (sak-schedule.jsx, sak-profile.jsx, sak-states.jsx, sak-core.jsx) and replaced with local-time-only copy |
| DST misalignment across US/Europe/Turkey/Egypt must not silently break the schedule | IT discussion; convergent finding #3 | Ops/process (launch-day requirement) | The mockup fixes the display rule (always local time, one zone banner); DST-transition correctness is a backend/timezone-library implementation and QA concern, not a screen. See §4 |
| 15-min student / 30-min teacher session reminders, add-to-calendar | Wishlist "Appointment Reminder Notification", "Add Appointment to Calendar", "Live Session Schedule with Filters & Reminders" | Designed | Notification settings row "Session reminders — 15 min before a live session" (sak-settings.jsx:45-46); SakTodayCountdown "Add start date to calendar" CTA (F4); coach-side 30-min reminder referenced in SakCoachSchedule |
| Hybrid 1:1 booking: pre-book the same weekly slot for all 15 weeks, or book week-to-week | IT discussion decision; Wishlist "Fixed or Flexible One-to-One Appointment Booking" | Designed | "Book your one-to-one" (SakBookAppointment, F5) — "Book Tuesdays 9:20 AM · all 15 weeks" recurring CTA; SakCoachSchedule distinguishes "Recurring · Week 8" vs "This week only" per booking type (REVIEW.md D1) |
| Student availability collected at onboarding; hybrid teacher-first/student-exception scheduling | IT discussion decision | Partially designed | SakOnbAvailability exists but is explicitly NOT part of first-run onboarding (REVIEW.md C5) — it's asked during Year-2 booking instead, relabeled "Availability — asked during Year-2 booking" (F5). Core 6-step onboarding does not collect availability; the underlying scheduling philosophy (student-first vs teacher-first) is unresolved — see student-centric QRC item in §3 |
| Eliminate the dedicated "Behind" screen; use a notification instead | Mock App Feedback | Designed | No "Behind" artboard exists in main.jsx; "multi-week-behind" is called out as needing explicit design — see §3 |
| Reveals coach line, what's covered, RSVP, and duration on session detail | Mock App Feedback; Wishlist attendance items | Designed | SakSessionDetail/SakSessionDetailQRC (sak-schedule.jsx:356-598), annotated as notification-tap deep-link destinations (REVIEW.md C4); RSVP affordance described in the in-code comment at sak-schedule.jsx:211 |
| Two "my week" surfaces (Sessions tab timeline vs. Week at a glance) reconciled | Internal mockup consistency finding | Designed | REVIEW.md B2 — kept both, Sessions tab calendar icon routes to Week at a glance; full merge explicitly out of scope for the mockup (documented in spec instead) |
Communication
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Replace community board with announcement board (teacher-posted, audience-filtered by year/level) | IT discussion decision; Wishlist "Announcement Board (Replaces Community Board)" | Designed | "Announcements" (SakAnnouncements, F3) |
| Guarded 1:1 teacher–student messaging, spam guardrails (~800-char warning, weekly caps) | IT discussion decision | Designed | "Messages — Ust. Amina" (SakMessageThread, F3); guardrail copy per IT transcript is a composer-level implementation detail (800-char warning pop-up), not a separate screen |
| "Message your coach" CTA consistency (3 different labels found) | Internal mockup consistency finding | Designed | Standardized to "Message" on SakCoach and Profile's coach panel (REVIEW.md B5), both routing to SakMessageThread |
| Announcements need an entry point (were orphaned) | Internal mockup consistency finding | Designed | SakNotifSheet header row "Announcements · 1 pinned" deep-links to the board (REVIEW.md C1); Settings support row renamed "Report an issue" in the same fix |
| Announcements toggle default | Internal mockup consistency finding (was OFF by default, inconsistent with expectation) | Designed | Settings → Notifications → "Announcements" toggle now defaults ON (sak-settings.jsx:51-52; REVIEW.md B4) |
| Peer community channel (students staying in touch, reminding each other, sharing gems) | Ibrahim (questionnaire): "creating a communication group where they would stay in touch with each other" | Deferred — backlog / Rejected-as-community-board | The 1:1-plus-announcements model explicitly replaces the open community board per the IT-call decision; a peer channel is a distinct, separate ask not covered by that replacement. See §3 |
Appointments
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Year 2 appointment attendance marking, tied to auto-email escalation after 2 consecutive absences | Wishlist "Year 2 Appointment Attendance Marking"; data model | Designed | SakCoachStudent/SakCoachSchedule (attendance shown in student record); auto-escalation logic is a backend rule keyed off the same attendance field, not a distinct screen |
| Notes + voice notes for one-to-one appointments | Wishlist "Notes & Voice Notes for One-to-One Appointments (Year 2)" | Designed | SakCoachStudent "Coach notes" section (text); voice-note capture uses the same recorder primitive as async feedback — no separate voice-note UI built, flagged as an implementation detail, not a gap |
| Appointment detail: recurring slot, coach, duration | Data model; IT discussion | Designed | "Appointment — recurring weekly" (SakAppointmentDetail, F5) |
| Cancel/reschedule without an email chain | IT discussion (anecdotes: midnight slot-camping, students skipping weeks) | Designed | SakAppointmentDetail (F5) carries explicit quiet-action rows: "Swap this week's time" (keeps the recurring slot for other weeks), "Can't make it? Cancel this week" ("Even a minute before is fine — it frees the slot") — the guilt-free cancel/swap the call asked for, no email chain |
| 20 appointment credits per semester (make-up sessions) | IT discussion / FEEDBACK-SYNTHESIS.md explicit backlog | Deferred — backlog | See §3 |
| Automated post-session survey (attended? why not?) with AI-aggregated trends | IT discussion decision — "flagged as a priority even ahead of the app" | Deferred — backlog | See §3 |
| Year 2 appointment reminder (15 min) + add to device calendar | Wishlist "Appointment Reminder Notification", "Add Appointment to Calendar" | Designed | Same mechanism as session reminders row above; applies to SakAppointmentDetail |
| "One-to-one" row surfaced on the Sessions tab (was an orphaned flow) | Internal mockup consistency finding | Designed | Sessions tab Tuesday timeline "One-to-one" row, tinted like Hours, drills to SakAppointmentDetail; annotated "Year 2 only — Year 1 accounts never see 1:1 rows" (REVIEW.md C2) |
Attendance / data
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Attendance is a black hole — no RSVP, no in-app log, near-zero recording views, "100% assumptions" | Convergent finding #4 (multiple sources) | Partially designed | RSVP affordance noted on session detail (sak-schedule.jsx:211); Recordings section added with per-recording watched-progress (sak-schedule.jsx:686-821, "Sessions — Recordings" tab state, section 00a) directly answers "near-zero recording views" by making view status visible; a dedicated attendance-log/analytics view for coaches beyond the per-student record is not separately designed |
| Recordings organized in a calendar view, not a flat list | Wishlist "Easy Access to Session Recordings"; Mock App Feedback ("Add a Recordings section") | Designed | "Sessions — Recordings" (SakScheduleRecordings, section 00a) — grouped by session with date/time rows, watched-percentage indicator; a literal month-grid calendar view was not built — the timeline/list grouping is the shipped resolution, treated as satisfying the underlying need (discoverability), not the literal UI request |
| Attendance-trend visibility for students (shown how many hours attended out of possible hours, to create FOMO/motivation) | Questionnaire (coach: "shown how many hours they have attended out of how many possible hours... creates FOMO") | Designed | Profile stat tile "85% attendance" (sak-profile.jsx:54) |
| Absorb Time Clock Wizard into the app; auto-log coach hours/attendance from Zoom duration ≥75% | Questionnaire 4/11 coaches | Designed | SakCoachQueue/SakCoachSchedule — "Hours log themselves — Time Clock Wizard, retired" (sak-coach.jsx:226); "Attendance + hours log from Zoom automatically" (sak-coach.jsx:390) |
Support / launch
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Report Issue button on every single screen, auto-capturing screen/app-version/account context | Wishlist "Report Issue Button"; convergent finding #5 | Designed (mechanism), Ops/process (coverage) | "Report an issue — sheet" (SakReportIssue, F4); Profile Support section renamed "Report an issue" (REVIEW.md C1). The sheet's design is proven on one entry point — universal per-screen coverage is an implementation/QA checklist item, not a per-screen design task. See §4 |
| Help center / resources | Existing app baseline (retained) | Designed | Profile Support section keeps "Help center" and "Resources" alongside "Report an issue" (REVIEW.md C1) |
| Semester start date + countdown timer on home screen pre-semester | Wishlist "Semester Start Date & Countdown Timer" | Designed | "Today — state: pre-semester" (SakTodayCountdown, F4) |
| Walkthrough/demo of an actual assignment (onboarding) | Yasmine (questionnaire) | Designed | Onboarding step "5 · The weekly rhythm" and "2 · Recite the āyah... Two attempts" chapter bullets walk through the recite→hear-back loop with a real example (sak-onboarding.jsx:268-269) |
Student experience
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| One-screen layouts; students miss anything below the fold | Mock App Feedback | Designed | Design constraint applied across all student screens per AUDIT.md rules; not a single artboard but a cross-cutting rule |
| Copy consistency ("2 of 3 remaining" vs "watched"; avoid "Behind", "Pre-Sem") | Mock App Feedback | Designed | Addressed via REVIEW.md's consolidation passes (B1 Today states, B4 announcement copy, B5 CTA labeling) and AUDIT.md's per-screen copy rules |
| Reduce color variety; single theme; accessibility (fine/light fonts hard to read) | Mock App Feedback | Designed | Sakīna's Tweaks panel offers a two-family palette (Plum/Ink) rather than screen-by-screen color variety (main.jsx SakTweaks); font-weight/contrast fixes are an AUDIT.md rule, applied across screens |
| Printable Ayat (for the assignment, when applicable) so students can mark up and take notes on paper | Yasmine (Coaches' Questionnaire, raw response row 34): "Printable of assignment Ayat (when applicable) for students to mark and take notes on?" | Rejected | No print/export affordance exists on SakPassageCard, SakLesson, or any submission screen. The mockup's direction is in-app annotation and the submission/feedback object as a single digital record (per convergent finding #1) — a parallel paper workflow works against that consolidation goal. If a real need surfaces (e.g., no-device access at prayer time), reconsider as a PDF-export utility, not a core screen |
| Self-reflection prompt box: "Today I learned that... I will apply this by..." | Yasmine (Coaches' Questionnaire, raw response row 34): "A box with prompts where they can type notes to self?" | Rejected | Distinct from the built "Voice reply" (which replies to the coach) and from the coach's private/shared notes (which are coach-authored). No student-authored reflection field exists on SakSubmissionFeedback or SakRecPracticeReview. Considered and set aside in favor of voice reply as the lower-friction mechanism for closing the loop; a private student journal was judged out of scope for v1, not a bug |
| Viewership stats (recording view counts, so coaches/program can see if sessions are actually being watched) | Convergent finding #4 ("near-zero recording views"); Questionnaire | Designed | Per-recording watched-percentage on SakScheduleRecordings (sak-schedule.jsx:783-821) surfaces this at the individual level; no aggregate/program-level analytics dashboard exists — that is an admin-side reporting concern, not a student-app screen |
| RSVP for live sessions | Convergent finding #4 | Designed | Session detail screens (SakSessionDetail/SakSessionDetailQRC) are annotated as revealing "RSVP" among coach line / what's-covered (sak-schedule.jsx:211); this is the design intent captured in-code, not a fully fleshed RSVP-flow artboard — treat as Designed at the intent level, verify the actual RSVP control at implementation |
| Previous-level content moved to a more intuitive, discoverable location (currently buried in a lessons tab) | Wishlist "Previous Level Content — More Intuitive Placement" | Deferred — backlog | No main.jsx artboard shows a redesigned previous-level content location; SakLearn (Learn — syllabus) is the current syllabus screen but the relocation itself isn't demonstrated. Note for the next design pass |
| Content access by level: teachers see all levels; students see up to their current level | Wishlist "Content access" data model | Designed | Data-model rule; enforced by role gating documented in PRODUCT-SPEC.md §"Roles" rather than a distinct screen |
Coach prep / compensation
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Single place to check in and log hours for payment (replacing Time Clock Wizard) | Questionnaire (multiple coaches) | Designed | See Attendance/data row above — auto-logged from Zoom duration, sak-coach.jsx:226,390 |
| Dedicated desktop/laptop teachers' portal — larger screen, keyboard, structured workspace | Ibrahim Abou Arab (questionnaire): "A dedicated teachers' portal (desktop/laptop)... prefer working on a larger screen"; Questionnaire device split (5 mobile-only, 4 both, 1 desktop-only) | Deferred — backlog | The Coach app in the mockup (section C: SakCoachQueue, SakCoachReview, SakCoachStudent, SakCoachSchedule) is phone-first — all four artboards are 390×844 device frames, same as the student app. Ibrahim's desktop preference is unmet in v1. See §3 |
| Coach workflow needs one single place covering assignment text, feedback recording, notes, hour logging | Questionnaire (multiple coaches, both submission and appointment workflows) | Designed | Section C Coach app collectively covers this; see Coach review workspace row above |
| Lesson asset banks (slides, games, practice exercises) coaches can use per lesson, so prep isn't uncompensated extra time | Radwa (questionnaire): "time off the clock for the teacher... provide cool things for the coaches to pick from" | Deferred — backlog | See §3 |
Strategy items
| Ask | Source(s) | Status | Design evidence / disposition |
|---|---|---|---|
| Enrollment policy, email SLA, marketing decisions | Hammad (IT discussion) — FEEDBACK-SYNTHESIS.md explicit callout | Ops/process | "Route to program strategy, not app design" per FEEDBACK-SYNTHESIS.md's own framing. Not tracked further in this matrix |
| Student-centric vs. teacher-centric live-session scheduling philosophy | IT discussion (extended debate: shifting from teacher-availability-first to student-availability-first scheduling) | Deferred — backlog | See §3 — the cost/value tradeoff (more coaches at odd hours vs. student convenience) is unresolved, not merely undesigned |
| Two-coach model for Year 2 (backup coverage) | Internal mockup consistency question raised during review | Rejected | REVIEW.md "Out of scope": "Two-coach model for Year 2 — rejected for now; single assigned coach. Revisit if scheduling capacity demands it." |
3. Backlog — deferred items restated for pickup
Each entry: what was asked, why it's valid, and what's unresolved so the next pass doesn't start from zero.
Student-centric QRC/live-session scheduling algorithm. The IT call surfaced a real tension: today's live-class schedule is built around teacher availability, then students adapt. The program lead proposed inverting this — collect student availability first, then shape the schedule (and staffing) around it. The unresolved question is cost vs. value: a student-first model may require recruiting additional coaches for odd-hour slots (e.g., late evening for one region, early morning for another) or accepting scheduling strain on existing coaches. No decision was made on whether the value (fewer missed sessions, less "student adapts to us" friction) justifies that staffing cost. Pick this up as a staffing/ops modeling exercise before it becomes a design task — the app can display whatever schedule results, but the policy has to be decided first.
20 appointment credits per semester (make-up sessions for Year 2). Raised in the IT discussion as a Year-2 lifecycle feature — a bank of credits a student can spend to book make-up 1:1s beyond their normal recurring slot. Not designed because the credit-consumption rules (what burns a credit, whether unused credits roll over, interaction with the recurring-vs-flex booking split already built in F5) weren't specified. Needs a small spec pass before it's a screen.
AI feedback summaries. An AI-generated summary of a coach's audio/text feedback, shown to both coach and student as a quick-reference overview. Flagged by Yasmine and others in the questionnaire and listed as an explicit backlog item in FEEDBACK-SYNTHESIS.md. Depends on production feedback-text/transcript data existing at volume; treat as a v2 layer on top of the already-built
SakSubmissionFeedbackobject, not a new screen.AI post-session survey analysis. The IT call decision was: automated post-session survey loop (did the student attend? if not, why?) with AI-aggregated trends — called out as "a priority even ahead of the app." The survey trigger and delivery is straightforward (push a short survey after a missed or attended session); the AI-aggregation/trend layer is the deferred part. Needs a decision on where aggregated trends surface (coach dashboard? program admin?) before designing that view.
Lesson asset banks for coaches (slides, games, practice exercises per lesson). Raised by Radwa specifically to address uncompensated prep time — "that would be time off the clock for the teacher." Not a student-facing screen; would live in the Coach app as a per-lesson resource shelf. Needs content production (someone has to build the actual assets) before it's a design problem.
Peer community channel revival. The IT call's messaging decision (1:1 + announcements) explicitly replaced the open community board, but Ibrahim separately wants students able to stay in touch with each other, remind one another what was covered, and share notes. This is a distinct ask from the rejected-and-replaced community board — it's peer-to-peer, not coach-broadcast-to-many. Revisit as a moderated peer channel (not a return to the unmoderated board) if student isolation becomes a retention problem.
Embedded Zoom. Multiple coaches (questionnaire) wanted Zoom launched/embedded from within the app rather than a separate login — "an online portal... Zoom embedded so I don't have to log in separately." Currently the mockup's live-class flow (
SakLiveClass, section 03) implies an "Open Zoom" action but does not embed the Zoom SDK. Real engineering lift (Zoom SDK integration, auth passthrough); scope as its own workstream.Desktop coach portal. Ibrahim Abou Arab explicitly asked for "a dedicated teachers' portal (desktop/laptop)... prefer working on a larger screen, with a keyboard and more structured workspace," and the questionnaire's device-split question shows 5 coaches mobile-only, 4 both, 1 (Ibrahim) desktop-only. The Coach app in this mockup is phone-first — all four Coach-app artboards (
SakCoachQueue,SakCoachReview,SakCoachStudent,SakCoachSchedule) are 390×844 device frames. Ibrahim's desktop preference is unmet in v1. This is not merely "make it responsive" — a desktop review workspace (keyboard shortcuts for note-taking, multi-pane layout for assignment text + audio + notes side by side) is a genuinely different information density than the phone screens, closer to what Radwa also described ("a website for text and pdf files for weekly lessons and submissions and level notes"). Scope as a real second surface, not a CSS breakpoint.Assessment rubrics in-app (First Assessment guideline, End of Course Assessment guideline), surfaced to the coach before they begin reviewing/assessing a student. Two distinct wishlist items (Wishlist "First Assessment Guideline", "End of Course Assessment Guideline"). Not designed — no Coach-app artboard shows a rubric reference screen. Needs the actual rubric content finalized by the program side before it's a design task.
Multi-week-behind state, designed explicitly. Mock App Feedback asked to eliminate the dedicated "Behind" screen in favor of a notification — done, no "Behind" artboard survives in
main.jsx. But the reviewer also asked to "design the multi-week-behind case explicitly" — i.e., what does Today/Learn look like for a student who is 2, 3, 4+ weeks behind, not just one week? That state is not represented among the section 06 "States" artboards (which cover rest day, first week, empty archive, all-caught-up, mic permission — but not multi-week-behind). Needs its own state design: likely a variant ofSakToday/SakLearnwith a catch-up plan rather than a simple "N weeks behind" label, to avoid the punitive tone the original "Behind" screen had.Coach access to all levels/mastery courses + lesson-breakdown preview, and the related Year 2 weekly assignments & lesson overviews for appointment prep (both from the Wishlist). Neither is represented on a Coach-app artboard. Bundle with item 9 (assessment rubrics) as a single "coach reference library" feature — all four are read-only content-access asks a coach needs while prepping or reviewing, and likely share one implementation (a coach-facing curriculum browser).
Coach re-recording a portion of the student's take within feedback, to demonstrate correct pronunciation (Wishlist, Year 1). Distinct from the built "Voice reply" (a new, separate reply) and from
SakRecPractice(the student re-recording). This is the coach recording a clip of the student's own audio, re-performed, attached inline to a specific note. Needs a small addition toFbNoteRow/SakCoachReview— a "record demonstration" action per note.
4. Known launch-day requirements checklist
These are cross-cutting requirements that don't belong to any single screen and must be verified as engineering/QA gates, not designed as artboards:
- Report Issue accessible from every screen — the sheet design
(
SakReportIssue, F4) is proven once; confirm the entry point (and auto-attached screen/app-version/account context) is wired on every screen in the shipped app, not just the ones shown on the canvas. - Timezone correctness through DST transitions — the mockup fixes the display rule (one local-time zone banner, no bare "EST"/"EDT" suffixes anywhere; REVIEW.md B3). Verify the underlying scheduling engine correctly recalculates local-time display across US/Europe/Turkey/Egypt when any region crosses a DST boundary — this was a live, recurring bug in the current app (calendar showing 7 PM for an 8 PM class) and must be tested explicitly at each region's DST transition date, not just at ship time.
- Announcement toggle default is ON — confirmed in the mockup
(
sak-settings.jsx:51-52); verify the same default ships in production notification-preference initialization for new accounts. - Comment-truncation class of bugs — the current app's text-comment field truncates content (multiple coach reports). The redesign de-emphasizes free text in favor of voice reply, but any remaining text-input surface (coach private/shared notes, the 1:1 message composer, the self-reflection field if later built) must be explicitly tested for truncation — this is a bug class, not a single screen's bug, and needs its own QA pass across every text field in the shipped app.