← QuranFlow — the redesign

QuranFlow Rebuild — Implementation Plan

Build plan for taking the Sakīna design (mockups in ../mockup/) to a production iOS/Android app and coach tool. Companion to FEEDBACK-SYNTHESIS.md (what stakeholders asked for) and ../mockup/REVIEW.md (the adjudicated design decisions). This is the "IT revamp" — a full replacement of the current app and its backend, not an incremental patch.

Context this plan assumes: a small org (1 program lead, 1 platform lead, ~11 part-time coaches), a student base on iOS today with Android demand likely next, and a coach population that is overwhelmingly mobile (9/11 mobile-only or mobile+desktop, 1 desktop-only per the questionnaire). No committed engineering headcount is named here — sizing in Section 5 is in engineer-weeks so it can be mapped to whoever ends up on it, whether that's one contractor or a small agency.


1. Technology recommendation

Client: React Native (Expo), not SwiftUI, not Flutter

Recommendation: React Native with Expo (EAS Build/Submit, Expo Router).

Rationale:

What would change this recommendation:

Backend: Managed BaaS over custom API

Recommendation: a managed backend-as-a-service (Firebase or Supabase), with the third-party integrations (Zoom, email, Stripe) as Cloud Functions/Edge Functions rather than a bespoke server.

Rationale:


2. Build phases

Each phase ships something a student or coach can actually use, not just scaffolding. Screen labels reference ../mockup/src/main.jsx artboard labels.

Phase 1 — Core loop: auth, four tabs, lesson → recording → submission

The minimum viable app: a student can log in, see their week, watch a lesson, record and submit an attempt.

Screens (by artboard label):

Backend surface:

Exit criteria: a real student can complete onboarding, watch this week's lesson, record an attempt, submit it, and see it move through Ready → In Progress → Submitted → (revoke window closes) with no coach-side app yet (feedback can be seeded manually/by hand for pilot testing). This phase is usable standalone if coaches temporarily keep using their current review process for one more cycle while Phase 2 builds.

Phase 2 — Feedback loop closure + coach review app

This is the single most-requested fix across all four feedback sources ("teachers can't see the assignment text while reviewing audio" is called the most damning fact in the current app) and makes coaches, the bottleneck users, actually adopt the new system.

Screens:

Backend surface:

Exit criteria: a coach can open the queue, see assignment text and audio side by side, leave annotated + voice feedback, and the student sees it arrive, practices, and resubmits — all in-app, replacing notebooks/Excel/ second devices. Pilot with 2–3 coaches here (see Risk R3) before wider rollout.

Phase 3 — Schedule, notifications, announcements/messaging

Solves the second-most damaging problem class: timezone bugs, no attendance signal, and the community-board replacement decided on the coaches' call.

Screens:

Backend surface:

Exit criteria: every displayed time is correct in the viewer's local zone (this is the phase to run the DST/timezone test matrix from Section 3 against, not defer); a student gets a real Zoom link at the real local time; a coach and student can message inside guardrails; the community-board replacement is live for both years.

Phase 4 — Year-2 appointments, attendance automation, issue reporting, subscriptions

The long tail: features that matter but don't block Year-1 students' daily loop, plus the business-operations surface.

Screens:

Backend surface:

Exit criteria: Year-2 students can book and manage a 1:1 without an email chain; attendance is a real number instead of an assumption; billing state changes (upgrade/cancel/lapse) reflect correctly in what content a student can access.

Note: if Phase 3 runs long, subscription/billing (Section 04) can move earlier or later relative to appointments — it has no dependency on the scheduling work and can be sequenced independently based on business urgency (e.g., if Stripe migration has a deadline, pull it into Phase 3).


3. Cross-cutting workstreams

These don't belong to one phase — get them right early because retrofitting is expensive.

Timezone / DST correctness

Strategy: store every timestamp in UTC, render in the viewer's IANA timezone (not a fixed offset like "EST" — REVIEW.md's B3 finding, bare EST/EDT strings that had to be swept out of an earlier mockup iteration, is exactly the bug class to avoid), derive the timezone from device settings at render time, never trust a stored offset for the future.

This needs a dedicated test matrix, not ad hoc QA, because the reported production bug (calendar shows 7 PM for an 8 PM class) is a class of error that silently reintroduces itself:

Recommend this become an explicit automated test suite (fixed set of UTC instants × viewer timezones × expected rendered string), not manual spot-checks, given it's already bitten production once.

Audio pipeline

Arabic text rendering — flag early, spike first

This is the hardest UI problem in the whole rebuild and should get a spike in Phase 1 before the recording/annotation screens are built on top of it, not discovered mid-Phase-2. The requirement (from the coach feedback: "mark up submission text... text-span anchored annotations") means annotations must anchor to specific words within Quranic Arabic text, which involves:

Recommend: build a throwaway prototype of "render a verse, place a marker on word 4, change font size, marker stays on word 4" before committing the annotation feature's data model. If this doesn't work cleanly in RN's text primitives, a native text-rendering module is the fallback — decide before Phase 2, not during it.

Push / email infrastructure

Analytics for the attendance/engagement gap

The team's own words: "100% of the time currently, we are going off of assumptions" about attendance. Since Phase 4 introduces real attendance and Zoom-duration data, instrument from day one so historical data exists when leadership eventually asks for trends:


4. Risks and mitigations

R1 — Rocky launch is the default expectation, not a worst case. A full rebuild replacing an unknown-quality backend will have launch bugs. Mitigate with: the Report Issue button (Phase 4, but consider pulling its backend — auto-attached context capture — earlier if feasible, since it's cheap and valuable from day one of any beta), feature flags on newer/riskier surfaces (messaging guardrails, auto-attendance, appointment booking) so a bad rollout can be toggled off without a full app release, and a staged rollout (pilot cohort → one year group → everyone) rather than a big-bang release to the full student body.

R2 — Single-developer bus factor. Nothing here names a team beyond "the org" — if this is built by one contractor/developer, that's a structural risk independent of the tech choice. Mitigate with: RN/TS (larger substitute-hire pool than a native+BaaS mixed stack would require), a managed BaaS specifically because it reduces the amount of bespoke infrastructure only one person understands, and insisting on written architecture notes / a handoff doc as a deliverable at the end of each phase, not just at project end — so a mid-project developer change doesn't require reverse-engineering everything from scratch.

R3 — Coach adoption depends on the review workspace actually being better than a spreadsheet, not on it existing. 8/11 coaches maintain a patchwork workaround today; if Phase 2's review queue is clunkier or slower than what they've built for themselves, they will route around it, and the single most-requested fix in this whole project will fail to land. Mitigate with: pilot Phase 2 with 2–3 coaches (ideally including the desktop-preferring coach and a high-volume mobile coach) before rolling to all 11, treat their first two weeks of real usage as a gate before wider release, and make sure the pilot includes actual review of live students, not a demo dataset — workflow friction only surfaces under real load.

R4 — Timezone bugs recur. Already burned production once (7 PM vs 8 PM bug) and is exactly the kind of defect that regresses silently when a new screen is added by someone who didn't know the rule. Mitigate with the explicit test matrix in Section 3, and a lint-level rule/code-review checklist item: no screen may render a hardcoded offset string ("EST"/"EDT") — always derive from device timezone at render time.

R5 — Arabic annotation anchoring is underspecified until the spike runs. If word-anchored annotation turns out to be harder than expected in RN, it could blow out Phase 2's timeline specifically (the feature most tied to coach adoption, per R3). Mitigate by running the spike in Phase 1 (Section 3), not discovering the problem mid-Phase-2 when the review queue UI is already built on a broken assumption.

R6 — BaaS lock-in / limits. Managed BaaS trades control for speed; if the org later needs the backlogged student-centric scheduling algorithm or heavier custom logic, BaaS query/function limitations could force a partial migration. Mitigate by choosing Supabase (Postgres underneath) over Firestore if this is a concern — Postgres data is far more portable to a custom API later than a Firestore export would be.


5. Suggested team/effort framing

Rough sizing in engineer-weeks, assuming one competent full-stack RN/BaaS developer as the throughline (with a designer/reviewer checking against the mockups, not building). These are ranges reflecting real uncertainty (especially Arabic rendering and audio), not padded-safe estimates — treat the high end as "if the spikes go badly," not as buffer to ignore.

Phase Scope Estimate (engineer-weeks)
Spike (pre-Phase 1) Arabic word-anchored annotation prototype, audio record/upload/scrub prototype 2–4
Phase 1 Auth, 4 tabs, onboarding, lesson/recording/submission loop 6–9
Phase 2 Feedback loop (annotations, practice loop) + full coach app 7–10
Phase 3 Schedule, Zoom integration, reminders, announcements/messaging, timezone hardening 6–8
Phase 4 Year-2 appointments, auto-attendance, issue reporting, Stripe/subscriptions 5–7
Total 26–38 engineer-weeks (roughly 6–9 months for one developer, less with parallel help)

Notes on this sizing: