Quran.bid — A SvelteKit rewrite of Quran.com with extra things.
A fast, mobile-friendly Quran reader built with SvelteKit and Svelte 5, deployed on Cloudflare Workers. It delivers a complete Quran reading and study experience powered by the Quran Foundation APIs.
Developer experience. The current quran.com frontend is a large Next.js/Redux application that is slow to build, heavy to run locally, and difficult to contribute to. Quran.bid is a SvelteKit rewrite — significantly smaller bundle size, near-instant HMR, lower memory usage during development, and fast cold deploys on edge infrastructure.
Keyboard-first navigation. Quran.bid adds a keyboard shortcut system for power users — jump to search, navigate surahs, control audio playback, and explore the app without touching the mouse. This is aimed at developers, students, and anyone who spends long sessions with the Quran on a desktop.
Learning through games. Quran.bid includes interactive games (Which Surah? and Prev/Next Ayah) to make Quran learning active and habit-forming — turning occasional visitors into returning users who test and reinforce their knowledge.
T to cycle.T cycle theme, M open menu, F jump to footer, R go to radio, K open search, S reader settings, ? open onboarding tour? anytime to replay.| Route | Notes |
|---|---|
/ — Home |
Full surah list with search filter |
/[chapterId] — Chapter reader |
Translation view + Mushaf (page) view |
/[chapterId]/[verseId] — Verse deep link |
Jumps to specific verse |
/search — Search |
Full-text Quran search via QF API |
/radio — Quran radio |
Live stream with reciter info |
/games — Games |
"Which Surah?" + "Prev/Next Ayah" quizzes |
/my-quran — Personal dashboard |
Bookmarks + notes + reading goal overview |
/reading-history — History |
Auto-tracked verses |
/reading-goal — Goal tracker |
Daily reading target with progress |
/profile — Profile |
Avatar, display name, Quran.com OAuth |
Used via a server-side proxy (/api/proxy/content) to keep credentials secure:
/gateway/chapters for surah list with Arabic/translated names/gateway/verses/by_chapter/{id} with fields for Arabic text, translations, word positions, page/juz/hizb metadata/gateway/tafsirs/{id}/by_ayah/{key} for per-verse commentary/gateway/hadith_references/by_ayah/{key}/hadiths/gateway/layered_translations/by_key/{key}/gateway/qiraat/matrix/by_verse/{key} for recitation variant data/gateway/related_verses/by_verse/{key}/gateway/audio_files/reciter/{id}/by_chapter/{id}/gateway/verses/by_key/{key}?words=true/gateway/searchBatched count calls: Batch count requests across 20-verse windows, reducing network requests from ~40 per page view to ~4.
Used via a user-token proxy (/api/proxy/qf-auth) that forwards the logged-in user's QF OAuth token:
/activity-days for reading history/bookmarks for saving and retrieving bookmarked verses/notes for user reflections and notes per verse/goal/status to check/create daily reading targets/streaks for reading streak data/questions/count-within-range for community answers count per versebetter-auth| Layer | Technology |
|---|---|
| Framework | SvelteKit 2 + Svelte 5 (runes) |
| Styling | Tailwind CSS + DaisyUI 5 |
| Database | Neon PostgreSQL + Drizzle ORM |
| Auth | better-auth + Quran.com OAuth |
| Deployment | Cloudflare Workers |
| Language | TypeScript |
pnpm install
pnpm dev
pnpm build