iOS app · Swift · SwiftUI · SQLite · Supabase
Qiyam
A Quran revision app that schedules every verse separately, instead of cutting memorised text into equal portions.
- Period
- November 2025 — present
- Context
- Personal project
- 250+
- Downloads
- 50+
- Countries
- 5.0
- App Store rating
- 3
- Months
The problem
The usual method cuts memorised text into equal portions and revises one a day. A verse learnt ten years ago therefore gets as much time as a verse learnt last week. I wanted revision time to follow how fragile each verse actually is.
What I built
- Every verse has its own revision due date, computed by spaced repetition from the score the user gives themselves. A solid verse moves away, a shaky one comes back quickly.
- A second mechanism decides how to group due verses into coherent sessions: blocks of a readable length that never cross a surah boundary. Separating the two makes it possible to tune the daily load without touching the learning rhythm.
- The schedule is smoothed at scoring time, then frozen. The ideal due date is stored separately and does not move. Without that, a schedule recomputed every day keeps shifting the same verses around and feels like a treadmill.
- The app works offline first. All 6,236 verses ship inside the app and the local database is the source of truth. Syncing came later, as a backup — never as a condition for starting.
- Native iOS rather than a cross-platform solution. The content is Arabic text: dedicated typeface, right-to-left reading, diacritics. I preferred to control the typography directly.
The App Store rejection
My first submission was rejected in December 2025. It was my first app, and I had aimed for an initial version with subscriptions and cloud sync while not even knowing App Store Connect existed. Things were missing from the code, and the subscription setup did not comply.
I cut. The published version is entirely free and entirely local. Development got simpler at once and the app went through. Subscriptions came back later, built on Apple's own components rather than a third-party service — those are exactly the points where review trips you up.
The site and the blog
qiyamapp.com goes with the app: the method explained, legal pages, and a blog kept in version-controlled files rather than a content management system. Publishing therefore means a commit, which costs a little on every article but removes any database and any back office. Social images are generated from fixed templates where only the text changes.
What I would do differently
- Settle the business model before writing a single line of payment code. Three subscription architectures in eight months: the third is the right one, the first two cost entire cycles of integration and submission.
- The algorithms are covered by a test bench that ages fictional users over several simulated months and checks that nothing drifts. But nothing runs those tests automatically: it depends on my own discipline. That is the weak link of the project.