Privacy-First UPI Expense Tracker for India
SpentSmart is a mobile expense tracking app designed specifically for the Indian UPI ecosystem. Scan any UPI QR code, track your spending, and get insights all while keeping your data 100% local on your device.
No cloud. No SMS access. No bank linking. Just pure, private expense tracking.
Most expense apps in India require invasive permissions:
- ❌ Reading your SMS for transaction alerts
- ❌ Linking your bank accounts via Account Aggregators
- ❌ Uploading your financial data to cloud servers
SpentSmart takes a different approach:
| Feature | SpentSmart | Other Apps |
|---|---|---|
| Data Storage | 📱 100% Local | ☁️ Cloud |
| SMS Access | ❌ Not Required | ✅ Required |
| Bank Linking | ❌ Never | ✅ Often Required |
| Works Offline | ✅ Yes | ❌ Usually No |
| Open Source | ✅ Yes | ❌ Rarely |
- Biometric Lock — FaceID/Fingerprint to unlock the app
- Privacy Mode — Blur amounts with one tap
- Privacy Dashboard — See exactly what data is stored
- Zero Cloud — All data stays on your phone
- QR Scanner — Scan any UPI QR code to log payments instantly
- Manual Entry — Quick entry with contact picker integration
- Categories — Auto-categorize or customize your own
- Edit & Delete — Full control over your transaction history
- Daily/Weekly/Monthly trends
- Category breakdown with visual charts
- Budget tracking with progress bars
- Spending patterns to spot habits
- Dark/Light Mode — Automatic theme switching
- OTA Updates — Get new features without app store updates
- Crash Protection — Global error boundary for stability
- Optimized Lists — Smooth scrolling even with 1000+ transactions
| Home | History | Confirmation Modal |
|---|---|---|
![]() |
![]() |
![]() |
| Analytics | Payment + Expense Logger | Settings |
|---|---|---|
![]() |
![]() |
![]() |
| Manual Entry | Category Management | Instant QR Recieve and Logging |
|---|---|---|
![]() |
![]() |
![]() |
- Node.js >= 18
- npm or pnpm
# Clone the repository
git clone https://github.com/Ujjwaljain16/SpentSmart.git
cd SpentSmart
# Install dependencies
npm install
# Start development server
npx expo start# Configure EAS (one-time)
eas build:configure
# Build Android APK
eas build --platform android --profile preview
# Push OTA update (no build needed)
eas update --branch preview --message "Your update message"upi-tracker-react-native/
├── app/ # Screens (Expo Router file-based routing)
│ ├── (tabs)/ # Tab navigation screens
│ ├── onboarding/ # First-time user flow
│ └── *.tsx # Individual screens
├── components/ # Reusable UI components
│ ├── home/ # Home screen components
│ ├── payment/ # Payment flow components
│ └── ui/ # Generic UI elements
├── services/ # Business logic layer
│ ├── storage.ts # Transaction CRUD operations
│ ├── analytics.ts # Insights calculations
│ └── upi-app-launcher.ts # UPI intent handling
├── contexts/ # React Context providers
│ └── security-context.tsx
├── hooks/ # Custom React hooks
├── constants/ # Theme, categories, UPI config
└── types/ # TypeScript interfaces
- Separation of Concerns: Services handle data, contexts handle state, components handle UI
- Privacy by Design: No network calls for user data
- Offline First: Works without internet
- Type Safety: Full TypeScript coverage
SpentSmart requires minimal permissions:
| Permission | Purpose | When Asked |
|---|---|---|
| Camera | Scan UPI QR codes | When you open Scanner |
| Biometrics | Secure app access | When you enable App Lock |
| Contacts | Pick payees for manual entry | When you tap "Pick Contact" |
What we DON'T access: SMS, Location, Storage, Internet (for user data)
See PRIVACY.md for our complete privacy policy.
TL;DR: Your data never leaves your device. We can't see it, we don't want it, we don't collect it.
Made with ❤️ for privacy-conscious Indians
Your money. Your data. Your control.








