Astaghfirullah-App

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

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

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

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.

License

MIT — see LICENSE.