Skip to content

Repository files navigation

Astaghfirullah Reminder

A single-purpose Android app that gently reminds you to seek forgiveness (استغفار) with a small heads-up notification every 30 minutes.

أستغفر الله — I seek forgiveness from Allah.

Project Purpose

Reminders can be easy to ignore. This app does exactly one thing: it sends a small pop-up notification saying Astaghfirullah — أستغفر الله every 30 minutes, and nothing else. No counters, no goals, no history, no navigation. You open it, tap Start, and quietly remember Allah throughout your day.

Features

  • 30-minute reminders — a heads-up notification with Astaghfirullah / أستغفر الله (high-importance channel, respects Do Not Disturb).
  • Start / Stop toggle — one big button. A pulsing gold ring indicates reminders are active.
  • Next reminder time — the status card shows the scheduled time (e.g. 11:30 PM), so you know it's working.
  • Test Notification — preview the popup immediately instead of waiting 30 minutes.
  • Persistent state — reminders stay on after you close the app or restart your phone (WorkManager + DataStore).
  • Battery help — an expandable note explaining what to do if a manufacturer's battery optimization delays reminders.
  • Light / dark theme — follows the system, using the app's emerald-and-gold Material 3 palette.
  • Accessible — every interactive element has a content description for TalkBack.

Architecture Overview

Single-activity Jetpack Compose app with a clean separation between UI, reminders, and data.

MainActivity ──► ui/MainScreen (Compose UI)
        │            │
        ▼            ▼
MainViewModel ◄── data/Prefs (DataStore: running state, next reminder time)
        │
        ▼
reminders/ReminderScheduler ──► WorkManager (PeriodicWorkRequest, 30 min)
        │
        ▼
reminders/ReminderWorker ──► reminders/NotificationHelper (heads-up notification)
        │
        ▼
receiver/BootReceiver  ──► reschedules after device reboot
  • WorkManager schedules the periodic work. It is battery-friendly and does not bypass Do Not Disturb. It is intentionally not an exact alarm — a reminder arriving at 30–35 minutes is acceptable and keeps the app Play-Store friendly.
  • DataStore Preferences persists the ON/OFF state and the next-reminder display target, so reopening the app shows the real status instead of resetting.
  • The Worker updates the next-reminder time after each successful run, so the UI never drifts from what Android actually scheduled.

Folder Structure

Astaghfirullah/
├── README.md
├── LICENSE
├── PRIVACY_POLICY.md
├── settings.gradle.kts
├── build.gradle.kts
├── gradle.properties
├── gradlew / gradlew.bat
└── gradle/wrapper/
└── app/
    ├── build.gradle.kts
    ├── proguard-rules.pro
    └── src/main/
        ├── AndroidManifest.xml
        ├── java/com/astaghfirullah/reminder/
        │   ├── MainActivity.kt            # Activity + permission flow
        │   ├── AppConfig.kt               # single source of truth for config/constants
        │   ├── ui/
        │   │   ├── MainScreen.kt          # the single screen
        │   │   ├── components/            # reusable UI pieces
        │   │   └── theme/                 # Material 3 colors/typography/theme
        │   ├── viewmodel/
        │   │   └── MainViewModel.kt       # state + scheduler wiring
        │   ├── reminders/
        │   │   ├── ReminderInterval.kt    # configurable interval enum
        │   │   ├── ReminderScheduler.kt   # schedule/cancel periodic work
        │   │   ├── ReminderWorker.kt      # triggers the reminder
        │   │   └── NotificationHelper.kt  # channel + notification builder
        │   ├── data/
        │   │   └── Prefs.kt               # DataStore persistence
        │   └── receiver/
        │       └── BootReceiver.kt        # reschedule after reboot
        └── res/                           # fonts, icons, adaptive launcher icon

Build Requirements

  • Android Studio (Ladybug or newer) with the Android SDK
  • JDK 17 (bundled with Android Studio — JBR — is fine)
  • SDK: compileSdk 36, minSdk 26, targetSdk 36
  • Gradle 8.11.1 (via the included wrapper)
  • Android Gradle Plugin 8.9.1, Kotlin 2.0.21

No Android Studio on the machine? Install it from https://developer.android.com/studio.

How to Run

  1. Open Android Studio → Open → select the Astaghfirullah folder.
  2. Let Gradle sync finish (it downloads dependencies on first run).
  3. Connect your phone with USB debugging enabled (or start an emulator).
  4. Press Run ▶ (Shift+F10) and pick your device.
  5. Tap Start Reminders and grant the notification permission when prompted.
  6. Tap Test Notification to confirm the popup appears.

Building a release APK

./gradlew assembleRelease

The APK is written to app/build/outputs/apk/release/app-release.apk. Release builds are minified (R8) with resource shrinking. Sign it with your own keystore before publishing.

Roadmap

v1.0 (current) — 30-minute reminder, start/stop, test notification, light/dark theme, persisted state.

  • v1.1 — Choose interval (15, 30, 60, 90, 120 minutes).
  • v1.2 — Multiple remembrance phrases (Astaghfirullah, SubhanAllah, Alhamdulillah, Allahu Akbar, La ilaha illa Allah).
  • v1.3 — Quiet hours (e.g. no reminders between 11 PM and 6 AM).
  • v1.4 — Optional tasbeeh counter.
  • v2.0 — Widgets, Wear OS, custom schedules, backup/sync, dynamic (Material You) colors.

License

MIT — see LICENSE.

About

Android app that gently reminds you to seek forgiveness (استغفار) with a heads-up notification every 30 minutes. Single-purpose, no counters or goals: tap Start and it quietly sends "Astaghfirullah" popups all day. Built with Jetpack Compose, WorkManager, and DataStore, with light/dark Material 3 theme and battery-friendly scheduling.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages