PrayCalendar
Free prayer times calendar subscription for Google, Apple & Outlook. Features: Ramadan mode, Qibla direction, multi-language, 45+ cities, JSON API, Home Assistant integration.
Install / Use
/learn @AhmedElywa/PrayCalendarREADME
PrayCalendar
Sync accurate prayer times to Google, Apple, or Outlook calendars
Subscribe once. Get accurate prayer times synced to your calendar — updated automatically.
Live Demo · Report Bug · Request Feature
</div>Features
Calendar Integration
- 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
Prayer Customization
- 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
Special Modes
- 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
Enrichments
- 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
Multi-Language Support
English, Arabic (RTL), Turkish, French, Urdu, and Indonesian
45+ Pre-configured Cities
Quick access pages for major cities worldwide with optimized calculation methods:
- Makkah, Madinah, Cairo, Istanbul, Dubai, London, New York, and many more
Developer Features
- JSON API — RESTful endpoint for prayer times data
- Embeddable Widget — iframe/JS widget with generator tool
- Home Assistant — smart home integration guide
Quick Start
Use Online
Visit pray.ahmedelywa.com to generate your calendar subscription link.
Self-Host
Prerequisites
- Bun (recommended) or Node.js 18+
- Redis (optional, for caching)
Installation
# Clone the repository
git clone https://github.com/AhmedElywa/prayCalendar.git
cd prayCalendar
# Install dependencies
bun install
# Start development server
bun dev
The app will be available at http://localhost:3300
Environment Variables
# Optional: Redis for caching
REDIS_URL=redis://localhost:6379
# Optional: Admin dashboard access
ADMIN_KEY=your-secret-key
API Reference
ICS Calendar Feed
GET /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
JSON API
GET /api/prayer-times.json
Returns today's timings, next prayer countdown, and Hijri date.
Full Documentation
See API Docs for complete parameter reference.
Tech Stack
- 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
Scripts
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 issues
Contributing
Contributions 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
License
This project is licensed under the ISC License - see the LICENSE file for details.
Acknowledgments
- Prayer times calculated using the AlAdhan API
- Du'a and Adhkar sourced from Hisn al-Muslim
<div align="center">
Made with care by Ahmed Elywa
</div>Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Writing Hookify Rules
109.7kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
review-duplication
100.4kUse this skill during code reviews to proactively investigate the codebase for duplicated functionality, reinvented wheels, or failure to reuse existing project best practices and shared utilities.
