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
A product by RedPixel Labs
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)
DI
RepositoryProvider + BlocProvider
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
android_sms_reader (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 Clean Architecture with three layers (presentation, domain, data) plus a core shared layer.
3.1 Top-Level Structure
Path
Purpose
lib/main.dart
App entry point - Firebase init, MultiRepositoryProvider, MultiBlocProvider, app router
Screens use the Dart part / part of pattern. Each screen group has a group_imports.dart barrel file containing all imports, and screen files use part of 'group_imports.dart'.
After login, the splash screen navigates to /home which renders a HomeScreen scaffold with a 4-tab BottomNavigationBar (Dashboard, Transactions, Goals, Profile) using IndexedStack to preserve tab state when switching.
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.
This project demonstrates: Clean Architecture, Flutter BLoC patterns, Firebase integration, offline-first data flow, SMS parsing, chart rendering, push notifications, and cross-device sync β all targeting a real market gap in Nepal.
Built by RedPixel Labs β’ 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.