Rafiq (رفيق, "companion") is a private, offline-first Islamic companion app — prayer times, an offline Qur'an, a 12-collection audio library, adhkar, tasbih, du'as, shareable greeting cards, a Hijri calendar, qibla, and Android home-screen widgets — with no ads, no tracking, and no accounts. Built with Expo SDK 57, React Native 0.86, and TypeScript.
Rafiq (رفيق) means companion — the kind that walks with you quietly, asks for nothing, and is there when you need it. That's the goal of this app.
Download
Rafiq is live on Google Play — Android, Arabic & English, free, no ads, no tracking.
Screens
Sixteen screens — the whole app, in both the dark "night" and cream "mushaf paper" themes.
| Prayer times | Adhan reminders |
|---|---|
![]() |
![]() |
| Qur'an — mushaf | Ayah reader |
![]() |
![]() |
| Reciters | Audio library |
![]() |
![]() |
| Adhkar | Tasbih |
![]() |
![]() |
| Du'as deck | Asma' al-Husna |
![]() |
![]() |
| Hijri calendar | Occasions |
![]() |
![]() |
| Qibla compass | Location |
![]() |
![]() |
| Greeting cards | Settings |
![]() |
![]() |
Why Rafiq
Most Islamic apps ship with banner ads, request notification permission on launch, and ping analytics for every tap. Rafiq doesn't. No third parties, no telemetry SDKs, no accounts — the only data on your device is your own settings.
- Works without a connection — prayer times are computed on-device (the
adhanlibrary) with the Aladhan API as an optional refinement, the full Qur'an Arabic text is bundled in SQLite, and adhkar / du'as / greetings are vetted local JSON copies. The only network calls are the optional Qur'an translation + per-ayah audio, and the streamed audio-library collections. - Private by default — your coordinates stay on the device to compute prayer times; nothing identifying ever leaves it. Raw GPS coordinates are never even shown on screen.
- Arabic-first, RTL-correct — Arabic is the default language with full RTL layout and Arabic-Indic digits. English is a first-class second.
- Beautiful by intent — a dark "night" theme by default and a warm cream mushaf paper light theme. Real Arabic typography (QCF Madani fonts + Amiri for scripture, Cairo for UI), not system fallbacks. A custom center-hub bottom bar with a live next-prayer dial.
Features
Every planned phase is shipped, and Rafiq is live on the Google Play production track (v1.39.0). The app is a 7-tab center-hub experience: prayers · audio · adhkar · Qur'an · calendar · qibla · settings.
Prayer times
- Five daily prayers with a next-prayer highlight and live per-second countdown
- On-device computation via the
adhanlibrary — fully offline; the Aladhan API refines/confirms when online - Current-prayer pulse on the most recently passed prayer; status badges + reminder bells per row
- Location-based (GPS + reverse-geocode) or validated city search; raw coordinates never shown
- Hijri date; Arabic-Indic digits throughout
armode - 9 calculation methods (default: Egyptian) + Asr school toggle (Shafiʿi / Hanafi)
- Offline-resilient: TanStack Query cache persisted to MMKV (30-day window)
Hijri calendar
- Dual Hijri / Gregorian month grid with swipeable navigation and an upcoming-events strip
- Per-day detail screen with the day's prayer times and any Islamic events
- System toggle for the primary calendar + per-user Hijri offset for moon-sighting differences
- Fasting reminders — opt into individual fast days, each with its own pre-dawn notification
Notifications
- Local adhan notifications scheduled from a cached monthly Aladhan calendar (14-day horizon)
- Per-prayer toggle (5 prayers) + optional pre-adhan reminder (5 / 10 / 15 / 20 min before)
- Salawat reminders — gentle, random-feeling but deterministic reminders to send prayers on the Prophet ﷺ, with a configurable daily window
- Daily du'a + fasting reminders; exact alarms (
USE_EXACT_ALARM) so they fire on the minute - Diff-based scheduler (60-item iOS cap, 150 on Android); tap a notification → Home
- Permission flow with an "open system settings" fallback; uses the default OS sound
Qur'an reader
- 114-surah landing with live search → reader
- Bundled offline — the full Uthmani Arabic text ships in SQLite (
assets/quran.db), so surahs open instantly with no network - Mushaf mode (default) — authentic Madani page layout using QCF V1 per-page fonts, a cross-surah 604-page swipeable pager
- Verse-by-verse reader as the alternative mode (Amiri scripture, never truncated)
- Translation toggle, 5 editions (Itani's Clear Quran, Sahih International, Asad, Pickthall, Yusuf Ali) — translation is the only network-fetched part
- Per-ayah audio via
expo-audiowith 40 reciters (default: Alafasy) - Global mini-player, lock-screen / background playback, auto-advance, auto-scroll, word-tap audio
- Last-read auto-resume + a bookmarks strip on the Qur'an tab
Audio library
- A dedicated Audio tab with 12 curated collections of lectures, khutbahs, and tilāwa — Mostafa Mahmoud, Sha'rawy, Kishk, Al-Nabulsi, Omar Abdel-Kafi, Ahmed Al-Shugairi, Yasir Al-Huzaimi, Mustafa Ismail, Sayed Al-Naqshbandi, and more
- Hundreds of streamed episodes + audiobooks (sourced from archive.org and podcast RSS), each with its own entry types (episodes / books)
- Search across speakers and titles (diacritic-folded, both scripts), a load-on-scroll list, and per-collection disclaimers
- A dedicated audio provider with its own mini-player, background / lock-screen playback, listen history, and per-item progress
- Bookmarks + history surfaced together in a unified Saved hub alongside Qur'an bookmarks
Adhkar, du'as & tasbih
- 19 categories from Hisn al-Muslim (morning, evening, sleep, waking, after-prayer, wudu, mosque, food, travel, distress, istighfar, du'as, and more situational sets)
- Tap-to-count counter with haptics, a progress ring, and auto-advance
- Per-dhikr explanations + humanized references (ar + en), inline reveal
- Du'as deck — a swipeable card deck of thematic du'as with daily rotation, favorites, and shareable image cards
- Tasbih — guided programs (after-prayer, morning, evening, sleep) that auto-advance step by step, plus free counting; a 10-dhikr library each with a short virtue, a build-your-own program builder, and session + all-time stats
- Asma' al-Husna — the 99 names of Allah
- Daily reset, per-category progress persisted to MMKV — fully offline
Greeting cards
- Craft and share beautiful Islamic occasion cards for Jumuʿah, the two Eids, Ramadan, the last ten nights, ʿAshura, Arafah, the Hijri new year, Hajj, condolences, and more
- Curated, authentic greeting + hadith text per occasion (ar + en) with a matching mood palette
- A live composer: pick an occasion, choose a themed background (or a custom hue via a hand-rolled slider), toggle a geometric motif, and export a high-resolution shareable image
Qibla, widgets & polish
- Magnetometer compass dial, great-circle bearing to Mecca, and distance in km; lay-flat / calibrate hints, smooth spring animation
- Four home-screen widgets via
react-native-android-widget— Salawat, Next Prayer (live countdown), daily Counter, and a switchable Combo — all running offline from MMKV - Center-hub bottom bar — 3 tabs ∣ a live next-prayer SVG dial ∣ 3 tabs; shareable image cards via
react-native-view-shot - Home-screen quick actions — long-press the app icon for shortcuts into Tasbih, Du'ās, and the audio collections (
expo-quick-actions) - Keep-screen-awake while reading Qur'an, counting tasbih, or finding the qibla (
expo-keep-awake) - In-app review prompt — a silent, self-throttled Play review ask at a natural moment (
expo-store-review) prefers-reduced-motionrespected across every animation (drift, pulse, completion ring, compass spring, ayah fade-in, mini-player slide)- Accessibility labels for screen readers; an app-wide typography & design-consistency pass
- Islamic geometric ornaments, breathing hero glows, one unified ambient drifting background
- Fast, quiet launch — analytics init deferred off the launch frame + a friendlier in-app error screen
- In-app force-update prompt (Android) + EAS Update OTA that applies behind the splash on launch (never mid-session)
Tech stack
| Layer | Choice |
|---|---|
| Framework | Expo SDK 57 (managed) + Expo Router (file-based routing) |
| Runtime | React Native 0.86 / React 19.2, React Compiler enabled |
| Language | TypeScript, strict mode |
| UI | NativeWind 4 + react-native-reusables (shadcn philosophy for RN) |
| Animation | react-native-reanimated 4 (with prefers-reduced-motion respected) |
| Server state | TanStack Query + persistence to MMKV (offline cache) |
| Client state | Zustand + react-native-mmkv v4 (Nitro module) |
| Bundled Qur'an | expo-sqlite (full Uthmani text in assets/quran.db) |
| Prayer math | adhan (on-device computation, offline) |
| Audio | expo-audio (background + lock-screen) |
| Location | expo-location (with reverse-geocoding) |
| Sensors | expo-sensors (magnetometer for qibla) |
| Notifications | expo-notifications (USE_EXACT_ALARM) |
| Widgets | react-native-android-widget (home-screen widgets) |
| Capture | react-native-view-shot + expo-sharing (share cards) |
| Updates | expo-updates (OTA, applied behind splash) + expo-in-app-updates (Play force-update) |
| Native polish | expo-quick-actions · expo-keep-awake · expo-store-review |
| Analytics | PostHog + EAS Observe fan-out (privacy-safe, error tracking) |
| Fonts | QCF V1 Madani + Amiri (scripture) + Cairo (UI) via @expo-google-fonts |
| Icons | lucide-react-native |
Data sources (no API key, no auth): the Qur'an Arabic text is bundled offline (assets/quran.db); prayer times are computed on-device (adhan) with Aladhan refining + supplying the monthly calendar; alquran.cloud supplies Qur'an translations + per-ayah audio; the audio-library collections stream from archive.org + podcast RSS feeds. Adhkar, du'as, and greetings are vetted local JSON bundles (Hisn al-Muslim and curated occasion text) — never fetched.
Non-negotiables
These are load-bearing — every change must respect them:
- No ads, no accounts, no third-party tracking. Network is limited to Aladhan, alquran.cloud (translations + audio), and the audio-library sources (archive.org + podcast RSS).
- Offline-first. Prayer times compute on-device; Qur'an Arabic text + adhkar + du'as + greetings are bundled and fully offline.
- Arabic-first, RTL-correct. Arabic-Indic digits in
armode — never raw API numbers. - Never truncate ayahs or adhkar. Qur'an ayah-by-ayah, full text. Adhkar dataset is a vetted local copy.
- Raw GPS coordinates never shown. A location label guard keeps coordinates off-screen and never stores them as labels.

















