"Every rupee should tell a story."
UPI Vault is a next-generation, local-first personal finance app built for Indian UPI users. Unlike traditional fintech applications that monetise your transaction history by selling loans or credit cards, UPI Vault operates completely offline and on-device.
It automatically transforms raw UPI SMS alerts and bank notifications into a searchable Life Timeline, surfacing rich spending stories, subscription trackers, duplicate payment flags, and real-time financial intelligence.
- Contextual Financial Memory: Groups spending into meaningful life events (e.g., "Weekend Getaway to Goa", "Monthly Swiggy Binge", "Medical Expenses").
- Rich Narratives: Automatic categorization across food, shopping, travel, utilities, and peer-to-peer transfers.
- 100% On-Device Engine: All parsing, classification, and analytics run locally. Zero data leaves your device.
- Biometric Security: Protect sensitive bank balances and transaction histories with Biometric Prompt (Fingerprint / Face Unlock).
- DPDP Act Compliant: Zero telemetry, zero external servers, and a one-tap "Wipe Everything" privacy dashboard.
- Multi-Bank SMS & Notification Parser: Supports HDFC, SBI, ICICI, Axis, Paytm, PhonePe, Google Pay, and major Indian banks.
- On-Device Marketing / Spam Classifier: Automatically filters promotional bank SMS, OTPs, and spam from financial ledgers.
- Historical SMS Scanner: Seamlessly backfills past financial transactions from your inbox upon first launch.
- Ask your finances plain-English questions:
- "How much did I spend on Zomato last month?"
- "Transactions over ₹5,000 in Goa"
- "Show my Amazon orders from December"
- Recurring Payment Detection: Automatically spots hidden subscriptions (Netflix, Spotify, Prime, Gym, OTT).
- Duplicate Payment Flagging: Real-time warnings when a UPI transaction appears to be double-debited.
UPI Vault is built using modern Android development practices adhering to Clean Architecture and MVVM pattern:
┌────────────────────────────────────────┐
│ Jetpack Compose (UI) │
└───────────────────┬────────────────────┘
│ (StateFlow / Events)
┌───────────────────▼────────────────────┐
│ MainViewModel (State) │
└───────────────────┬────────────────────┘
│
┌───────────────────▼────────────────────┘
│ TransactionRepository (Domain) │
└─────────┬──────────────────────┬───────┘
│ │
┌──────────────▼──────┐ ┌──────▼────────────────┐
│ LocalVaultStorage │ │ SmsParserEngine │
│ (Encrypted Storage) │ │ (On-Device Classifier)│
└─────────────────────┘ └───────────────────────┘
| Layer | Technology |
|---|---|
| Language | Kotlin 2.0+ |
| UI Framework | Jetpack Compose (Material 3) |
| Design System | Custom Glassmorphism Theme & Custom Dark Mode |
| Architecture | MVVM + Clean Architecture + Repository Pattern |
| State Management | Kotlin StateFlow & Coroutines |
| Security | AndroidX Biometric API & Encrypted Storage |
| Parsing Engine | RegEx + Heuristic Classifier + Historical SMS Scanner |
UPI Vault/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/upivault/app/
│ │ │ │ ├── data/
│ │ │ │ │ ├── mock/ # Synthetic data generators for testing
│ │ │ │ │ ├── model/ # Transaction, Category & Story data models
│ │ │ │ │ ├── parser/ # SMS & Notification Parsing Services
│ │ │ │ │ ├── repository/ # Unified Transaction & Analytics Repo
│ │ │ │ │ └── storage/ # Local Vault encrypted storage
│ │ │ │ ├── ui/
│ │ │ │ │ ├── components/ # Reusable Compose UI widgets
│ │ │ │ │ ├── screens/ # Main application screens
│ │ │ │ │ ├── security/ # Biometric authentication helper
│ │ │ │ │ ├── theme/ # Color tokens, Typography, Glassmorphism
│ │ │ │ │ └── viewmodel/ # Main Application ViewModel
│ │ │ │ └── MainActivity.kt # Application Entry Point
│ │ │ └── AndroidManifest.xml
│ │ └── test/ # Unit tests for Parsers & Repositories
│ └── build.gradle.kts
├── Kahani-Build-Plan.md # Comprehensive product design plan
├── README.md # Project documentation
└── build.gradle.kts
| Feature | UPI Vault 🛡️ | Typical Finance Apps 💳 |
|---|---|---|
| On-Device Data Processing | ✅ 100% Local | ❌ Sent to Cloud |
| Requires Phone Number / Login | ❌ No Login Needed | ✅ Mandatory |
| Cross-Sells Credit Cards / Loans | ❌ Never | ✅ Primary Revenue |
| Biometric Vault Protection | ✅ Included | ❌ Rare |
| Timeline & Life Stories | ✅ Yes | ❌ Statements Only |
| Works Offline | ✅ Fully Offline | ❌ Internet Required |
- Android Studio Ladybug (2024.2.1+) or newer.
- JDK: Java 17+.
- Android SDK: Min SDK 26 (Android 8.0+), Target SDK 34.
-
Clone the repository:
git clone https://github.com/Pratikdate/UPI-Vault.git cd "UPI Vault"
-
Open in Android Studio:
- Select
File -> Openand pick theUPI Vaultdirectory. - Allow Gradle to sync dependencies.
- Select
-
Run Unit Tests:
./gradlew test -
Launch on Emulator / Device:
- Press
Run (Shift + F10)in Android Studio.
- Press
The repository includes unit tests for SMS parsing, transaction classification, and repository logic:
SmsParserEngineTest.kt: Tests multi-bank SMS regex matching and amount extraction.TransactionRepositoryTest.kt: Verifies subscription detection, duplicate flagging, and metric aggregations.
Run tests via command line:
./gradlew testDebugUnitTestContributions are welcome! If you'd like to improve bank SMS parsers, add new Compose components, or enhance categorisation models:
- Fork the Project.
- Create your Feature Branch (
git checkout -b feature/AmazingFeature). - Commit your Changes (
git commit -m 'Add some AmazingFeature'). - Push to the Branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
Distributed under the MIT License. See LICENSE for details.
Crafted with ❤️ for India 🇮🇳
