Skip to content
AFM Studio
Personal ProjectWeb AppML / AI

Quranlytics

Quran reader with a full analysis layer — word/root frequency, structural patterns, and semantic search across 6,236 verses

All projects3 min read

Role

Fullstack Developer

Timeframe

Jun – Jul 2026

View on GitHub
On this page

The problem

Existing Quran apps — Quran.com, Tanzil, eQuran — are built for reading: clean typography, audio, translations. None of them let an ordinary reader interrogate the text itself, like verifying whether the word "day" really appears 365 times, or finding every verse that mentions both mercy and punishment, without manual concordance work. Everyday readers who encounter numerical or linguistic "miracle" claims online have no way to check them, and da'wah content creators who want to cite specific patterns have no tooling built for that. Quranlytics is a reader and an analysis layer on top of the same data, so exploration never requires leaving the app.

The approach

Materialized stats, never computed live

Word, root, and phrase counts are never run against the ~77,000-word table on a user request. Management commands precompute them ahead of time into Postgres materialized tables backed by a 24-hour Redis cache, so the core interaction — click a claim, see it verified instantly — stays fast even though counting a root across 6,236 verses is not a cheap operation to do live.

Stitching two data sources for real morphology

The Quran.com API gives verse text and translations but no root or lemma morphology. The Quranic Arabic Corpus provides that, keyed by word position, so ingestion pulls both and joins them one-to-one by surah:verse:word position. About 50,000 of 77,000 words carry a resolvable trilateral root; the rest are particles and proper nouns spanning roughly 1,650 distinct roots. An early version of the morphology parser had a real bug — pulling lemma and root from clitic (prefix/suffix) segments instead of the actual word stem — caught and fixed with a dedicated test once the wrong data surfaced.

Local embeddings instead of a hosted API

Semantic search runs on sentence-transformers, a multilingual model executed locally in-container to embed each verse from its English and Indonesian translations, stored via pgvector for similarity search and KMeans theme clustering. No per-query API cost, and it works fully offline — a deliberate departure from the original plan to use a hosted embeddings API, since the dataset is static and computed once rather than queried live against a changing corpus.

An "honest" verifier instead of a confident one

Popular numerical claims about the Quran circulate constantly online, often presented as simply true. The numeric-claim verifier instead reports a three-way status — Verified, Disputed, or Refuted — consistent with the project's own scope limit: no automated claims about what a pattern proves, present the data and let the reader interpret it.

Public analysis, personal state layered on top

JWT authentication and per-user state — bookmarks, notes, reading progress, streaks — sit alongside fully public reading and analytics endpoints. Anonymous users get complete reading and analysis; an account only adds personalization on top, never gates the core feature set.

Outcome

121 commits, solo, over 14 days from an empty repository — about 6,900 lines of backend Python across 6 Django apps and 9,900 lines of frontend TypeScript, with 26 merge commits across roughly 28 feature branches even as a single-author project. The full dataset covers all 114 surahs and 6,236 verses, with morphology resolved for around 50,000 of 77,000 words. More than half the commit history is work that fell outside the original plan: tajwīd color-coding, ḥifẓ memorization mode, continuous recitation with a reciter picker, khatmah completion planning, a chiastic structure viewer with color-matched mirrored verse pairs, and two entirely new curated explorers — the 99 Names of Allah and a Prophets-of-the-Quran index — plus a community layer (discoveries, voting, public profiles, PNG export) that wasn't planned until a later phase. A production deploy pipeline exists via GitHub Actions and GHCR, but the system isn't live at a public URL yet.

Outcomes

Verses, full Quran ingested
6,236
Words with morphology
~77K
Lines of Python + TS
~16.8K
Commits over 14 days
121

Screenshots

Beranda
Quran Read Mode
Quran Tafseer
Analysis Word Frequency
Analysis Root Explorer
Analysis Word Co-occurence

Have a project like this?

If you need a system built with the same care — clear scope, solid execution — let's talk.

Start a project