← QuranFlow — the redesign

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).


Jul 24 2026 product correction (Lejla) — what changed

Added Jul 26 2026. A product review with Lejla (PM) and Kamran on Jul 24 2026 corrected the Year-2 model and added a new-student entry flow. The affected asks are re-dispositioned here; the specific matrix rows in §2 are annotated in place (not renumbered). Source: the flow map, ../../explorations/flow-map/ (screens designed in the shared Sakīna kit, Jul 26 2026). Working defaults await Lejla's confirmation — see ../../explorations/flow-map/QUESTIONS-FOR-LEJLA.md.


Jul 27 2026 product correction (Lejla) — what changed

Added Jul 27 2026. A screen-by-screen review with Lejla on Jul 27 2026 (decision record: ../../reviews/App-Review-Jul27-Lejla.md, the binding source for this pass) overturned five Jul-24 defaults and reshaped the entry lane. The five corrections are tracked as answered questions in ../../explorations/flow-map/QUESTIONS-FOR-LEJLA.md (Q1, Q2, Q4, Q5, Q8); the derived design changes are encoded across the walkthrough, the flow map (v7), the ambient layer (v3), and the two handoff specs. This addendum maps each Jul-27 decision to the record section it comes from and the artifacts that encode it. It adds no new stakeholder asks (those were dispositioned Jul 24) — it re-dispositions the entry/placement and Year-2 rows already annotated in §2.

Decision (Jul 27) Record § Encoded in
First assessment = recorded recitation (four graded stages: letters → words → familiar surah → technical ayah) to a pooled coach queue — not a booked 1:1 §1.1, §4.1, §4.7 Walkthrough ARRIVING act; flow map v7 screens 02–03; PRODUCT-SPEC §"Account status and entry flow" + Section E "Your first recitation" + Section C Placements-queue proposal; DATA-MODEL FirstAssessment + placement pool
Level 0 is a real status — full app minus lessons; student-paced wait (days–~3 weeks); never-submitters auto-placed to Level 2 §1.2, §4.4 Walkthrough Level-0 waiting screen; flow map v7; PRODUCT-SPEC Section E "Waiting for placement"; DATA-MODEL enrollment lifecycle (level_0, auto_placed)
Script-choice screen + font-picker settings feature both cut (one usable Madani-compatible web font) §1.3 PRODUCT-SPEC Section 05 step 3 + Section 02 font picker (both CUT); DATA-MODEL quran_font_preference retired; IMPLEMENTATION-PLAN Phase 1
Sign-in = email + password (welcome-email credentials); no magic-link primary; enrollment pointer removed (App Store anti-steering); "Need help signing in?" affordance §2 (entry & sign-in), §4.8 PRODUCT-SPEC entry-flow block + Section E "Sign in"; DATA-MODEL top block; IMPLEMENTATION-PLAN Phase 1 auth
Two-to-three supportive screens between sign-in and the recitation (emotional design) §2 (arriving flow) Walkthrough ARRIVING act; flow map v7; PRODUCT-SPEC Section E "Your first recitation"
Onboarding: step 3 cut; "watch as a video" restored; availability step for ALL placed students; welcome/level/rhythm double as level-graduate re-entry §2 (onboarding), §4.9 PRODUCT-SPEC Section 05 role-gating block + Availability (F5); DATA-MODEL Availability entity; IMPLEMENTATION-PLAN Phase 1
Appointment counts plan-based, bought at checkout (default 1; Tajweed Practice 2–3); UI states the student's own plan, never a universal cap §1.4 PRODUCT-SPEC Book your one-to-one + Today — Year 2 + Week at a glance; DATA-MODEL appointment_plan; ambient v3 (widgets never show a remaining count, Q14)
Year-2 lessons per-elective; Tajweed Practice has no lessons; feedback format is the only universal Y1→Y2 difference §1.5 PRODUCT-SPEC Year 2 orientation + Today — Year 2; DATA-MODEL Elective (has_lessons)
Year-2 arrival: L4 grads auto-enrolled → hype sequence; elective students via checkout, no hype + change-elective housekeeping §2 (Year 2) PRODUCT-SPEC Year 2 orientation; DATA-MODEL enrollment lifecycle; IMPLEMENTATION-PLAN Phase 4
Auto-enrollment (level graduate → next level; L4 → Y2 mandatory semester, auto-billed) vs checkout (new / Y2 elective / repeat) §2 (entry), §6 (Q9) PRODUCT-SPEC entry-flow block; DATA-MODEL enrollment lifecycle
Pooled placement queue replaces today's shared-login first-assessment account (rotating coaches claim) §4.7 PRODUCT-SPEC Section C queue proposal; DATA-MODEL placement pool
Auto-placed placement-result variant (quieter tone) + placement expectation-setting §4.5, §4.6 PRODUCT-SPEC Section E "Placement result"
Deliverables: student/coach walkthroughs split; pronounced screen numbers on every screen §2 (deliverables), §4.10 Walkthrough build (student/coach split + visible screen numbers); not a spec/data-model change
Internal-only facts (pricing, program brand names; "Advanced Tajweed Rules" pending confirmation) never in student UI §5 PRODUCT-SPEC Overview Jul-27 block + Year 2 note; DATA-MODEL Elective.name note

Open items from this pass (nothing "encodes" them yet — they need Lejla): Q15 the exact name of the mandatory Year-2 semester (tentatively "Advanced Tajweed Rules", distinct from the Tajweed Practice elective); Q16 the student-facing rename of the first assessment ("Your first recitation" proposed; coach side keeps "First assessment"). Both are recorded in QUESTIONS-FOR-LEJLA.md.


Aug 5–6 2026 design review (Lejla + Sr. Yasmine) — what changed

Added Aug 10 2026. Lejla and Sr. Yasmine (coach and curriculum manager) reviewed the redesign screen by screen against the flow map over two recorded sessions (transcripts: ../../reviews/QF-App-Feedback-Yasmine-Lejla-session-1-Aug-5-2026.txt and …session-2-Aug-6-2026.txt, the binding sources for this pass). The remarks reconcile to a 119-item register (../../reviews/v12-review-response/unified-register.json, U-001–U-119); the decisions were built into walkthrough v12 (decision record: ../walkthrough/DECISION-LOG.html §v12) and the flow map. The illustrated summary — before/after captures per change — is ../../reviews/v12-review-response/index.html, deployed at https://quranflow-redesign.pages.dev/changes/. The review covered S01–S33 plus S37 and S42; S34–S51 and the coach lane (C01–C09) were not reviewed — a third session was planned to resume at S33.

Screen numbering changed in this pass. Codes are now sticky (a retired number is never reused; new screens append). The ledger at ../walkthrough/build-notes/screen-codes.md is the authority. Retired: S10, S11, S20, S27, S28. New: S52–S59.

Decision (Aug 5–6) Register Encoded in
S10 + S11 cut — the welcome folds into S08; a level-curriculum screen (S53) replaces them U-042 Walkthrough v12; flow map (cut frames kept, dimmed, for trace)
Returning students (level graduates) get a placement-result variant stating the level (S58); skipping the assessment gets its own waiting variant (S59) U-038 Walkthrough v12 entry lane
Year-2 onboarding rebuilt as the Year-1 mirror — welcome (S54), course, rhythm, availability last; L4 graduates get the full chain U-060, U-062 Walkthrough v12 Year-Two act; flow map Y2 band
Availability (S15) asks for anything live — circles and Year-2 one-to-ones — once the structure is clear U-055 Walkthrough v12 (S15 in both lanes)
Year 1 gains an Assignments tab; the submissions archive (S50) rebuilt as its hub U-075, U-093 Walkthrough v12 tab bar (new/Year-1 entrances)
Year 2 gains an Appointments tab — upcoming, past with teacher's notes, book another (S57) U-106 Walkthrough v12 tab bar (Year-2 entrance); AppointmentNote already in DATA-MODEL §2
"View full semester syllabus" from Learn (S42) opens a week-by-week syllabus screen (S55) U-082 Walkthrough v12
Flow-map wiring corrected — Y2 chain no longer runs into Year-1 screens, coach node detached, uncoded Y2 cards absorbed into S31 U-061 Flow map (../../explorations/flow-map/, v12)

Spec sync pending: these decisions are encoded in the walkthrough build and the flow map; PRODUCT-SPEC and DATA-MODEL have not been re-cut for them yet. Wording on new and revised screens is directional pending Sr. Yasmine's screen-by-screen copy pass. Open policy questions from the review (booking limits and no-shows, passing criteria, the behind-students protocol, where student-coach messaging lives) are listed in the change document's open-questions section — they block spec rows, not the build. The Aug 6–11 section below extends this same list — the spec now trails two rounds, not one.


Aug 6–11 2026 — session 3, the coach review and the Aug 11 pass — what changed

Added Aug 11 2026. Four binding sources close the review of the whole app: session 3 (Aug 6, Lejla + Sr. Yasmine, resuming the student walk at S33/S34 — ../../reviews/QF-App-Feedback-Yasmine-Lejla-session-3-Aug-6-2026.txt); the coaches-app session 1 (Aug 6, the first review the coach lane C01–C09 has ever had — …COACHES-APP-Yasmine-Lejla-session-1-Aug-6-2026.txt); Lejla's coach-side audit written against the April 2026 coach survey of 11 responses, which is evidence about how coaches work today rather than a reaction to the drawn screens (U-244 — ../../reviews/QuranFlow-Coach-Side-Audit.md); and the Aug 11 Kamran + Lejla meeting walking the v12 change document screen by screen (../../reviews/App-Review-Aug11-Lejla.md) — mobile part only, since that meeting pivots to the admin portal about halfway through and the admin half is excluded from this round and revised separately. The remarks reconcile to a 284-item register (../../reviews/v13-review-response/unified-register.json, U-120–U-403, continuing the v12 numbering), adjudicated in ../../reviews/v13-review-response/adjudication-brief.md and built into walkthrough v13 (decision record: ../walkthrough/DECISION-LOG.html §v13). The illustrated before/after summary is the v13 change document at https://quranflow-redesign.pages.dev/changes-v13/; v12's stays at https://quranflow-redesign.pages.dev/changes/, because links already shared keep showing what they showed when they were sent.

Coverage, honestly stated. With this round the whole app has been reviewed. The student side S01–S59 has now been seen twice — once against the flow map, once via the v12 change document — and the coach lane has been seen once: the coach session ended early and neither reviewer exhausted her list (U-242), and Sr. Yasmine owes a further document covering anything major in the coach feedback the app does not yet address (U-241). Sr. Yasmine's screen-by-screen copy pass still gates all wording (U-353); nothing in v13 is settled copy.

Sticky-code ledger delta. Codes remain sticky — a retired number is never reissued, new screens append — and ../walkthrough/build-notes/screen-codes.md is still the authority. Retired this round: S18 (pre-semester Today; now a countdown bar on the ordinary Today with locked items greyed), S36 (teacher's notes, folded into S35) and S40 (week at a glance, whose job moved to the month calendars) — joining S10, S11, S20, S27 and S28. New student codes S60–S71: S60 a submission that came back rejected · S61 resources with a home of their own · S62 the day's open booking times · S63 the conflict screen for a recurring booking · S64 the live month behind the Sessions calendar button · S65 the booked semester on the Appointments calendar · S66 subscription and billing · S67 learning history as previous enrollments · S68 previous levels inside the learning space · S69 the Assignments tab before placement · S70 Learn before a level is set · S71 a past 1:1 and the notes that stay. New coach codes C10–C18: C10 the coach's day ahead of the queue · C11 placement on its own screen · C12 a student's short reply to feedback (proposal) · C13 the live-class surface (proposal) · C14 the curriculum and resources · C15 her inbox · C16 hours · C17 every one-to-one, past and upcoming · C18 an announcement in her own name. C19 is reserved. (C12, C13 and C17 were retired on Aug 18 2026 — see the Aug 18 section below.)

Decision (Aug 6–11) Register Encoded in
Take-back stays available until the teacher opens the submission, replacing the ten-minute window; one state model student-side and admin-side alike, with rejected a first-class state that never counts against quota U-120, U-341, U-342 Walkthrough v13 — S25/S50 recut, new S60; coach side gained a "Return this recording instead" action so the rejection has an author
The weekly-attempts model is removed from every screen — the cap itself, not just the word U-176 Walkthrough v13 recording flow (S22–S25, S56); supersedes v12's "the word is gone, the cap is not"
Level 0 keeps every tab, with explanatory empty states rather than hidden tabs U-358 Walkthrough v13 — new S69 (Assignments) and S70 (Learn); reverses session 3's hide-until-placed instruction, Aug 11 being later and Kamran in the room
Booking recut calendar-first with progressive disclosure; recurring booking books what it can and resolves the clashes on its own screen U-123, U-380, U-378 Walkthrough v13 — S33 rebuilt, new S62 (the day's open times) and S63 (the conflict)
S36 folded into S35 so one appointment is one screen; S40's job moved to the month views U-126, U-128, U-127, U-135 Walkthrough v13 — S35 carries the notes, new S71 shows a past 1:1; new S64/S65 month calendars; S36 and S40 retired
The coach app gains an Appointments tab; Schedule reduces to live classes only U-196, U-205 Walkthrough v13 coach tab bar (Home · Queue · Students · Appointments · Schedule); new C17; C07 recut with the coach's own timezone and a semester filter. Superseded Aug 18 2026 (U-414/415): Appointments merges back into Schedule behind a Live classes / Appointments filter, C17 retires, and the freed tab goes to Messages
Notes become two decided tiers — student notes and coach notes — nothing is labelled private, and coach notes survive reassignment U-253, U-193, U-194, U-258 Walkthrough v13 C02/C03/C05; reverses the reconciliation board's "restore the audience toggle" verdict (../reconciliation/index.html)
Coach hours move in-app, retiring Time Clock Wizard: all three work types, correctable before a period closes, period total with approval state, finance export U-221, U-281 Walkthrough v13 — new C16, reachable from both C10 and C09
A role-adaptive coach home sits ahead of the queue, because 3 of 11 coaches do no submission work U-285 Walkthrough v13 — new C10; the coach entrance boots there
First-assessment placement leaves the general queue for its own role-gated screen with a level control U-252 Walkthrough v13 — new C11 (placement produces a level, not feedback); C01 no longer absorbs placements
The student reply channel and the live-class coach surface are drawn as proposals, not decided U-295, U-321 Walkthrough v13 — C12 and C13, each carrying a visible "proposal — decision needed" status on the screen and in the rail; nothing else depends on them. Both answered Aug 18 2026: C13 rejected and cut (U-418); C12's channel accepted in tagged-thread form, so the separate screen retires with the decision (U-426)
Attendance is coach-marked; Hammad's 75%-Zoom auto-mark is not adopted U-262, U-263 Walkthrough v13 C08 — attendance and no-show control wired to the Q7 rule

Aug 12 post-review pass (Kamran's review of the finished build; rulings in reviews/v13-review-response/wiring/ORCHESTRATOR-RULINGS.md): the Today header carries the bell alone — U-184's three-circle quick-access row (a suggestion, built Aug 11) was overruled the next day as more toolbar than the field guide's "context + local actions" allows; U-138 still holds through the bell-as-one-inbox (U-172) and the foot-of-Today announcement preview (U-164). Resources' home-level door is a row on Learn (both states, S42 and S70), pushing S61 — U-151's disposition is unchanged, its door moved. The page ground stays the 3% plum wash app-wide (U-179); a generation-split ground was rejected. The hub landing now leads with "Open the app" as the closest to end usage.

Spec sync pending: PRODUCT-SPEC and DATA-MODEL now trail both rounds — the Aug 5–6 review above and this one. Wording across v13 stays directional until Sr. Yasmine's copy pass. The parked policy questions from this round (whether the reply channel and the live-class surface exist at all, where messaging lives, the late-cancellation and availability rules, passing criteria, the placement rubric, the finance-side half of hours) block spec rows, not the build; they are listed in the change document's open-questions section and in the adjudication brief's "Parked" list.


Aug 18 2026 — messaging, the coach tab bar, and the state model that was missed — what changed

Added Aug 18 2026. One binding source: the Aug 18 review meeting (Kamran, Sr. Yasmine, Lejla — ../../reviews/App-Review-Aug18-Lejla-Yasmine.md), walking a slide deck Sr. Yasmine had assembled from feedback forwarded by many teachers and students. Deck items are therefore third-hand, and nearly every one of them was adjudicated live by the three in the room. The remarks reconcile to a 43-item register (../../reviews/v14-review-response/register.json, U-404–U-446, continuing v13's numbering), adjudicated in ../../reviews/v14-review-response/adjudication-brief.md and built into walkthrough v14 (decision record: ../walkthrough/DECISION-LOG.html §v14). The illustrated before/after summary is the v14 change document at https://quranflow-redesign.pages.dev/changes-v14/; v13's stays at /changes-v13/ and v12's at /changes/, because links already shared keep showing what they showed when they were sent. A small, sharp round on a build people like — Sr. Yasmine, on the record, reports "the bazillion messages of this is so cool" from the coaches.

The repeat item, stated plainly. U-341 ("one submission state model, student- and admin-side alike") was decided Aug 11 and did not reach the v13 build: the build guide translated it additively — the union gains rejected and revoked — so nobody removed practiced and heard, which were still in the code on Aug 18 (submissions-archive.tsx:93, coach-student.tsx:101). Lejla caught it in the meeting. U-435 is that same ask, shipped, and it shipped first: the model is unsubmitted → awaiting review → in review (locked) → reviewed, with rejected and revoked as exits, one vocabulary in both seats — Awaiting review / In review / Feedback ready / Returned / Taken back to the student, Needs review / In review / Feedback sent / Returned / Taken back to the coach. The two retired words are gone from types, fixtures, chips, filters and copy, and a mechanical assertion on the built HTML now fails the build if either reappears. The U-120/U-341/U-342 row above is closed by this; the class of failure it belongs to is closed by the assertion.

Sticky-code ledger delta. No new codes this round; three retired, per the same ledger rule, in ../walkthrough/build-notes/screen-codes.md. C12 (a student's short reply to feedback) and C13 (the live-class surface) were v13's two "proposal — decision needed" screens and are both now answered: C13 is rejected outright — sessions run in Zoom and marking a 250-name roster is unworkable (U-418) — and C12 is accepted in another form, the reply channel living as a week-tagged thread in the coach's one inbox (U-426), so the separate surface retires rather than being cut. C17 (every one-to-one) retires with the Appointments tab, its content folded into C07 behind the Live classes / Appointments filter (U-414). They join S10, S11, S18, S20, S27, S28, S36 and S40 as never-reissued.

Decision (Aug 18) Register Encoded in
One submission state model, take two — unsubmitted / awaiting review / in review / reviewed, with rejected and revoked as exits; "practiced" and "heard" struck everywhere U-435 (repeat of U-341) Walkthrough v14 — S25, S50, S60, C01, C02, C05; SubStatusPill is the one vocabulary both seats read; the retired words are a failing build assertion
A student can message about a specific feedback; it lands in the coach's one inbox tagged with its week, never siloed inside the submission U-426 Walkthrough v14 — the action at the foot of S26, the tagged thread in C15; answers the C12 proposal and retires the screen
Messages carry voice or text both ways, presented in the format they were sent; transcription on demand, not by default U-427 Walkthrough v14 — S26 and C15
2x playback on every recorded-audio player U-428 Walkthrough v14 — submissions, feedback and voice messages, from the kit's one player
Coach tab bar becomes Home / Queue / Students / Schedule / Messages; Appointments merges into Schedule behind a Live classes / Appointments filter; Messages is C15 promoted, and carries the unread count the row it replaced used to show U-414, U-415, U-417 Walkthrough v14 coach tab bar; C07 rebuilt; C17 retired. Five stays the cap ("even five is a lot"); icon-only labels rejected
Coach schedule: cohort filters out and the cohort becomes a tag on the session row; My schedule / Full semester kept; reminders and add-to-calendar move behind a small settings affordance U-411, U-412, U-413 Walkthrough v14 — C07
Waiting time reads "1 day 5 hrs" (hours alone under a day), counted from the student's submission moment, with no overdue coloring at two days U-404, U-405, U-406 Walkthrough v14 — C01. Weekend arithmetic was considered and rejected as unfair to display, so the raw number carries no alarm
Coach notes carry dates; a profile states previous-level completion and intake U-408 Walkthrough v14 — C05
The coach app gets the notification bell and access to the announcement board U-416 Walkthrough v14 — C10
The live-class roster screen is not needed U-418 Walkthrough v14 — C13 retired; flow map and journeys page follow
One app for every coach profile: sections irrelevant to a coach's role render blank, never gated U-446 Spec-level principle for the dev handoff; extends v13's role-adaptive C10 to the merged Schedule and the rest of the coach app
No per-event opt-in for live sessions: notifications default on, per-category control in settings — including at onboarding, where all-off toggles were the rejected position U-420 Walkthrough v14 — S37 and S16
The time-zone selector becomes a real dropdown (tapping to cycle was the bug) U-421 Walkthrough v14 — S15
"Add to calendar" triggers the device's native flow — live sessions and appointments only U-424 Walkthrough v14 — S39, S35; the real behavior is a dev-handoff spec line, the screens show the intent
You screen: Account, then Support carrying the two sanctioned channels (message your coach, contact the program); Display, the Announcements entry and the "All versions" dev link removed; Telegram kept U-432, U-433 Walkthrough v14 — S43. Support copy widens beyond troubleshooting in Sr. Yasmine's pass
Booking: "Your plan" demoted to a small note near the bottom; teacher selection becomes multi-select bubbles U-438, U-439 Walkthrough v14 — S33, matched on S62 so a multi-select cannot hit a single-select seam one screen later
Cancel asks first; a swap names the time it moves from and to, and confirms; the full date sits under Time U-440, U-441, U-442 Walkthrough v14 — S35, S71
The month calendar carries the semester anchors — start, end, breaks, orientation — and the week number, from admin semester setup U-436 Walkthrough v14 — S64

Answered in the meeting, nothing to build: Resources' placement on Learn re-affirmed (U-422) · the week strip on S38 is fine and the month calendar already exists behind the calendar button (U-423) · "message your teacher" stays tucked in You, because friction there is a feature (U-425) · Today's announcements window as built (U-430) · messaging from an announcement rejected, since announcements come from admin and often concern another teacher (U-431) · "display settings don't work" is a mockup artifact and moot anyway, the section being removed by U-433 (U-429) · three uninterpretable deck items skipped (U-444).

Parked to the admin track (documented here, excluded from this round): U-407 an alarm when a submission passes about four days waiting — an admin-dashboard concern, not a coach-app surface, and Sr. Yasmine believes it may already exist; U-409 coach notes as their own tab in the admin portal, separate from admin notes (Kamran proposed one filtered list; Lejla held that academic content and account/billing content are "not even close", and he accepted the separation); U-410 coach pickers listing only active coaches, alphabetically, never the full historical roster; U-419 a join-click count per live session, associated with that session and reportable — the attendance and donor number that replaces self-reporting and Zoom-stat archaeology, and a data-model line for the dev handoff (a join-click event per student and session). The Kamran + Lejla backend review (~Aug 19) takes these four as its agenda seed.

Open and owed. U-437 — an exception in rescheduling, so a student can move to another time soon without being blocked by next week's booking — was read off the deck and never adjudicated: the conversation moved to the Mon–Sun booking window and did not return. It is Lejla's call and bundles with the end-to-end booking walkthrough she and Sr. Yasmine owe (U-443). Sr. Yasmine's screen-by-screen copy pass still gates all wording, and the vibe pass (U-445 — keep the craft, add warmth) is its own track, agreed with Kamran before any design work starts; nothing in this round depends on it.

Spec sync pending: PRODUCT-SPEC and DATA-MODEL now trail three rounds. Their submission-status vocabulary in particular (in_review → reviewed → heard → practiced) is superseded by U-435's model above; the correction is annotated in place in both files and in DESIGN-SYSTEM §5 rather than re-cut, so no reader takes the old four states as current while the spec pass is outstanding.


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 SakCoachReviewFbNoteRow 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/SakSubmissionFeedbackFbNoteRow 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 (revised) "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). Revised Jul 26 2026 (Lejla, Jul 24): for Year 2 the recurring "all 15 weeks" mode is dropped (open — Q13); booking is now per week, across the coach team, with a weekly soft cap of 3. The revised F5 "Book your one-to-one" reflects the per-week, multi-coach model. Revised Jul 27 2026 (Lejla review): the weekly count is plan-based, bought at checkout (default 1/week; only Tajweed Practice sells 2–3) — the UI states the student's own plan, not a universal soft cap of 3 (Q5 answered). See DATA-MODEL appointment_plan
Student availability collected at onboarding; hybrid teacher-first/student-exception scheduling IT discussion decision Designed (revised) 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. Revised Jul 27 2026 (Lejla review): this reverses — availability is now an onboarding step for every placed student (Year 1 levels 1–4 and Year 2, not Level 0), collected once as general availability that drives circle/QRC/class/1:1 scheduling. New Availability entity (DATA-MODEL); PRODUCT-SPEC Section 05 + Availability (F5)
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 — Ustadha 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. Revised Jul 26 2026 (Lejla, Jul 24): now Designed with dedicated screens — Coach — appointment notes (record → transcribe → auto-summary → coach edit → send) and the student-facing Appointment — teacher's notes (AppointmentNote entity, DATA-MODEL §2). The "no separate voice-note UI built" note is superseded; this is Year 2's feedback object. See the addendum near the top
Appointment detail: recurring slot, coach, duration Data model; IT discussion Designed "Appointment — recurring weekly" (SakAppointmentDetail, F5). Revised Jul 26 2026 (Lejla, Jul 24): with recurring dropped (Q13), this is now a single-week appointment detail, and the coach shown is the coach booked for that appointment; after the session its summary lands on Appointment — teacher's notes (Section Y2)
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." Revised Jul 26 2026 (Lejla, Jul 24): still Rejected as an assignment model — no student is assigned two coaches, and this still governs Year-1 review routing. It no longer constrains Year-2 booking, which now draws appointments from a shared coach pool (a different mechanism; see the addendum near the top and the revised F5 screens)

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.

  1. 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.

  2. 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. Revised Jul 26 2026 (Lejla, Jul 24): the Year-2 model now includes appointments in tuition with a soft cap of 3/week and per-week booking (recurring dropped, Q13). A separate "make-up credits" bank may be redundant with the soft cap — revisit whether it is still wanted before designing it.

  3. 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 SakSubmissionFeedback object, not a new screen.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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 of SakToday/SakLearn with a catch-up plan rather than a simple "N weeks behind" label, to avoid the punitive tone the original "Behind" screen had.

  11. 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).

  12. 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 to FbNoteRow/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: