Projects

Rafiq — Islamic Companion App

2026·10 min read

React Native
Expo
TypeScript
NativeWind
Zustand
App Store (opens in a new tab)Google Play (opens in a new tab)

Rafiq (رفيق, "companion") is a private, offline-first Islamic companion app — prayer times, a prayer tracker, an offline Qur'an, a 16-collection audio library, adhkar, tasbih, du'as, shareable image and greeting cards, a Hijri calendar, qibla, and Android home-screen widgets — with no ads, no accounts, and no third-party tracking. Built with Expo SDK 57, React Native 0.86, and TypeScript.

Rafiq — Islamic Companion App preview
On this page6 sections
  • Download
  • Screens
  • Why Rafiq
  • Features
  • Tech stack
  • Non-negotiables

Rafiq (رفيق, "companion") is a private, offline-first Islamic companion app — prayer times, a prayer tracker, an offline Qur'an, a 16-collection audio library, adhkar, tasbih, du'as, shareable image and greeting cards, a Hijri calendar, qibla, and Android home-screen widgets — with no ads, no accounts, and no third-party tracking. Built with Expo SDK 57, React Native 0.86, and TypeScript.

Rafiq — a quiet, private Islamic companion

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 and on the App Store — Arabic & English, free, no ads, no accounts, no third-party tracking.

One link that sends each phone to its own store: the install page. It is what the QR code on every share card opens.

Screens#

Sixteen real device captures — every part of the app, in the default dark "night" theme (a warm cream mushaf paper light theme ships alongside it).

Five daily prayers with a live next-prayer countdown
Prayer times
Log each prayer on time, late or missed — streaks, a monthly record and extra deeds
Prayer tracker
Authentic Madani mushaf page layout, bundled offline
Qur'an — mushaf
All 114 surahs with live search and last-read resume
Surah index
16 curated lecture and tilāwa collections
Audio hub
Episodes and audiobooks with search, progress and background playback
Collection player
19 categories from Hisn al-Muslim
Adhkar
Tap to count, with source, virtue and per-dhikr audio
Adhkar counter
Guided counting programs with haptics and stats
Tasbih
A swipeable deck of 101 thematic du'ās
Du'as deck
The 99 names of Allah with meanings
Asma' al-Husna
Dual Hijri and Gregorian month grid with upcoming events
Hijri calendar
Great-circle bearing and distance to Mecca
Qibla compass
GPS or city search; raw coordinates never shown
Location
Shareable Islamic occasion cards with a live composer
Greeting cards
Arabic/English, light and dark themes, calculation method
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 ads, no accounts, no personal or location data ever leaves the device — the only data on it is your own settings.

  • Works without a connection — prayer times are computed on-device (the adhan library) 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, tafsir and 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 live on both the App Store and the Google Play production track. 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 adhan library — 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 ar mode
  • 9 calculation methods (default: Egyptian) + Asr school toggle (Shafiʿi / Hanafi)
  • Offline-resilient: TanStack Query cache persisted to MMKV (30-day window)

Prayer tracker

  • Log every prayer with three states — on time / late / missed — by tapping the same row again
  • Day streak + best streak, a "kept today" tally, and a perfect-day state
  • Monthly record grid with swipeable months, so a whole month reads at a glance
  • Extra deeds per day — qiyām, witr, duḥā, fasting, morning/evening adhkar, a Qur'an portion
  • A free-text note per day; everything persisted locally to MMKV

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 (20 occasion types)
  • 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
  • Android 16-safe grouping — a stale unread notification can no longer mute the next one
  • 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), plus tafsir on demand — the only network-fetched parts
  • Per-ayah audio via expo-audio with 40 reciters (default: al-Banna)
  • Global mini-player, lock-screen / background playback, auto-advance, auto-scroll, word-tap audio with a moving highlight
  • Long-press a verse for the ayah actions sheet; last-read auto-resume + a bookmarks strip on the Qur'an tab

Audio library

  • A dedicated Audio tab with 16 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 rights disclaimers
  • A dedicated audio provider with its own mini-player, background / lock-screen playback, listen history, per-item progress and completed-state tracking
  • Players are created lazily — no media session is opened until something actually plays
  • 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 recited audio with autoplay through a session, plus explanations and humanized references (ar + en), inline reveal
  • Du'as deck — a swipeable deck of 101 thematic du'ās 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, each with its meaning
  • Daily reset, per-category progress persisted to MMKV — fully offline

Share cards & greetings

  • Turn any verse, dhikr, du'ā, name of Allah, or calendar day into a branded image card — or share it as text
  • Three formats per card: portrait (4:5), story (9:16), square (1:1); an embedded QR to the install link survives re-forwarding
  • Greeting 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, sign it with a name, and export a high-resolution image
  • Share history — everything shared, newest-first, each re-shareable; an image record re-composes the exact card off-screen

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, native-RTL aware
  • A written how-to — one screen listing every invisible gesture (long-press a verse, swipe a month, tap to count), reachable forever from Settings
  • 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 store review ask at a natural moment (expo-store-review)
  • prefers-reduced-motion respected 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)
  • Privacy-safe analytics — PostHog + EAS Observe fan-out with error tracking; never any personal or location data

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, lazy players)
Location expo-location (with reverse-geocoding)
Sensors expo-sensors (magnetometer for qibla)
Notifications expo-notifications (USE_EXACT_ALARM, built from source)
Widgets react-native-android-widget (home-screen widgets)
Capture react-native-view-shot + expo-sharing + react-native-qrcode-svg
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, tafsir + 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, tafsir + audio), and the audio-library sources (archive.org + podcast RSS). Analytics carry no personal or location data.
  • 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 ar mode — 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.
  • Every screen scrolls. Content is never truncated by a small viewport.

More projects

  • Masareef — Personal Spending Tracker2026 · React Native
  • Khazna — Pocket Vault for Links, Notes & Lists2026 · React Native
  • Nafis — Multi-Asset Price & Portfolio2026 · React Native
All projects
  • Download
  • Screens
  • Why Rafiq
  • Features
  • Tech stack
  • Non-negotiables