FinTask is a comprehensive lifestyle management application that seamlessly blends Financial Tracking with Personal Productivity. Built with Flutter and Firebase, it goes beyond simple expense logging by ensuring data integrity through ACID transactions, offering offline-first capabilities, and integrating robust task and note management tools.
- Multi-Wallet System: Create distinct wallets for different purposes (Daily, Travel, Business).
- Smart Budgeting: Set monthly limits with visual alerts for "Low Balance" or "Over Budget" states.
- ACID Transactions:
- Expenses, Transfers, and Savings operations are atomic.
- Wallet balances update strictly in sync with transaction records to prevent data discrepancies.
- Fund Transfers: Securely move money between wallets or allocate funds to savings goals.
- Rollover Logic: Optionally carry over balances (positive or negative) when creating new budget periods.
- Visual Insights:
- Spending Trends: Interactive Bar Charts for daily spending activity.
- Category Breakdown: Pie Charts to identify top spending categories.
- Global Summary: Dedicated views for Weekly and Yearly financial overviews.
- PDF Export: Generate professional expense reports with Bengali font support (
Tiro Bangla) for physical records.
- Goal Tracking: Set target amounts and deadlines for big purchases.
- Deposit & Withdraw: seamlessly allocate funds from wallets to goals and back.
- Visual Progress: Linear indicators showing percentage completion.
- Todo List:
- Task prioritization (High, Medium, Low).
- Due date tracking.
- Sort by priority, completion status, and date.
- Rich Text Notes:
- Full rich-text editor powered by
flutter_quill. - Color-coded notes for better organization.
- Grid view with content previews.
- Full rich-text editor powered by
- Offline-First Architecture:
- Implements a "Lie-fi" mitigation strategy using short timeouts (
_safeCommit). - Writes are queued locally and synced automatically when the connection restores.
- Implements a "Lie-fi" mitigation strategy using short timeouts (
- Theme Aware: Fully adaptive Light and Dark modes.
- Cross-Platform Profile: Profile image support for both Mobile (File System) and Web (Base64).
- Dark/Light Mode: Fully adaptive UI that respects system settings or user preference.
- Cross-Platform Profile: Profile picture support for both Mobile (File System) and Web (Base64).
- Secure Authentication: Email/Password login and signup via Firebase Auth.
- Offline First: Works without internet; syncs data when connection is restored.
| Wallet Dashboard | Dark Mode Analytics 1 | Dark Mode Analytics 2 |
|---|---|---|
![]() |
![]() |
![]() |
| Savings Goals | Wallet Detailed with Over Budget | Wallet Detailed with under budget |
|---|---|---|
![]() |
![]() |
![]() |
| Side Bar | Global Summary(Weekly) | Global Summary(yearly) |
|---|---|---|
![]() |
![]() |
![]() |
| PDF Export | Settings | Create wallet dialog |
|---|---|---|
![]() |
![]() |
![]() |
| Create expanse dialog | Saving goal dialog | deleting/Refund goal Dialog |
|---|---|---|
![]() |
![]() |
![]() |
| Dashboard | Todo List | Task Detailed |
|---|---|---|
![]() |
![]() |
![]() |
| My notes | Note detailed |
|---|---|
![]() |
![]() |
- Framework: Flutter (Dart)
- State Management: Flutter Riverpod (v2.5.1)
- Backend: Firebase (Auth, Firestore)
- Charts: FL Chart
- PDF Generation: Pdf & Printing
- Rich Text:
flutter_quill - Utilities:
intlfor currency and date formatting.image_pickerfor profile photos.shared_preferencesfor local settings.
The project follows a Feature-First architecture for scalability and maintainability:
lib/ ├── core/
│ └── utils/ # Helpers for Currency, PDF, CSV, Analytics
├── features/
│ ├── analytics/ # Charts and Summary screens
│ ├── auth/ # Login, Signup, Auth Repository
│ ├── expenses/ # Expense tracking logic & UI
│ ├── home/ # Dashboard & Drawer
│ ├── notes/ # Rich text notes module
│ ├── savings/ # Savings goals module
│ ├── settings/ # Profile & App settings
│ ├── todo/ # Task management module
│ └── wallet/ # Wallet logic & Transfer dialogs
└── main.dart # Entry point & App Theme config
- Dart SDK
- A Firebase Project
Clone the repository:
git clone [https://github.com/yourusername/monthly-expense-tracker.git](https://github.com/yourusername/monthly-expense-tracker.git)
cd monthly-expense-tracker
- Install dependencies:
flutter pub get
- Firebase Setup:
- Create a project in the Firebase Console.
- Enable Authentication (Email/Password).
- Enable Cloud Firestore (Create database in test mode or set appropriate rules).
- Configure your app using FlutterFire CLI:
flutterfire configure
- This will update
lib/firebase_options.dartwith your specific API keys.
- Run the app:
flutter run
- Current State: Profile images are stored locally using file paths in
SharedPreferences. Images do not sync across devices. - Improvement: Integrate Firebase Storage to upload user profile pictures. Save the download URL in the Firestore
userscollection to ensure the profile picture persists across all devices and logins.
- Idea: Allow users to mark specific expenses (e.g., Rent, Netflix, Internet) as "Recurring."
- Implementation: Implement a background service or a startup check logic that automatically adds these expenses to the current wallet when their due date passes.
- Idea: Enhance privacy by requiring biometric verification (Fingerprint or Face ID) to open the app.
- Library: Utilize the
local_authpackage to implement secure access control.
- Current State: Currency formatting is hardcoded to Bangladesh Taka (৳).
- Improvement: Add a setting in the "Preferences" screen allowing users to select their preferred currency symbol ($, €, £, ৳, ₹). Update the
CurrencyHelperto respect this global setting.
- Idea: Improve navigation within large wallets.
- Implementation: Add a search bar in the
WalletDetailScreento filter expenses by title (e.g., "Dinner"), category, or specific date ranges.
- Current State: Basic PDF export is implemented;
csv_helper.dartexists but is currently disabled. - Improvement: Enable CSV export functionality. This allows power users to export their data for detailed analysis in tools like Microsoft Excel or Google Sheets.
- Current State: All UI text is hardcoded in English.
- Improvement: Implement the
flutter_localizationspackage. Extract strings into resource files to support multiple languages (e.g., English & Bengali), making the app accessible to a wider audience.
- Current State: Logic is sometimes mixed within UI
buildmethods. - Improvement: Strictly separate Business Logic from UI. Move calculations (like
totalSpent, progress percentages, and filtering) out of widgets and into Riverpod Providers or View Models for cleaner, testable code.
- Current State: Categories (Food, Transport, etc.) are hardcoded.
- Improvement: Build a "Manage Categories" screen where users can create custom categories, assign unique colors, and select specific icons.
- Idea: Improve the first-time user experience.
- Implementation: Introduce a 3-page slider upon initial app launch explaining key features: "Create a Wallet," "Track Expenses," and "View Analytics."
- Idea: Create seamless visual transitions.
- Implementation: Use
Herowidgets when navigating from the Home Screen to theWalletDetailScreen. This will make the wallet card appear to expand naturally into the detail view header.
- Critical: Secure user data.
- Action: Implement strict Firestore rules to ensure users can only read and write documents belonging to their own
uid.allow read, write: if request.auth != null && request.auth.uid == userId;
- Current State: Rollovers are manual actions taken when creating a new wallet.
- Improvement: Deploy Firebase Cloud Functions to run scheduled jobs (CRON) that detect the end of a month, automatically calculate the balance, and potentially draft a new budget for the upcoming month.
Contributions are welcome! Please follow these steps:
- 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.
Developed by Abdullah Nazmus-Sakib CSE, Jahangirnagar University
Developed with ❤️ using Flutter.
This project is licensed under the MIT License - see the LICENSE file for details.


















