Native privacy-first Android expense tracker that intercepts bank SMS alerts offline to classify transactions and curb impulse spending.
Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½ Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½ Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½
Γ’ββ Incoming Bank Γ’ββ Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΒΊ Γ’ββ Android Broadcast Γ’ββ Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΒΊ Γ’ββ Local Deterministic Γ’ββ
Γ’ββ SMS Notification Γ’ββ Γ’ββ Receiver (Zero Cloud) Γ’ββ Γ’ββ Regex Parsing Engine Γ’ββ
Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’β¬Òββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ
Γ’ββ
Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½ Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½ Γ’βΒΌ
Γ’ββ Jetpack Compose Γ’ββ Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬ Γ’ββ Room SQLite Database Γ’ββ Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬ Γ’βΕΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βοΏ½
Γ’ββ Glassmorphic UI Γ’ββ Γ’ββ & Budget Table Entity Γ’ββ Γ’ββ High-Value Reflection Γ’ββ
Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ Γ’ββ Behavioral Friction UIΓ’ββ
Γ’ββΓ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’ββ¬Γ’βΛ
Existing personal budget apps rely on delayed cloud bank syncing and passive tracking, failing to intervene at the critical moment of purchase. Intent Pay operates 100% offline, intercepting bank SMS transaction alerts in real time through native Android broadcast receivers and introducing deliberate reflection friction overlays on high-value purchases.
- 100% Offline Privacy Γ’β¬β Stores and processes all financial transaction data on device without cloud telemetry or external network calls.
- Zero-Latency SMS Interception Γ’β¬β Listens for incoming banking SMS notifications instantly using native Android
BroadcastReceivers(SmsReceiver.kt). - Deterministic Expense Classifier Γ’β¬β Extracts transaction amounts, merchant names, and categories with local regex rules (
KeywordRuleMatcher.kt). - Behavioral Reflection Overlay Γ’β¬β Displays an immediate friction modal (
ReflectionActivity.kt) on high-value purchases to prevent impulse spending. - Glassmorphic Compose UI Γ’β¬β Features custom glass cards (
GlassCard.kt), mesh backgrounds (MeshBackground.kt), and dynamic spending rings. - Google Sheets & CSV Export Γ’β¬β Supports periodic background synchronization and manual spreadsheet export via Android WorkManager.
graph TD
A[Incoming Bank SMS Alert] --> B[SmsReceiver: BroadcastReceiver]
B --> C[SmsParser: Regex Engine]
C --> D{High-Value Transaction?}
D -->|Yes| E[ReflectionActivity: Intent Friction Dialog]
D -->|No| F[Direct Transaction Insertion]
E -->|User Confirms / Reflects| F
F --> G[(Room SQLite Database)]
G --> H[Jetpack Compose Dashboard & Spending Rings]
Intent Pay requires the following explicit permissions for offline transaction detection:
| Permission | Purpose |
|---|---|
android.permission.RECEIVE_SMS |
Intercept incoming bank transaction SMS messages in real time |
android.permission.READ_SMS |
Historical transaction import during initial onboarding |
android.permission.POST_NOTIFICATIONS |
Send budget alerts and high-value reflection prompts |
android.permission.BIND_ACCESSIBILITY_SERVICE |
Optional UPI payment screen detection |
| Requirement | Version | Notes |
|---|---|---|
| Android Studio | Flamingo (2022.2.1)+ | Official Android IDE |
| JDK | 17+ | Java Development Kit |
| Android SDK | API 24+ (Android 7.0+) | Minimum SDK target |
-
Clone the repository:
git clone https://github.com/Justinvcj/Intent_Pay.git cd Intent_Pay -
Open the project in Android Studio.
-
Build debug APK using Gradle:
./gradlew assembleDebug
-
Install on a connected physical Android device or emulator with SMS capabilities.
| Layer | Technology |
|---|---|
| Language | Kotlin |
| UI Framework | Jetpack Compose, Material Design 3, Glassmorphic Design System |
| Local Storage | Android Room Database, SQLite, Android DataStore |
| Background Processing | Android WorkManager, Kotlin Coroutines, StateFlow |
| Build System | Gradle Kotlin DSL (build.gradle.kts) |
Contributions are welcome. Please open an issue first to discuss what you would like to change.
- Fork the Project
- Create your Feature Branch (
git checkout -b feat/IntentFeature) - Commit your Changes (
git commit -m 'feat: add intent feature') - Push to the Branch (
git push origin feat/IntentFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for details.