Skip to content

ummeco/praycalc

PrayCalc

Accurate prayer times for Muslims, every device, every method, free forever.

License: MIT Build Version

Live: praycalc.com | Docs: praycalc.org

P7 status (2026-05): Stripe TEST mode only. Payment-gated features (Ummat+ premium) use Stripe TEST keys. No live charges. See Changelog for P7 updates.

Engineering Charter — Required Reading

Before contributing, read .github/wiki/ENGINEERING-CHARTER.md. It is the single source of truth for code standards across every Ummeco repo. The most-read sections:

What is this

PrayCalc is a free, GPS-accurate Islamic prayer time calculator for web and mobile. It supports all major calculation methods (ISNA, MWL, Egypt, Umm al-Qura, Tehran, Karachi), Qibla direction, adhan reminders, and offline mode. It also powers prayer times across the Ummat app ecosystem.

Features

  • All major calculation methods (ISNA, MWL, Egypt, Umm al-Qura, Tehran, Karachi)
  • GPS-based location with city search
  • Qibla compass direction
  • Adhan audio notifications with multiple reciters
  • Monthly/yearly prayer calendars with PDF export
  • PWA with full offline support (service worker + IndexedDB caching)
  • 8 languages (EN, AR, TR, UR, ID, FR, BN, SO) with RTL
  • Countdown to next prayer
  • Dark mode (WCAG 2.2 AA, system-preference-aware)
  • Accessible (WCAG 2.2 AA — axe audited, Playwright viewport matrix)
  • Ummat+ premium features: smart home display, TV widget, home screen widgets

Tech Stack

Layer Tech
Web Next.js 15, TypeScript, Tailwind CSS
Mobile Flutter (iOS + Android + macOS + Windows + Linux + TV + Watch + Smart Display)
Backend platform nSelf (100% — self-hosted PaaS on Hetzner)
API Hasura GraphQL Engine (all data access via GraphQL, no direct SQL)
Auth Hasura Auth — shared SSO at auth.ummat.dev
Docs site Next.js + MDX
i18n next-intl (8 locales)
PWA Serwist (service worker, offline caching)
Testing Vitest (unit), Playwright (E2E, 3-viewport matrix)
Deploy Vercel (projects: ummat-praycalc, ummat-praycalc-org)

Project Structure

praycalc/
├── web/        praycalc.com — Next.js web app
├── org/        praycalc.org — documentation site
└── flutter/    iOS + Android + macOS + Windows + Linux + TV + Watch + Smart Display

Quick Start

Start the shared Ummat backend first:

cd ~/Sites/ummeco/ummat/backend && nself start

Web app:

cd web
cp .env.example .env.local   # fill in local Hasura + auth URLs
pnpm install
pnpm dev        # https://www.praycalc.local.nself.org:8543

Docs site:

cd org
pnpm install
pnpm dev        # http://localhost:3003

Flutter app:

cd flutter
flutter pub get
flutter run

Backend

All data access goes through Hasura GraphQL. Never use direct SQL or install pg / drizzle-orm at runtime. See .github/docs/settings-architecture.md for the GraphQL client pattern and env var reference.

Local API: https://api.praycalc.local.nself.org:8543/v1/graphql (port 8543) Production API: https://api.praycalc.com/v1/graphql

Documentation

Contribute

See .github/wiki/Contributing.md for architecture docs, contribution guidelines, and feature status.

License

MIT