Quranlytics
A Quran reader where anyone can check word counts and numerical claims across all 6,236 verses

- verses across all 114 surahs
- 6,236
- words linked to their Arabic root
- ~50,000
- distinct roots to explore
- ~1,650
- claim statuses: verified, disputed, refuted
- 3
On this page
The problem
Quran apps such as Quran.com, Tanzil and eQuran are built for reading. They have clean typography, audio and translations. None of them let an ordinary reader question the text itself. Does the word for "day" appear 365 times? Which verses mention both mercy and punishment? Answering that used to mean manual concordance work.
Two groups feel the gap. Everyday readers and students meet numerical or linguistic "miracle" claims online and have no way to check them. Da'wah content creators want to cite specific patterns, such as word counts or repeated refrains, without scholarly tooling. Quranlytics puts a reader and an analysis layer on the same data, so exploring never means leaving the app.
What I built
I count everything ahead of time
Counting a root across 6,236 verses and about 77,000 words is too slow to do on every click. I precompute the word, root and phrase counts and store them, with a cache in front. When a reader opens a claim, the numbers are already there. The core interaction, click a claim and see it checked, stays instant.
Two sources, joined word by word
Quran.com's data has verse text and translations but no word roots. The Quranic Arabic Corpus has the roots, keyed by each word's position. I pull both and join them word by word on that position. About 50,000 of the 77,000 words resolve to a three-letter root, across roughly 1,650 distinct roots. The rest are particles and proper nouns. An early parser read roots from prefixes and suffixes when it should have read the word stem. I fixed it and added a test once the wrong data showed up.
Search runs on a model inside the app
The original plan used a hosted AI service for semantic search. I run an open multilingual model inside the app's own container. It embeds each verse from its English and Indonesian translations, finds related verses and groups them into themes. The text never changes, so I compute this once. There is no cost per search, and it works offline.
The claim checker gives one of three answers
Popular numerical claims about the Quran spread online as plain fact. The checker gives each one a status: Verified, Disputed or Refuted. This follows the project's scope rule. The app shows the data and makes no claim about what a pattern proves. The reader draws the conclusion.
Anyone can use every tool without an account
Reading and every analysis tool are public. Signing in adds bookmarks, notes, reading progress and streaks on top. An account never unlocks a core feature.
Result
I built Quranlytics alone in 14 days, from an empty repository on 24 June to 7 July 2026. It covers all 114 surahs and 6,236 verses. About half the work went into features outside the original plan. These include tajwīd colour-coding, a ḥifẓ memorisation mode, continuous recitation with a choice of reciter, and khatmah completion planning. I also added a chiastic structure viewer that colour-matches mirrored verse pairs, explorers for the 99 Names of Allah and the 25 named prophets, and a community layer for sharing discoveries. The code is public on GitHub and the deploy pipeline is ready. The app is not live at a public URL yet.
Under the hoodTechnical detail for engineers
- Backend: Django 5.0 and DRF with SimpleJWT, across 6 apps (
quran,analytics,semantic,users,community,common). - Frontend: Next.js 14.2 App Router, React 18.3, strict TypeScript 5.5 and Tailwind CSS 3.4. The only dependency beyond the core is
html-to-imagefor PNG export. Charts and UI components are hand-built. - Management commands
compute_statsandbuild_frequency_cachefill PostgreSQL tables. Redis caches results for 24 hours. - Ingestion joins Quran.com and QAC data 1:1 on
surah:verse:word, throttles to the source API's limits and retries on HTTP 429. - The morphology fix takes lemma, root and part of speech from the stem, never the clitic segments.
- Quran.com changed the Sahih International translation ID from 131 to 20 and stopped returning
verse_key, so translations are now mapped by position. - Arabic search normalisation was unified once, then fixed three more times: a leading ال, definite-article words in co-occurrence, and bare lemmas in examples.
- Semantic layer:
sentence-transformerson CPUtorch, vectors inpgvector, and KMeans for theme clusters. ML dependencies live in a separateml.txt, so the base app and CI run without them. - Other tools: a word-frequency heatmap across all 114 surahs, a root explorer with a morphology tree, co-occurrence search, a hapax legomena finder, paired-surah symmetry, verse-length charts and a refrain explorer.
- GitHub Actions runs tests on every push and publishes images to GHCR. Sentry runs in production.
- About 35 REST endpoints and 20 top-level routes. About 6,900 lines of Python and 9,900 lines of TypeScript, 121 commits with 26 merge commits across about 28 feature branches.
Screenshots
Hiring, or building something similar?
I'm open to full-time roles and select freelance work.