Skip to content
AFM Studio
  • Pages

    AFM Studio
  • Work
  • Lab
  • About
  • CV
  • Contact
  • Projects

    AksaraA searchable library for Otorita IKN's knowledge, where the server checks every reader's access across three levels
  • Daily TaqwaTamper-resistant prayer attendance system for ~2,000 OIKN government employees at Masjid Negara IKN
  • Lantara v2A permit engine for Otorita IKN where administrators add new permit types from a screen, without a developer
  • eKiosk IKNTwo control rooms for Nusantara: kiosk content management and live bus tracking with arrival times that grade themselves
  • E-Monev IKNA monitoring platform for Nusantara's 23-year build, tracking every unit's quarterly progress against 24 national KPIs
  • JDIH OIKNOIKN's public legal document portal, with a controlled publishing workflow and AI summaries that never leave the server
  • Jejak PenanamanA check-in app for IKN tree-planting events that proves each participant was on site with a geofenced selfie
  • Dashboard SAKTIA nightly pipeline and dashboard that replaces OIKN's manual budget downloads for all six of its budget units
  • DoseRxA bedside dose calculator for 127 drugs that rounds each dose to tablets and syrups Indonesian pharmacies sell
  • CubiqA speedcubing trainer with competition-grade timing and a solver I wrote for each of the 8 major puzzles
  • ScimotionAn interactive science library of 86 articles, each explained next to animations the reader can control
  • WA Daily Scrum BotA WhatsApp bot that chases missing standup reports for a 14-person team and flags tasks stuck for days

↑ ↓ to move · Enter to open · Esc to close

Quranlytics

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

Screenshots
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-image for PNG export. Charts and UI components are hand-built.
  • Management commands compute_stats and build_frequency_cache fill 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-transformers on CPU torch, vectors in pgvector, and KMeans for theme clusters. ML dependencies live in a separate ml.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

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

Hiring, or building something similar?

I'm open to full-time roles and select freelance work.