A gentle, all-in-one prayer companion for iPhone and iPad.
Prayaholic brings daily prayer essentials into one warm, focused iOS experience. It uses the device's location to show accurate prayer times, guides the user toward the Qibla, sends configurable reminders, keeps a private prayer-completion history, and provides illustrated, step-by-step salah guidance.
| Prayer times | Qibla | Tracker | Prayer guide |
![]() |
![]() |
![]() |
- Location- and timezone-aware times for Fajr, Sunrise, Dhuhr, Asr, Maghrib, and Isha
- A live current-prayer header and countdown to the next prayer
- A visual sun path showing prayer markers and the current point in the day
- Day-by-day navigation with both Gregorian and Umm al-Qura Hijri dates
- Automatic fallback to Makkah when a device location cannot be obtained
- A notification toggle for each of the five obligatory prayers
- Optional reminders 5, 10, or 15 minutes before prayer time
- Local notification scheduling for today and tomorrow
- Preferences persist between launches using
AppStorage
- Calculates the great-circle bearing from the user's position to the Kaaba
- Uses live compass heading to provide left/right alignment guidance
- Haptic ticks while turning and a stronger confirmation pattern on alignment
- Built-in compass calibration tips
Compass accuracy depends on the device's sensors and surrounding magnetic interference. Test Qibla behavior on physical hardware for the best result.
- A heart-based checklist for the five daily obligatory prayers
- Local history stored on-device with SwiftData
- Date navigation and an interactive seven-day completion view
- A celebratory state when all five prayers are marked complete
- Separate guidance for Fajr, Dhuhr, Asr, Maghrib, and Isha
- Prayer-specific sequences based on the required number of rak'ahs
- Swipeable illustrated steps for standing, bowing, prostration, sitting, Tashahhud, and Taslim
- Included transliterations and short recitations for each position
Prayaholic is built entirely with Apple frameworks and has no third-party package dependencies.
| Area | Implementation |
|---|---|
| Interface | SwiftUI with a four-tab, portrait-oriented layout |
| Prayer data | Moonsighting.com yearly prayer-time API with an in-memory response cache and backup endpoint |
| Location | Core Location and reverse geocoding |
| Qibla | Great-circle bearing calculation, device heading, and Core Haptics |
| Persistence | SwiftData for tracked prayers and AppStorage for reminder preferences |
| Notifications | UserNotifications with per-prayer local scheduling |
The app's shared LocationService and PrayerTimeAPIService instances are created at the tab-container level and passed to the screens that need them. Prayer completion records are stored in a shared SwiftData model container.
- macOS with Xcode 26 or later
- iOS or iPadOS 18.6 or later
- An Apple development team when running on a physical device
- An internet connection for prayer-time retrieval
- Location permission for local times and Qibla direction
- Notification permission for prayer alerts and advance reminders
- Clone this repository and enter the project directory.
- Open
Prayaholic.xcodeprojin Xcode. - Select the Prayaholic scheme.
- Choose an iOS simulator or a connected device.
- If using a physical device, select your development team under Signing & Capabilities.
- Build and run with ⌘R, then allow location and notification access when prompted.
You can also verify a simulator build from the command line:
xcodebuild \
-project Prayaholic.xcodeproj \
-scheme Prayaholic \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 17' \
CODE_SIGNING_ALLOWED=NO \
buildIf your simulator has a different name, replace iPhone 17 with a destination listed by:
xcodebuild -project Prayaholic.xcodeproj -scheme Prayaholic -showdestinationsPrayaholic/
├── Models/ Prayer times, tracked prayers, guide steps, and location data
├── Services/ Location, prayer-time API, and notification services
├── Theme/ Shared colors, typography, and card styling
├── Utilities/ Small framework extensions
├── Views/
│ ├── Prayer/ Daily schedule, sun path, rows, and notification settings
│ ├── Qibla/ Compass and direction guidance
│ ├── Tracker/ Daily checklist and weekly trend
│ └── Settings/ Illustrated prayer guide
└── Assets.xcassets/
- Prayer completion history stays in the app's local SwiftData store.
- Notification settings stay in local app preferences.
- The selected location coordinates, timezone, and year are sent to the prayer-time provider to retrieve a schedule.
- Location is also used by Apple's geocoder to display a city name.
- The app does not include accounts, advertising, or analytics SDKs.
Schedules are retrieved from Moonsighting.com using the app's configured calculation method. Prayer times can vary by calculation convention and local authority; users should confirm the convention appropriate to their community.
Issues and pull requests are welcome. For user-facing changes, please include simulator or device screenshots and verify that location-denied, offline, and notification-denied states remain usable.


