Sync accurate prayer times to Google, Apple, or Outlook calendars
Subscribe once. Get accurate prayer times synced to your calendar — updated automatically.
- One-click subscribe to Google Calendar, Apple Calendar, or Outlook
- QR code for easy mobile subscription
- PDF export for printable timetables
- Shareable presets for mosques and communities
- 14+ calculation methods — Egyptian, ISNA, MWL, Umm Al-Qura, Diyanet, and more
- Customizable alarms — at prayer time or 5/10/15/20/30 minutes before
- Select specific prayers — Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha, Midnight
- Weekday filtering — generate events for specific days only
- Custom event duration — 5 to 60 minutes
- Ramadan Mode — automatic Iftar, Tarawih, and Suhoor events
- Travel Mode (Qasr) — shortened prayers for travelers
- Jumu'ah Mode — Friday prayer replacing Dhuhr
- Busy Status — block calendar availability during prayers
- Qibla direction — compass bearing in event descriptions
- Du'a & Adhkar — authentic supplications from Hisn al-Muslim
- Iqama offsets — separate Iqama events for each prayer
- Hijri date — Islamic calendar date display
English, Arabic (RTL), Turkish, French, Urdu, and Indonesian
Quick access pages for major cities worldwide with optimized calculation methods:
- Makkah, Madinah, Cairo, Istanbul, Dubai, London, New York, and many more
- JSON API — RESTful endpoint for prayer times data
- Embeddable Widget — iframe/JS widget with generator tool
- Home Assistant — smart home integration guide
Visit pray.ahmedelywa.com to generate your calendar subscription link.
- Bun (recommended) or Node.js 18+
- Redis (optional, for caching)
# Clone the repository
git clone https://github.com/AhmedElywa/prayCalendar.git
cd prayCalendar
# Install dependencies
bun install
# Start development server
bun devThe app will be available at http://localhost:3300
# Optional: Redis for caching
REDIS_URL=redis://localhost:6379
# Optional: Admin dashboard access
ADMIN_KEY=your-secret-keyGET /api/prayer-times.ics
| Parameter | Type | Default | Description |
|---|---|---|---|
address |
string | — | City or address (e.g., "Cairo, Egypt") |
latitude |
number | — | Latitude (alternative to address) |
longitude |
number | — | Longitude (alternative to address) |
method |
number | 5 | Calculation method |
duration |
number | 25 | Event duration in minutes |
months |
number | 3 | Calendar length (1-11) |
alarm |
string | 5 | Alarm offsets, comma-separated |
events |
string | all | Prayer indices (0=Fajr...6=Midnight) |
lang |
string | en | Language (en/ar/tr/fr/ur/id) |
traveler |
boolean | false | Enable Qasr mode |
jumuah |
boolean | false | Enable Friday prayer |
ramadanMode |
boolean | false | Enable Ramadan events |
qibla |
boolean | false | Include Qibla direction |
dua |
boolean | false | Include Du'a/Adhkar |
busy |
boolean | false | Mark as busy status |
Example:
https://pray.ahmedelywa.com/api/prayer-times.ics?address=Cairo,Egypt&method=5&alarm=5,10
GET /api/prayer-times.json
Returns today's timings, next prayer countdown, and Hijri date.
See API Docs for complete parameter reference.
- Framework: Next.js 16 (App Router)
- Language: TypeScript 5.9
- Styling: Tailwind CSS 4
- Runtime: Bun
- Caching: Redis
- Calendar: ical-generator
- Testing: Playwright (E2E), Bun test (unit)
- Linting: Biome
bun dev # Start development server
bun build # Production build
bun start # Start production server
bun test # Run unit tests
bun test:watch # Run tests in watch mode
bun lint # Run linter
bun format # Format code
bun check:fix # Fix linting issuesContributions are welcome! Please read our Contributing Guide for details on:
- How to submit bug reports and feature requests
- Development workflow and code style
- Pull request process
This project is licensed under the ISC License - see the LICENSE file for details.
- Prayer times calculated using the AlAdhan API
- Du'a and Adhkar sourced from Hisn al-Muslim
Made with care by Ahmed Elywa