You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Built with Flutter + Firebase • Supports all major Nepal banks & wallets • BS/AD dual calendar
1. Project Overview
Sajilo Khata is a Flutter mobile application that automatically tracks income and expenses by reading SMS messages from Nepali banks and digital wallets.
1.0 Screenshots
Authentication
Login
Signup
Dashboard
Main Dashboard
Monthly Summary
Transactions
Ledger
Add Transaction
Transaction Details
Savings Goals
Goals
Add Goal
Add Savings
Goal Details
Profile & Settings
Profile
SMS Auto-Track
Sync Status
Permissions
Permission Request 1
Permission Request 2
1.1 Why This App
No existing Nepali expense tracker parses bank SMS automatically
Existing apps have poor UX and lack BS date support
Real daily utility - used for NPR, designed for Nepali spending patterns
1.2 Tech Stack
Layer
Technology
UI Framework
Flutter 3.x (Dart)
State Management
BLoC pattern (flutter_bloc)
Authentication
Firebase Auth - Google + Email/Password
Database
Cloud Firestore (real-time sync)
Local Cache
Hive (offline-first)
Sync Engine
Custom SyncService (online/offline)
SMS Reading
telephony package (Android)
Charts
fl_chart
Notifications
flutter_local_notifications + FCM
Nepali Dates
nepali_calendar_kit (own package)
ID Generation
uuid
Currency API
frankfurter.dev (USD ↔ NPR)
Share
share_plus (CSV sharing)
Network
connectivity_plus (online/offline)
Permissions
permission_handler
2. Feature List
2.1 Authentication
Feature
Description
Week
Google Sign-In
One-tap login via Google account
Week 1
Email/Password
Standard email signup and login
Week 1
Profile setup
Name, currency preference (NPR default)
Week 1
Device sync
Login on any device - data loads from Firestore
Week 1
2.2 SMS Auto-Reader
Feature
Description
Week
Auto SMS read
Reads incoming bank SMS on Android (READ_SMS permission)
Week 1
Bank parsers
Regex parsers for 7+ Nepal banks and wallets
Week 1
Data extraction
Extracts amount, debit/credit, bank name, datetime
Week 1
Manual fallback
User pastes SMS text - app parses and logs (iOS + unknown)
Week 1
Unknown SMS
Unrecognized messages are silently ignored
Week 1
SMS Groups
Select which senders to track (bank filter)
Week 2
Auto-toggle
Enable/disable auto-tracking in settings
Week 2
2.3 Manual Transactions
Feature
Description
Week
Add expense/income
Quick-entry form: amount, category, note, date
Week 1
Edit transaction
Edit any field of SMS-parsed or manual transactions
Week 1
Delete transaction
Soft delete with confirmation dialog
Week 1
Auto-categorize
Keyword matching: Bhatbhateni → Food, Pathao → Transport
Week 1
2.4 Firebase Sync
Feature
Description
Week
Firestore storage
All transactions stored under users/{uid}/transactions
Week 1
Offline-first
Hive local cache - works without internet, syncs on reconnect
Week 1
Real-time updates
Stream-based - UI updates instantly on data change
Week 1
2.5 Dashboard & Reports
Feature
Description
Week
Monthly summary
Total income, expenses, and net balance for the month
Week 2
Pie chart
Spending breakdown by category (fl_chart)
Week 2
Bar chart
Daily spend over the last 30 days
Week 2
BS / AD toggle
Switch between Bikram Sambat and Gregorian dates
Week 2
Transaction list
Scrollable list - debit in red, credit in green
Week 2
Currency convert
USD ↔ NPR live exchange rate (frankfurter.dev)
Week 2
2.6 Savings Goals
Feature
Description
Week
Create goal
Name, emoji, target amount, and deadline (BS or AD)
Week 2
Manual contribute
Add savings to any goal at any time
Week 2
Auto-contribute
On credit SMS, prompt: "Add to a goal?"
Week 2
Progress bar
Visual progress with % saved and amount remaining
Week 2
Status badge
On Track / Behind / Achieved - calculated from deadline
Week 2
Daily target
"Save Rs. X/day" - remaining ÷ days left
Week 2
Multiple goals
Unlimited goals, sorted by nearest deadline
Week 2
Goal achieved alert
Push notification when 100% is reached
Week 2
2.7 Notifications & Export
Feature
Description
Week
SMS log alert
Push notification when new transaction is auto-logged
Week 2
Budget alert
Notify at 80% and 100% of monthly budget limit
Week 2
Goal alert
Celebrate when a savings goal is achieved
Week 2
CSV export
Export all/expense/income transactions as CSV
Week 2
Share
Share CSV via any app (share_plus)
Week 2
3. Project Structure
The project follows a feature-first architecture. Each feature is self-contained with its own screens, BLoC, repository, and widgets. Core utilities and models are shared across features.
3.1 Top-Level Structure
Path
Purpose
lib/main.dart
App entry point - Firebase init, BLoC providers, routing
lib/core/
Shared code: models, services, utils, constants
lib/features/
One folder per feature, self-contained
pubspec.yaml
Package dependencies
android/AndroidManifest.xml
SMS permissions (READ_SMS, RECEIVE_SMS)
3.2 Core Layer
Path
Purpose
core/models/transaction_model.dart
TransactionModel - data class + Firestore serialization
core/models/goal_model.dart
GoalModel - includes progress/status calculations
core/services/firebase_service.dart
All Firestore reads, writes, streams - single source of truth
All user data is scoped under users/{uid}/ to ensure privacy and cross-device sync. Firestore security rules should restrict read/write access to the authenticated owner only.
Important: Google Play Store requires a Privacy Policy URL and a declaration explaining why READ_SMS is needed. Prepare this before publishing. The review typically takes 3-7 business days.
8. Auto-Category System
The Categorizer utility in core/utils/categorizer.dart maps keywords in transaction notes or bank names to categories. This list should be expanded over time based on real user data.
Day 1-2: Firebase setup, Auth (Google + Email), Firestore rules
Day 3-4: TransactionModel, FirebaseService, Hive offline cache
Day 5-6: SMS parser for all 7 banks, SmsListenerService
Day 7: Manual add/edit/delete transaction screens
Week 2 - Polish
Day 8-9: Dashboard - monthly summary
Day 10: Charts - pie chart by category, bar chart daily spend
Day 11-12: Savings goals - create, contribute, progress bar
Day 13: Push notifications - transaction logged, goal achieved
Day 14: CSV export, testing, bug fixes, README
This project demonstrates: advanced Flutter patterns, Firebase integration, background services, data parsing, chart rendering, and local/remote sync - all in a single coherent product targeting a real market gap.
Built by Gambhir Poudel • gambhirpoudel.com.np
About
Sajilo Khata is a Flutter mobile application that automatically tracks income and expenses by reading SMS messages from Nepali banks and digital wallets. Users can also add transactions manually. All data is stored in Firebase Firestore and syncs across devices on login. A savings goals feature lets users set targets and track progress over time.