A comprehensive personal finance and budget tracking app built with Flutter for Android and iOS.
- Expense & Income Tracking: Track both expenses and income with detailed categorization
- Multiple Payment Methods: Support for Cash, Debit Cards, and Credit Cards
- Monthly Tracking: Navigate and manage transactions by month with swipe gestures
- Pie Chart Visualization: Beautiful pie charts showing expense breakdown by category
- Transaction History: Dedicated history screen filtered by the selected month
- CSV Import: Import transaction history from compatible CSV files
- CSV Export: Export transaction data to CSV files for backup and analysis
- Dark Mode: Full dark mode support
- Currency Settings: Configurable currency symbol
- Ad-Free Upgrade: One-time purchase to remove all ads
- Home, Pet, Car, Transport, Health, Food, Shopping, Entertainment
- Education, Utilities, Insurance, Taxes, Gifts, Travel
- Personal Care, Sports, Books, Technology, Clothing, Other
- Salary, Deposits, Loan, Carry Over, Investment, Freelance
- Bonus, Refund, Gift, Rental, Business, Other
- Cash
- Debit Card
- Credit Card
- Provider Pattern: State management using Provider package
- Singleton Pattern: Database, CSV, Ad, and Purchase services
- Repository Pattern: Data access through service layer
- Clean Architecture: Separation of concerns with models, services, providers, and UI
- SQLite: Local database for transaction storage
- CRUD Operations: Full Create, Read, Update, Delete functionality
- Monthly Queries: Efficient queries for monthly data aggregation
- Provider: Centralized state management
- ChangeNotifier: Reactive UI updates
- Async Operations: Proper handling of database operations
lib/
├── constants/
│ └── app_constants.dart # App constants, colors, categories
├── models/
│ └── transaction.dart # Transaction data model
├── providers/
│ ├── transaction_provider.dart # Transaction state management
│ ├── settings_provider.dart # App settings state (theme, currency)
│ └── premium_provider.dart # Premium (ad-free) state management
├── screens/
│ ├── dashboard_screen.dart # Main dashboard
│ ├── transaction_history_screen.dart # Monthly transaction history
│ └── settings_screen.dart # App settings
├── services/
│ ├── database_service.dart # SQLite operations
│ ├── csv_service.dart # CSV import/export functionality
│ ├── ad_service.dart # Google AdMob integration
│ └── purchase_service.dart # In-app purchase (Remove Ads)
├── utils/
│ └── helpers.dart # Utility functions
├── widgets/
│ ├── add_transaction_screen.dart # Add transaction form
│ ├── edit_transaction_screen.dart # Edit/delete transaction form
│ ├── transaction_list.dart # Transaction list widget
│ └── ad_banner_widget.dart # Banner ad widget
└── main.dart # App entry point
- Flutter SDK (3.8.1 or higher)
- Android Studio / VS Code
- Android device or emulator or iOS device/simulator (iOS 13.0+)
- CocoaPods (for iOS builds)
- Clone the repository:
git clone <repository-url>
cd pennywise- Install dependencies:
flutter pub get- (iOS only) Install CocoaPods dependencies:
cd ios && pod install && cd ..- Run the app:
flutter run- Tap + Expense or + Income quick-add buttons on the dashboard
- Select a category from the grid
- Enter amount and optional description
- Choose payment method and date
- Tap Save Transaction
- Dashboard: Overview with income, expenses, balance, and pie chart for the selected month
- Transaction History: Tap "View Transaction History" to see all transactions for the current month, filterable by type
- Month Navigation: Swipe left/right on the dashboard to navigate between months
- Tap the menu icon in the app bar and select Import from CSV
- Select a CSV file from your device
- All transactions will be imported and the dashboard will refresh
- Tap the menu icon in the app bar
- Choose Export Current Month or Export All Data
- CSV file will be saved to device storage (Documents on iOS, Downloads on Android)
- sqflite: Local SQLite database
- provider: State management
- fl_chart: Charts and graphs
- csv: CSV import/export functionality
- intl: Internationalization and date formatting
- flutter_slidable: Swipe-to-delete actions
- path_provider: File system access
- permission_handler: Device permissions
- file_picker: File selection for CSV import
- shared_preferences: Persistent settings storage
- google_mobile_ads: Google AdMob banner ads
- in_app_purchase: One-time "Remove Ads" purchase
See our Privacy Policy for details on data handling.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
- Free to use and modify for open-source projects (with attribution)
- Commercial or proprietary use requires a separate license
See LICENSE for the full license text and COMMERCIAL.md for commercial licensing enquiries.
Built on Pennywise — Copyright (c) 2024–2026 Hamza Awan
For support and questions, please open an issue in the repository.