Navigation

AboutExperienceWorkContact
Start a Conversation

Appearance

← Back to portfolioOpen App ↗
Founder · Product · Design · Engineering

NurQuran

A PWA for learning Quranic Arabic — from alphabet recognition to independent reading, with a local-first AI tutor, semantic verse discovery, and spaced repetition built in. Designed, built, and shipped by me. Solo.

Home — daily pathQuran reader with audio playerArabic lettersPronunciation checkFlashcard studyMatching pairs gameDaily progress and gamificationTajweed rulesMushaf page viewSeek divine guidance
Free for All
Non-profit · in memory of my father
100+
Reciters available
25
App languages
18
Product phases
6,236
Ayahs semantically tagged
100%
Local-first AI
Open NurQuran ↗
About this project

Built from first principles,
by one founder

“I didn't set out to build a startup. I set out to solve a problem I had — learning to read Quran properly, in a way that actually sticks.”

NurQuran started as a deeply personal project: a tribute in loving memory of my late father. Every line of design, product thinking, and code came from me, driven by the desire to build something meaningful that lasts.

This project is the clearest expression of how I work when I have full ownership: I move fast, I iterate in public, I obsess over quality, and I don't compromise on the user experience — even when I'm the only one watching.

It also gave me a crash course in every modern constraint that product teams face at scale: performance on low-memory devices, offline reliability, i18n across 25 languages, local AI inference, semantic search without killing the main thread, push notifications on a free tier — all shipped, all production.

Product
Defined all phases, roadmap priorities, and feature tradeoffs from scratch
Design
Full UI/UX across light, dark, and sepia themes — every component, every flow
Engineering
Next.js 16, React 19, TypeScript, Dexie, Zustand, Transformers.js, service workers
AI/ML
Local LLM integration (Gemma 4 / Qwen), semantic search pipeline, propensity-based ranking
Growth
Push notification architecture, PWA install flow, social sharing engine
Content
Semantic tagging of 6,236 ayahs across 30 emotion categories — curated by hand
Engineering & Product

Key decisions & tradeoffs

01
Local-first AI — everything runs in the browser
Why not just call an API?
Privacy is non-negotiable for a Quran app used globally. I wanted users in restrictive regions, low-bandwidth environments, and offline scenarios to have full access to the AI tutor — no server round-trips, no data collection, no monthly API bill.
Gemma 4 & Qwen running 100% on-device via WebGPU
02
Replaced Fuse.js with a token index — saved 20 seconds
Why not just use fuzzy search?
Fuse.js on 6,236 semantic records was freezing the main thread for 10–20 seconds on mobile. Instead of a patch, I rebuilt Ask Quran on a three-tier architecture: exact token index → binary prefix search → substring fallback. All under 100ms, all on the main thread.
under 100ms search on 6,236 records
03
Native window scrolling — not a custom container
Why does this matter for a reading app?
Early builds used a custom scroll container. It broke auto-scroll during audio playback, killed iOS tap-to-top, and made programmatic jumps unreliable. Switching to native window scrolling fixed every one of these simultaneously and made the whole app feel more like a native iOS experience.
Zero scroll-related bugs after migration
04
Atomic offline updates via OPFS — never lose data mid-download
What happens when a 130MB download fails at 80%?
The old approach deleted existing data before writing new data. One dropped connection = corrupted database. I redesigned it around atomic OPFS swaps: download to .tmp → verify → clear IndexedDB → bulk insert → swap. The user never loses data, even with a spotty connection.
Zero data loss during interrupted updates
Product deep-dive

Features worth exploring

Tap any feature to see how it was built, what tradeoffs were made, and what it looks like in practice.

The reader is the heart of the app. It supports two layout modes: a flat ayah-by-ayah scroll and a Mushaf Pro view that mirrors the physical 604-page book layout with authentic glyphs.

Every technical decision prioritized reliability on mobile — native window scrolling, programmatic jump guards, word-by-word audio sync with both Quran.com timestamps and a custom heuristic fallback, and interactive glassmorphism tooltips that clamp to the visible viewport without causing horizontal scroll.

Tajweed coloring, 100+ reciters via Quran.com API, 25 selectable translations, interactive scholarly footnotes — all cached in IndexedDB for full offline reading.

Native ScrollTajweed ColoringWBW AudioOffline ReadingInteractive FootnotesMushaf Pro
614
Pages of Mushaf
100+
Reciters available
25
Translations
WBW
Word-by-word audio sync

A fully local AI tutor that runs 100% in the browser. No API calls. No data leaves the device. It uses Transformers.js v4 with a dedicated static Web Worker to keep inference off the main thread.

The default model is Gemma 4 2B Vision (desktop WebGPU) with Qwen 2.5 1.5B as the multilingual fallback. Gemma 4 supports full multimodal input — images, audio, and video — all preprocessed in the worker before inference.

The AI has semantic memory stored in IndexedDB. Archived chat summaries are embedded locally with multilingual-e5-small and injected as RAG context for relevant follow-up sessions. It also auto-grounds Quran queries by calling a local search tool before responding.

WebGPU InferenceTransformers.js v4MultimodalSemantic Memory (RAG)Greeting GuardTool Calling
100%
Local — zero server costs
~2GB
Model size (Gemma 4 2B)
RAG
Memory across sessions
25
Languages supported

A semantic verse discovery engine built around a 30-emotion catalog. Users describe how they're feeling — “anxious about the future”, “grateful” — and the engine surfaces the most contextually relevant ayahs.

The search runs in three tiers all under 100ms: exact token lookup → binary prefix search with typo tolerance → substring fallback. It runs in parallel with the Quran.com API for proper nouns and Arabic phrases. Results are ranked using a curated semantic boosts system and qualitative match levels (Strong / Moderate / Weak).

The full dataset covers 6,236 ayahs with 20+ semantic fields each: divine message, practical takeaway, user intents, emotional triggers, and life situations. A 23-language native synonym dictionary handles colloquial queries like “أنا حزين” or “coeur brisé”.

Token IndexTypo ToleranceHybrid SearchProper Noun ResolverIntent BoostingQuran.com API fallback
6,236
Semantically tagged ayahs
30
Emotion categories
23
Native language synonym dictionaries
sub-100ms
Search across all records

A full spaced repetition system for learning the Arabic alphabet, letter combinations, vocabulary, and root word families. Cards are scheduled using Dexie IndexedDB and follow SM-2 spaced repetition logic.

The learning flow covers five phases: letter recognition → pronunciation (with real-time speech grading) → letter combinations (Noorani) → vocabulary (1,000 highest-frequency Quranic words) → root derivation (Sarf). Each phase gates progression behind mastery scores.

Daily flow onboards 3-5 new items based on performance, and the deck automatically top-ups after reviews clear so learners never stall waiting for the next day.

Spaced RepetitionSpeech GradingNoorani CombosRoot Explorer (Sarf)Pronunciation LabAdaptive Deck
1,000+
Vocabulary cards
28
Arabic letters — all forms
SM-2
Spaced repetition algorithm
5
Learning phases

The app is built to function fully offline. The service worker handles shell caching, SPA navigation fallback, and proactive version checking against a live app-version.json — users get OTA updates without hard-refreshing.

Two separate service worker scopes prevent PWA conflicts with OneSignal: the main shell worker at root (/sw.js) and the push worker at /push/onesignal/. A versioned APP_VERSION string busts all worker and model caches predictably across deployments.

Large asset updates (130MB+ embedding files) use atomic OPFS swaps: download to .tmp → verify integrity → bulk-insert to IndexedDB → rename files. The user never ends up in a broken state from a dropped connection.

Service WorkerOPFS Atomic SwapsIndexedDBOneSignal PushOffline-FirstAPP_VERSION Cache Busting
3
Offline data packs
Atomic
OPFS update strategy
OTA
Proactive shell updates
2
Worker scopes (PWA + Push)

A high-fidelity sharing engine that turns any ayah into a beautiful social media card. Every card uses “Liquid Glass” glassmorphism with a procedural Islamic geometric pattern uniquely seeded by the Surah and Ayah number.

The pipeline handles two output streams in parallel: a pixel-perfect PNG export (using html-to-image at 1x to avoid iOS Safari OOM crashes) and a normalized plain-text stream for Web Share API and clipboard — stripping all HTML tags before sharing.

Scholarly footnotes render as professional circular badges in the exported image. A global FontWarmer pre-loads critical Quranic calligraphy fonts before any capture to guarantee consistent rendering.

Liquid GlassProcedural Patternshtml-to-imageWeb Share APIFootnote BadgesSafari OOM Guards
1080×1920
Export resolution
Procedural
Unique pattern per ayah
Dual-stream
Image + plain text
FontWarmer
Pre-loaded calligraphy
How it was built

Built with a 5-agent AI system

NurQuran is my experiment in directed vibe coding— orchestrating multiple AI agents with intentionality, delegating tasks based on each model's actual strengths rather than using a single tool for everything.

Architect & Deep Reasoner
Claude Code CLI
Complex system design, architectural decisions, multi-file refactors, and long-context reasoning. Used in extended thinking mode for code review and tricky bugs.
Context Window Workhorse
Gemini CLI
Ingesting entire codebases at once. Used when a task required understanding the full project simultaneously — large-scale refactors, cross-file consistency checks, i18n coverage audits.
Code Review & Bug Fixes
OpenAI Codex
Surprisingly capable second pair of eyes. I leaned on Codex for code review passes and bug fixes — it caught regressions, edge cases, and subtle logic errors the first-pass generators missed.
Visual & Frontend Specialist
Antigravity
UI implementation, CSS precision, and design-to-code translation. Used where visual fidelity and interactive detail mattered most — the reader, overlays, share cards.
The approach
Flash models for first-pass velocity
Fast models (Codex, Gemini Flash) generated first drafts of new components and boilerplate — no wasted cycles on work that doesn't require deep reasoning.
Thinking models for code review
Claude and Gemini Pro in extended thinking mode acted as senior reviewers — catching edge cases, questioning architectural choices, and spotting bugs before they shipped.
Full-codebase context for consistency
Gemini's 1M+ token window let me run whole-project consistency checks — ensuring i18n coverage, shared conventions, and cross-file dependencies stayed aligned.
Human-directed, AI-executed
I retained ownership of every product decision, UX direction, and architectural choice. The agents were implementation force multipliers — not autonomous builders.
“This wasn't autopilot. Every feature, every tradeoff, every architecture decision was mine. The agents compressed weeks into days — but the product judgment, the taste, the north star — that remained human.”
Product vision

Where we are & where we're going

✓ Complete
Alphabet, Phonetics & Prayer
28 letters, pronunciation lab, speech grading, harakat, Salah essentials, essential surahs
1-3
✓ Complete
Mastery & Full Quran
SRS engine, progress analytics, adaptive deck, full 114-surah reader with search, juz, page navigation
4-5
✓ Complete
Audio Excellence & Community
WBW audio, 100+ reciters, fixed-bottom player, donations, support & feedback
6-7
● In Progress
Social, Sync & Polish
Ayah sharing, bookmark system, Mushaf Pro, interactive tooltips, reflection capture — mostly shipped
8
✓ Complete
Root Derivation (Sarf)
Root explorer, Sarf pattern mapping, phrasal construction, vocabulary deck to 1,000 words
9
● In Progress
Nasreddin Hodja AI
Local LLM, streaming, multimodal, RAG memory, Quran grounding, semantic search tool
10
● In Progress
Audio Excellence v2
Reciter drawer, social share cards, analytics engine, WBW Tarteel integration planned
11
○ Planned
Curriculum & Global Reach
Noorani structured path, walking roadmap UI, 25 app languages already live, Arabic RTL planned
12-13
○ Planned
Islamic Calendar & Prayer
Hijri calendar, prayer times, qibla, Ramadan context — designed, not yet built
14
○ Planned
Stories, Games & Community
Quran Stories (Visual Tafakkur), memory games, collaborative Hatm, leaderboards
15-17
Live product

See it in action

NurQuran runs as a fully installable PWA. No app store required.

Open Full App ↗← Back to Portfolio