Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Munib (مُنيب) Tracker

Track Your Journey Back to Allah.

CI codecov Commitizen friendly License: PolyForm Noncommercial 1.0.0

Source-available for personal and educational use. See CONTRIBUTING.md (includes Conventional Commits / pnpm commit) · docs/OPEN_SOURCE.md.

Monorepo structure

This is a pnpm + Turborepo monorepo:

App / package Path Purpose
Product app apps/app Expo SDK 57 — iOS, Android, Web, Apple TV / Android TV (single codebase)
Marketing site apps/marketing-web Next.js 16 landing site (port 3000)
API server apps/api NestJS 11 — auth + cloud sync (port 3001)
Admin console apps/admin Next.js ops console (port 3002) — users, reports, broadcasts
@munib-tracker/shared packages/shared Domain types, constants, validators, content, achievements
@munib-tracker/db packages/db Drizzle schema mirror for admin (DDL owned by API TypeORM migrations)
@munib-tracker/live-activity-delivery packages/live-activity-delivery ActivityKit APNs client + atomic job claim/deliver
@munib-tracker/surface-push-delivery packages/surface-push-delivery Expo + Web Push senders + surface job claim/deliver
@munib-tracker/store-screenshots packages/store-screenshots Shared App Store / Play screenshot specs
@munib-tracker/theme packages/theme Design tokens, accent palette, resolveTheme()
@munib-tracker/api-contract packages/api-contract OpenAPI spec exported from the API
@munib-tracker/api-client packages/api-client Orval-generated fetch + TanStack Query SDK
@munib-tracker/typescript-config packages/typescript-config Shared TS configs
@munib-tracker/vitest-config packages/vitest-config Vitest presets

Note: apps/marketing-web (port 3000), apps/api (port 3001), apps/admin (port 3002), and apps/app web (Expo, ~8081) are different apps. Screenshot framing lives in tools/screenshot-studio/ (not a workspace package; port 3010).

Prerequisites

  • Node.js ≥ 20.9 (CI uses Node 22)
  • pnpm 9.15 (corepack enable)
  • For native dev: Xcode (iOS) and/or Android Studio (Android)

Getting started

pnpm install          # always from repo root
pnpm dev              # all dev servers (turbo)
pnpm dev:app          # Expo product app
pnpm dev:marketing-web # Next.js marketing site (:3000)

Product app (apps/app)

Universal Expo app for salah, zikr, qaza, and Islamic content — offline-first and cross-platform.

Command Description
pnpm --filter app dev Expo dev server — pick platform in CLI
pnpm --filter app ios Build + launch iOS simulator (dev build)
pnpm --filter app android Build + launch Android emulator (dev build)
pnpm --filter app web Product app in browser (~8081)
pnpm --filter app build:data Regenerate bundled content (adhkar, duas, names, Qur'an, hadith highlights)

Platform:

  • Expo SDK 57 with React Compiler, typed routes, expo-dev-client
  • Offline-first persistence on AsyncStorage (src/db/ repositories + a zero-dep useSyncExternalStore store), no SQLite
  • Centralized ThemeProvider — light/dark/system + preset & custom-hex accents (persisted)
  • Full i18n (23 locales: English + 22 translations; RTL for Arabic, Urdu, Persian, Pashto, Kurdish); motion + a11y (WCAG AA contrast, ≥44pt targets) design system

Worship & tracking:

  • Prayer tracker (5 fard + Witr + sunnah) with statuses, notes, streaks
  • Qaza suite — counters, lifetime calculator, daily planner, and fasting tracking
  • Zikr / Adhkar library + favorites, tasbeeh counter (library-driven, free, and custom)
  • Activity calendar (Gregorian + Hijri), day detail, statistics, achievements ("Noor" devotion levels)

Content library (offline, sourced from open datasets):

  • Qur'an reader (translations, transliteration, audio, bookmarks, search)
  • Hadith collections, full Hisnul Muslim duas, duroods, and the 99 Names
  • Universal fuzzy search (Fuse.js) across every content source

Times, location & platform:

  • On-device prayer times (adhan) + live location, Hijri date, sky/moon hero, weather effects
  • Qibla compass, opt-in local notifications/reminders, guest-first auth with optional cloud sync

Marketing site (apps/marketing-web)

Next.js 16 marketing landing page with Tailwind CSS v4.3.

Command Description
pnpm --filter marketing-web dev Dev server on port 3000
pnpm --filter marketing-web build Production build

Features:

  • cacheComponents: true, Metadata API, sitemap.ts, robots.ts
  • Server Components by default; Tailwind v4 @source scans monorepo packages

API server (apps/api)

NestJS 11 backend for authentication and cloud sync (port 3001, base path /api/v1).

Command Description
pnpm --filter api dev Dev server on port 3001 (Swagger UI at /docs)
pnpm --filter api test Unit tests · test:e2e for end-to-end
pnpm generate:api Export OpenAPI → regenerate the typed @munib-tracker/api-client

Features:

  • TypeORM persistence — PostgreSQL in prod, in-memory SQLite for tests; migrations under src/database/migrations/
  • Guest sessions + OAuth (Google/Apple/Facebook), signed JWT access tokens with refresh-token rotation
  • Cloud sync (/sync/pull, /sync/push) — last-write-wins, guest-blocked

Shared packages

Import workspace packages by name:

import { APP_NAME, TRACKER_CATEGORIES } from "@munib-tracker/shared/constants";
import { resolveTheme } from "@munib-tracker/theme/resolve";

Tooling

Tool Usage
Biome Lint + format (pnpm lint, pnpm format-and-lint:fix)
Turborepo Task orchestration (pnpm turbo run build lint check-types test)
Husky pre-commit: Biome autofix staged files; commit-msg: commitlint (Conventional Commits); pre-push: pnpm check:ci
Commitizen Interactive conventional commits via pnpm commit
Vitest marketing-web, api, and package tests
Jest apps/app unit + feature tests

Testing

pnpm test                              # all tests via turbo
pnpm --filter marketing-web test       # Vitest
pnpm --filter api test                 # Vitest (unit) · test:e2e for e2e
pnpm --filter app test                 # Jest + Testing Library RN

Unit + feature tests only — no Playwright or Maestro E2E in CI. Maestro drives store screenshot capture (pnpm screenshots:*; see docs/STORE_ASSETS.md).

AI agent context

Official skills installed: vercel/turborepo, expo/skills, vercel/next.js, plus .agents/skills/{nestjs,fuse-js}.

Contributing

No sponsorship, funding, or donations are accepted at this time. Do not send money to anyone claiming to collect funds on behalf of Munib Tracker. There is no GitHub Sponsors button or official payment link.

Contributors

Mubbasher Ahmed Qureshi
Mubbasher Ahmed Qureshi

💻 🎨 📖 🚧

This project follows the all-contributors specification. Contributions of any kind welcome — see CONTRIBUTING.md.

Share with the community

Please consider sharing a post about Munib Tracker and the value it provides. It really does help!

Tweet Share on Reddit Share on LinkedIn Share on Facebook Discuss on Hacker News Share on Dev.to


GitHub stars GitHub forks

License

This project is licensed under the PolyForm Noncommercial License 1.0.0.

You may: use, study, modify, and redistribute the software for personal, educational, religious, charitable, and other non-commercial purposes.

You may not: sell this software, sell customized versions of it, or use it for a commercial purpose without a separate license from the copyright holder.

Attribution required: keep LICENSE and NOTICE, and credit Munib Tracker with a link to https://munibtracker.app.

Required Notice: Copyright (c) 2026 Mubbasher Ahmed Qureshi — Munib Tracker (https://munibtracker.app)

Third-party Islamic datasets and libraries remain under their own licenses — see docs/FREE_OPEN_SOURCE_DATA.md and Credits.

License: PolyForm Noncommercial 1.0.0

Releases

Packages

Used by

Contributors

Languages