Status: ๐ง In Development
Features โข Tech Stack โข Architecture โข Progress โข Getting Started
MoneyFlow is a comprehensive personal finance management application built with Flutter following Clean Architecture principles. This project demonstrates professional-grade code structure, SOLID principles, and modern Flutter development practices.
- ๐๏ธ Clean Architecture - Separation of concerns with Domain, Data, and Presentation layers
- ๐ Beautiful Visualizations - Interactive charts and graphs to understand spending patterns
- ๐ฐ Budget Management - Set and track budgets per category
- ๐ฅ Firebase Integration - Cloud sync, authentication, and real-time updates
- ๐ฑ Cross-Platform - Works on Android, iOS, and Web
- ๐ Secure - Firebase Authentication with email/password
- โ๏ธ Cloud Sync - Data synced across all devices
- ๐จ Material Design 3 - Modern and intuitive UI
- Project Setup
- Clean Architecture structure (Domain/Data/Presentation)
- Firebase integration (Auth, Firestore)
- Git workflow with professional commits
- Domain Layer (Auth Feature)
- User Entity with validation and immutability
- AuthRepository Interface (login, register, logout, getCurrentUser)
- 4 Use Cases: LoginUser, RegisterUser, LogoutUser, GetCurrentUser
- Dependency Injection pattern
- Data Layer (Auth Feature - In Progress)
- UserModel with JSON and Firebase conversion
- fromFirebase, fromJson, toJson methods
- Data Layer (Auth Feature)
- AuthRemoteDataSource (Firebase calls)
- AuthRepositoryImpl (Repository implementation)
- Presentation Layer (Auth Feature)
- Login Screen
- Register Screen
- State management with Riverpod
- Transaction management (Add, Edit, Delete)
- Category management
- Budget tracking
- Statistics dashboard with charts
- Receipt scanning with OCR
- Export to PDF
- Multi-currency support
- Recurring transactions
- Dark mode
- Biometric authentication
- Framework: Flutter 3.x
- Language: Dart 3.x
- State Management: Riverpod 2.x
- Architecture: Clean Architecture
- Authentication: Firebase Auth
- Cloud Database: Cloud Firestore
- Storage: Firebase Storage (planned)
- Local Cache: Hive (planned)
- Version Control: Git & GitHub
- Code Style: Dart conventions
- Architecture Patterns: Repository Pattern, Dependency Injection, Use Cases
- Principles: SOLID, DRY, Clean Code
This project follows Clean Architecture principles with strict separation of concerns:
lib/
โโโ core/ # Shared code
โ โโโ constants/ # App constants
โ โโโ utils/ # Utility functions
โ โโโ errors/ # Custom errors
โ
โโโ features/
โโโ auth/ # Authentication feature
โ
โโโ domain/ # โ
COMPLETE - Business Logic Layer
โ โโโ entities/
โ โ โโโ user.dart # User entity with validation
โ โโโ repositories/
โ โ โโโ auth_repository.dart # Repository interface
โ โโโ usecases/
โ โโโ login_user.dart # Login use case
โ โโโ register_user.dart # Register use case
โ โโโ logout_user.dart # Logout use case
โ โโโ get_current_user.dart # Get current user use case
โ
โโโ data/ # ๐ง IN PROGRESS - Data Layer
โ โโโ models/
โ โ โโโ user_model.dart # โ
User model with conversions
โ โโโ datasources/
โ โ โโโ auth_remote_datasource.dart # โณ Firebase calls (next)
โ โโโ repositories/
โ โโโ auth_repository_impl.dart # โณ Repository implementation (next)
โ
โโโ presentation/ # โณ TODO - UI Layer
โโโ providers/ # Riverpod providers
โโโ screens/ # Full screens
โโโ widgets/ # Reusable widgets
โ
Testability - Each layer can be tested independently
โ
Maintainability - Clear structure, easy to navigate
โ
Scalability - Easy to add new features
โ
Flexibility - Can change implementations without affecting other layers
โ
Independence - Domain layer has zero dependencies on external frameworks
๐ฏ Domain Layer (Business Logic)
- Defines what the app does
- Contains entities (business objects)
- Defines repository contracts
- Implements use cases (business rules)
- Framework-independent (pure Dart)
๐พ Data Layer (Data Management)
- Implements repository contracts
- Handles data sources (Firebase, APIs, local DB)
- Converts between models and entities
- Manages caching and synchronization
๐จ Presentation Layer (User Interface)
- Displays data to users
- Handles user interactions
- Manages UI state with Riverpod
- Calls use cases, never repositories directly
User Entity
- Immutable data class with id, email, displayName
- Constructor validation (empty checks, email format)
- copyWith method for updates
- Proper equals and hashCode
Repository Interface
- login(email, password) โ Future
- register(email, password, displayName?) โ Future
- logout() โ Future
- getCurrentUser() โ Future<User?>
Use Cases
- LoginUser - Handles user login
- RegisterUser - Handles user registration
- LogoutUser - Handles logout
- GetCurrentUser - Gets currently logged in user
- All use cases implement Dependency Injection
Concepts Applied
- Clean Architecture principles
- SOLID principles
- Repository Pattern
- Dependency Injection
- Use Case Pattern
- Future/async/await
- Immutability
UserModel โ
- Extends User entity
- fromFirebase(firebase_auth.User) - Converts Firebase user
- fromJson(Map) - Converts from JSON
- toJson() - Converts to JSON
- Factory constructors for conversions
Next Steps โณ
- AuthRemoteDataSource - Direct Firebase calls
- AuthRepositoryImpl - Connect Domain to Data
- Project setup with Clean Architecture
- Firebase configuration and integration
- Domain Layer complete (Entity, Repository, Use Cases)
- UserModel with conversions
- DataSource and Repository implementation
- Authentication screens (Login/Register)
- Complete Authentication flow with UI
- Transaction management (CRUD)
- Category system
- Basic statistics
- Budget tracking and alerts
- Charts and visualizations
- Data export (PDF, CSV)
- Dark mode
- Animations and UI polish
- Testing (Unit, Widget, Integration)
- Performance optimization
- Deploy to Google Play / App Store
- Flutter SDK (>= 3.0.0)
- Dart SDK (>= 3.0.0)
- Firebase project configured
- Android Studio / VS Code
- Git
- Clone the repository
git clone https://github.com/CLopes86/money-flow.git
cd money-flow- Install dependencies
flutter pub get-
Configure Firebase
- Create a Firebase project at Firebase Console
- Enable Email/Password authentication
- Create Firestore database
- Download and add
google-services.json(Android) toandroid/app/ - Download and add
GoogleService-Info.plist(iOS) toios/Runner/
-
Run the app
flutter runThis project showcases professional Flutter development practices:
- Clean Architecture - Three-layer separation (Domain/Data/Presentation)
- SOLID Principles - Single Responsibility, Dependency Inversion, etc.
- Repository Pattern - Abstract data sources behind interfaces
- Use Cases - Isolated business logic
- Dependency Injection - Loose coupling between layers
- Factory Constructors - Object creation patterns
- async/await - Asynchronous programming
- Future & Stream - Reactive programming concepts
- Riverpod - Modern state management
- Firebase Integration - Auth, Firestore, Storage
- Testing - Unit tests, widget tests
- Error Handling - Either type, custom exceptions
- Advanced UI - Animations, custom painters
- ML Kit - OCR for receipt scanning
- Performance - Optimization techniques
- CI/CD - Automated testing and deployment
This project is licensed under the MIT License - see the LICENSE file for details.
๐ 3rd Year - Informatica & Multimedia @ IPCB
๐ป Mobile Developer | Flutter Enthusiast
๐ Volunteer Firefighter since 2023
๐ Building professional-grade applications
๐ Portugal | ๐ Open to opportunities