A modern, feature-rich expense tracking mobile application built with Flutter
Helping you take control of your finances with beautiful design and powerful features
SpendingPal is a comprehensive personal finance management application designed to help users track their expenses, manage categories, and gain insights into their spending habits. Built with modern Flutter development practices, it showcases advanced mobile app development skills including clean architecture, state management, and real-time data synchronization.
- Add, edit, and delete expenses with ease
- Categorize expenses for better organization
- Track spending over time with detailed history
- Create custom spending categories
- Visual category management with intuitive UI
- Category-based spending analytics
- Secure user authentication with Firebase Auth
- User profile management
- Privacy and security settings
- Multi-language support (English, Spanish)
- Localized content and formatting
- Adaptive UI for different regions
- Dark/Light theme support
- Smooth animations with Lottie
- Responsive design for all screen sizes
- Intuitive navigation with Go Router
- Flutter - Cross-platform mobile development
- Dart - Primary programming language
- BLoC Pattern - State management with flutter_bloc
- Go Router - Navigation and routing
- Firebase Auth - User authentication
- Firebase Storage - File and media storage
- Drift - Local SQLite database with type safety
- Shared Preferences - Local key-value storage
- Clean Architecture - Separation of concerns with layers
- Domain-Driven Design - Business logic separation
- Repository Pattern - Data access abstraction
- Dependency Injection - Using get_it and injectable
- Code Generation - Freezed for immutable classes
- Testing - Unit tests with bloc_test and mocktail
- Linting - Flutter lints for code quality
- Asset Generation - flutter_gen for type-safe assets
| Screen | Description | Status |
|---|---|---|
| Overview | Dashboard with spending summary | Implemented |
| Authentication | Login/Register with Firebase | Implemented |
| Categories | Manage expense categories | Implemented |
| Expenses | Add and track expenses | In Development |
| Dashboard | Analytics and insights | In Development |
| Settings | App preferences and configuration | Implemented |
| Profile | User account management | Implemented |
- Flutter SDK (3.35.3)
- Dart SDK
- Android Studio / Xcode
- Firebase project setup
-
Clone the repository
git clone https://github.com/yourusername/spending_pal.git cd spending_pal -
Install dependencies
flutter pub get
-
Generate code
dart run build_runner build
-
Configure Firebase
- Add your
google-services.json(Android) - Add your
GoogleService-Info.plist(iOS) - Update Firebase configuration
- Add your
-
Run the app
# Development flutter run --flavor dev -t lib/main_dev.dart # Production flutter run --flavor prod -t lib/main_prod.dart
graph TD
UI[UI Widget] --> |Events| BLoC[BLoC]
BLoC --> |States| UI
BLoC --> |Optional| UseCase[Use Cases]
BLoC --> |Direct Access| Repository[Repository]
UseCase --> Repository
Repository --> API[API Service]
Repository --> DB[Local Database]
style UseCase stroke-dasharray: 5 5
lib/
├── main_dev.dart # Development entry point
├── main_prod.dart # Production entry point
└── src/
├── config/ # App configuration
│ ├── database/ # Database setup
│ ├── router/ # Navigation
│ └── service_locator/ # Dependency injection
├── core/ # Business logic
│ ├── auth/ # Authentication domain
│ ├── categories/ # Category management
│ └── common/ # Shared utilities
└── presentation/ # UI layer
├── common/ # Shared UI components
├── screens/ # App screens
└── core/ # UI state management
Run the test suite:
# Run all tests
flutter test
# Run with coverage
flutter test --coverage# Code generation
dart run build_runner build
# Asset generation
dart run flutter_gen_runner
# Internationalization
flutter gen-l10n- Clean Architecture - Maintainable and testable codebase
- Type Safety - Leveraging Dart's strong typing with Freezed
- State Management - Predictable state with BLoC pattern
- Performance - Optimized with proper widget lifecycle management
- Testing - Comprehensive unit and widget tests
This is a portfolio project, but suggestions and feedback are welcome!
- Fork the project
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Yohan Angulo - Mobile Developer
- 📧 [email protected]
- 🐙 GitHub
Built with ❤️ using Flutter
Showcasing modern mobile development practices and clean architecture principles