Projects

Rafiq — Islamic Companion App

2026·9 min read

React Native
Expo
TypeScript
NativeWind
Zustand
Google Play

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 — Islamic Companion App preview

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 — 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 — 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
Five daily prayers with a live next-prayer countdown Per-prayer toggles and pre-adhan nudges
Qur'an — mushaf Ayah reader
Authentic Madani mushaf page layout Verse by verse with translation and audio
Reciters Audio library
40 reciters, background and lock-screen playback 12 curated lecture and tilāwa collections
Adhkar Tasbih
Morning, evening and situational remembrance Guided counting programs with haptics and stats
Du'as deck Asma' al-Husna
A swipeable card deck of thematic du'as The 99 names of Allah
Hijri calendar Occasions
Dual Hijri and Gregorian month grid Upcoming Islamic events and fasting reminders
Qibla compass Location
Great-circle bearing to Mecca GPS or city search, raw coordinates never shown
Greeting cards Settings
Shareable Islamic occasion cards Arabic/English, light and dark themes

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 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 + 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 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)

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-audio with 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-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)

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 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.

More projects

  • Masareef — Personal Spending Tracker2026 · React Native
  • Joke Generator2021 · JavaScript
  • Nafis — Multi-Asset Price & Portfolio2026 · React Native
All projects