Platform hafalan Al-Qur'an — source code publik, lisensi komunitas. Audio per ayat, repeat, mode fokus, dan dukungan offline. Tanpa akun. Mobile-first.
Repository: github.com/raqolbi/hanquran-app
HanQuran adalah aplikasi web (PWA) untuk menghafal dan murojaah Al-Qur'an. Bukan sekadar pembaca Quran — fokus utamanya adalah pengulangan terpandu audio, mode baca bebas distraksi, dan pembelajaran yang dapat dilanjutkan dari posisi terakhir.
Menjadi platform hafalan Al-Qur'an yang source code-nya terbuka untuk komunitas, dengan lisensi yang mendukung penggunaan non-komersial — termasuk penggunaan offline setelah konten diunduh. Visi lengkap: docs/00-vision.md.
| Prinsip | Makna |
|---|---|
| Memorization First | Setiap keputusan produk dievaluasi: apakah ini membantu menghafal? |
| Mobile First | Dirancang untuk layar kecil dan sentuhan |
| Offline First | Setelah unduhan, aplikasi tidak bergantung pada internet |
| Simplicity First | Tanpa registrasi, tanpa login, tanpa konfigurasi rumit |
Alur inti yang dituju:
Buka aplikasi → Pilih surat → Putar audio → Aktifkan repeat → Mode fokus → Hafal
- Hafalan (tahfidz) dengan repeat ayat / range / seluruh surat
- Audio tilawah per ayat
- Mode Fokus — satu ayat, minim distraksi
- Lanjutkan Hafalan dari posisi terakhir
- Preferensi lokal (bahasa UI, qari, tampilan ayat, aksesibilitas)
| Aspek | Keterangan |
|---|---|
| Versi | 0.3.0 |
| Scope | MVP V1 dibekukan di docs/20-mvp-freeze.md |
| Implementasi | Core MVP + Growth 0.2.0/0.3.0 — lihat RELEASE.md |
| Pengujian | 222 unit test (Vitest) |
| Deploy | Direncanakan di Vercel |
Sudah diimplementasikan (diverifikasi dari codebase): daftar 114 surat (lazy load kartu), detail surat, audio player (kecepatan putar, prefetch ayat berikutnya), repeat engine + badge progress x/y, mode fokus, Mode Murotal, Media Session (lock screen), favorit surat, lanjutkan hafalan, auto follow playback, layar Tentang HanQuran, i18n UI (id / en), unduh offline per surat, Service Worker, PWA (manifest, install prompt, offline shell, splash), Vercel Analytics.
Belum selesai / di luar MVP V1 (dokumentasi resmi): word-by-word highlight, persist posisi audio, verifikasi E2E offline, error tracking produksi, seluruh kriteria rilis di docs/20-mvp-freeze.md §9.
- Screenshot
- Fitur
- Tech Stack
- Arsitektur
- Struktur Folder
- Prasyarat
- Instalasi
- Menjalankan Project
- Environment Variables
- Pengujian
- Deployment
- Dokumentasi
- Komunitas & Kontribusi
- Credits
- Maintainer
- License
Pratinjau antarmuka HanQuran — mobile-first, UI Bahasa Indonesia.
Beranda — Lanjutkan Hafalan, pencarian, filter favorit, daftar surat
| Detail surat | Mode Fokus |
|---|---|
![]() |
![]() |
| Detail surat — ayat, terjemahan & transliterasi, unduh offline | Mode Fokus — satu ayat, minim distraksi |
| Pengaturan Repeat | Pengaturan |
|---|---|
![]() |
![]() |
| Repeat — jumlah (1×–∞), target ayat / range / surat | Pengaturan — bahasa, qari, playback, ukuran teks, offline |
| Fitur | Deskripsi |
|---|---|
| Beranda | 114 surat, pencarian, filter favorit, kartu Lanjutkan Hafalan |
| Detail Surat | Ayat Uthmani, terjemahan & transliterasi (toggle), audio, repeat, unduh offline |
| Mode Fokus | Satu ayat per layar, navigasi ayat, audio & repeat (tanpa word highlight di MVP) |
| Pengaturan | Bahasa UI, qari, Auto Follow Playback, Mode Murotal, ukuran teks Arab, kontras tinggi, animasi, status & hapus cache |
| Tentang HanQuran | Informasi aplikasi, filosofi, credits, repository & lisensi |
| Offline | Unduh audio per surat; Service Worker cache dataset & aset |
| PWA | Instal ke layar utama, splash screen, halaman fallback offline |
| Fitur | Lokasi |
|---|---|
| Service layer Quran | services/quran/ |
| Audio controller & Media Session | services/audio-controller.ts, services/media-session.ts |
| Repeat engine | services/repeat-engine.ts |
| State (Zustand) | stores/ |
| Persistensi pengguna (Dexie) | services/db/ |
| Custom analytics | lib/analytics/ — lihat docs/analytics.md |
| Rute | Halaman |
|---|---|
/ |
Beranda |
/surah/[id] |
Detail surat (?ayah= opsional) |
/focus/[id] |
Mode fokus (?ayah= opsional) |
/settings |
Pengaturan |
/settings/about |
Tentang HanQuran |
Spesifikasi lengkap: docs/14-routing-spec.md.
| Lapisan | Teknologi |
|---|---|
| Framework | Next.js 16 (App Router) |
| Bahasa | TypeScript 5.7 |
| UI | React 19, Tailwind CSS 4, shadcn/ui (@base-ui/react) |
| Animasi | Motion |
| State runtime | Zustand 5 |
| Persistensi | Dexie 4 (IndexedDB) |
| i18n UI | next-intl 4 — id, en |
| PWA | Service Worker (public/sw.js), Web App Manifest |
| Analytics | @vercel/analytics |
| Testing | Vitest 4 + Testing Library + jsdom |
Keputusan arsitektur dibekukan: docs/20-mvp-freeze.md Bagian 7.
public/data/* → services/quran/* → hooks → UI
Konten Quran tidak disimpan di Dexie. Sumber kebenaran: dataset statis di public/data/. Detail: docs/23-static-dataset-architecture.md.
UI → Zustand stores → Dexie (settings, favorites, lastRead, downloadManifest)
CDN tilawah (everyayah.com) → AudioController → HTMLAudioElement
↓
Cache Storage (Service Worker)
- Service Worker:
hanquran-static-v1,hanquran-shell-v1,hanquran-data-v1,hanquran-audio-v1 - Registrasi SW: production only —
lib/register-service-worker.ts
Penting: PWA dan Service Worker tidak aktif di
npm run dev. Uji dengannpm run build && npm startatau deployment Vercel.
hanquran-app/
├── app/ # Next.js App Router (halaman & layout)
├── components/ # UI layar, shared, primitives (ui/)
├── hooks/ # Custom React hooks
├── lib/ # Utilitas, analytics, routes, PWA helpers
├── services/ # Quran loader, audio, repeat, download, db
├── stores/ # Zustand (audio, user, repeat, offline)
├── types/ # TypeScript types domain
├── i18n/ # Konfigurasi next-intl
├── messages/ # String UI (id.json, en.json)
├── data/ # reciters.json (metadata qari)
├── public/
│ ├── data/ # Dataset Quran & terjemahan (114 surat)
│ ├── sw.js # Service Worker
│ ├── manifest.json # PWA manifest
│ └── branding/ # Logo
├── tests/ # Unit & integration tests (Vitest)
└── docs/ # Dokumentasi proyek (vision, spec, tasks, …)
Referensi lengkap: docs/16-folder-structure.md.
| Tool | Versi minimum |
|---|---|
| Node.js | 20 LTS |
| npm | 10 |
git clone git@github.com:raqolbi/hanquran-app.git
cd hanquran-app
npm installMVP tidak memerlukan kredensial API eksternal. Konten Quran dari public/data/*; audio dari CDN tilawah; daftar qari dari data/reciters.json.
Panduan developer lengkap: docs/SETUP.md.
| Perintah | Fungsi |
|---|---|
npm run dev |
Dev server di http://localhost:3000 |
npm run build |
Build produksi |
npm run start |
Jalankan build produksi |
npm run test |
Unit & integration tests |
npm run test:watch |
Tests mode watch |
npm run lint |
ESLint |
MVP tidak mewajibkan environment variable. File contoh: .env.example.
# Opsional — salin jika diperlukan di masa depan
cp .env.example .env.localVariabel khusus (mis. Sentry) dapat ditambahkan saat Phase 8 release monitoring diimplementasikan — lihat docs/18-development-tasks.md.
npm run test- 222 test di
tests/(Vitest + jsdom + fake-indexeddb) - Konfigurasi:
vitest.config.ts, setup:tests/setup.ts
HanQuran di-host di Vercel:
- Production: branch
main - Preview: otomatis per PR / push branch
- Staging opsional: branch
staging+ subdomain
Panduan lengkap, checklist QA, dan rollback: docs/25-deployment-vercel.md.
Platform tambahan via Capacitor — sumber UI/data sama dengan PWA; tidak mengganti saluran web.
npm run android:sync # export static + cap sync
npm run android:bundle # AAB release (butuh keystore — lihat di bawah)| Item | Dokumen / lokasi |
|---|---|
| Spek platform & fase A0–A5 | docs/32-capacitor-android-platform.md |
| Privacy / Data safety Play | docs/33-play-store-privacy-and-data-safety.md |
| Overlay Gate Threads | docs/34-threads-gate-spec.md |
| Keystore lokal | android/keystore.properties.example → salin ke keystore.properties (jangan commit) |
| CI export | .github/workflows/android-export.yml |
| CI AAB (opsional) | .github/workflows/android-aab.yml (workflow_dispatch / tag v*) |
Catatan rilis: RELEASE.md.
| Dokumen | Isi |
|---|---|
docs/00-vision.md |
Visi, misi, positioning |
docs/20-mvp-freeze.md |
Scope MVP V1 (dibekukan) |
docs/SETUP.md |
Setup developer |
docs/18-development-tasks.md |
Backlog & progress implementasi |
docs/14-routing-spec.md |
Spesifikasi rute |
docs/15-state-management.md |
State & persistensi |
docs/07-api-integration.md |
Sumber data & integrasi |
docs/26-about-screen-spec.md |
Layar Tentang HanQuran |
docs/27-media-session-api-spec.md |
Media Session API (lock screen) |
docs/28-playback-settings.md |
Auto Follow Playback |
docs/30-offline-behavior-spec.md |
Perilaku offline (+ addendum APK) |
docs/32-capacitor-android-platform.md |
Platform Capacitor Android |
docs/33-play-store-privacy-and-data-safety.md |
Privasi & Data safety Play |
docs/34-threads-gate-spec.md |
Overlay Gate Threads (sekali, gimmick) |
docs/analytics.md |
Event Vercel Analytics |
CLAUDE.md |
Konvensi penulisan kode & dokumen |
Source code HanQuran tersedia secara publik di GitHub di bawah
HanQuran Community License v1.0 (HCCL) — gratis untuk
penggunaan non-komersial; penggunaan komersial memerlukan izin tertulis
(lihat COMMERCIAL-LICENSE.md).
Repository menerima kontribusi komunitas: fork, modifikasi untuk penggunaan non-komersial, dan pull request sesuai HCCL.
- Cek Issues yang sudah ada.
- Buat issue baru dengan:
- Langkah reproduksi
- Perilaku yang diharapkan vs aktual
- Browser / perangkat (terutama untuk audio, PWA, offline)
- Screenshot atau log jika relevan
- Baca scope MVP di
docs/20-mvp-freeze.md— fitur di luar scope diklasifikasikan Post-MVP / Growth / Future Vision. - Buka GitHub Issue dengan label atau judul yang jelas menjelaskan masalah pengguna dan manfaat hafalan.
- Fork repository & buat branch fitur.
- Ikuti konvensi di
CLAUDE.md(Bahasa Indonesia untuk UI & docs; nama kode tetap Inggris). - Pastikan
npm run testdannpm run buildlulus. - Buka Pull Request ke
maindengan deskripsi perubahan dan tautan ke task didocs/18-development-tasks.mdjika ada.
Belum ada CONTRIBUTING.md terpisah; panduan ini dan docs/SETUP.md menjadi referensi sementara.
Sumber eksternal dan library yang benar-benar dipakai oleh project:
| Sumber | Penggunaan |
|---|---|
Dataset statis public/data/ |
Teks Arab Uthmani, metadata surat, terjemahan id & en (manifest v1.0.0, 114 surat / 6236 ayat) |
| EveryAyah | CDN audio tilawah per ayat (AYAH_AUDIO_BASE_URL di services/quran/audio-config.ts) |
data/reciters.json |
Metadata qari yang didukung (slug CDN + nama tampilan) |
Next.js · React · TypeScript · Tailwind CSS · shadcn/ui · Zustand · Dexie · next-intl · Motion · Lucide React · Vitest
| Layanan | Penggunaan |
|---|---|
| Vercel | Hosting & deployment (direncanakan) |
| Vercel Analytics | Page views & custom events produksi |
Aset logo di public/branding/ — komponen components/shared/Logo.tsx.
| Repository | github.com/raqolbi/hanquran-app |
| Maintainer | Ramadian (@raqolbi) |
HanQuran is licensed under the HanQuran Community License v1.0 (HCCL).
| Penggunaan | Izin |
|---|---|
| Pribadi, pendidikan, riset | ✅ Gratis (non-komersial) |
| Masjid, sekolah Islam, lembaga keagamaan, nirlaba | ✅ Gratis (non-komersial) |
| Fork, modifikasi, self-host non-komersial, kontribusi PR | ✅ Sesuai HCCL |
| SaaS, aplikasi berbayar, white-label, redistribusi komersial, dll. | ❌ Memerlukan izin tertulis — lihat COMMERCIAL-LICENSE.md |
Dengan menggunakan atau mendistribusikan software ini, Anda setuju pada ketentuan
di LICENSE. Software disediakan "as is" tanpa garansi.
Pertanyaan lisensi komersial: buka issue atau hubungi maintainer melalui github.com/raqolbi/hanquran-app.
HanQuran — Read, Listen, Memorize.




