Skip to content

๐Ÿ’ฐ Advanced personal finance tracker built with Flutter, Firebase and Clean Architecture

License

Notifications You must be signed in to change notification settings

CLopes86/money-flow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’ฐ MoneyFlow

Advanced Personal Finance Tracker

Flutter Firebase Riverpod Clean Architecture

Status: ๐Ÿšง In Development

Features โ€ข Tech Stack โ€ข Architecture โ€ข Progress โ€ข Getting Started


๐ŸŽฏ About

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.

โœจ Key Highlights

  • ๐Ÿ—๏ธ 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

๐Ÿš€ Features

โœ… Completed

  • 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

๐Ÿšง In Progress

  • Data Layer (Auth Feature)
    • AuthRemoteDataSource (Firebase calls)
    • AuthRepositoryImpl (Repository implementation)
  • Presentation Layer (Auth Feature)
    • Login Screen
    • Register Screen
    • State management with Riverpod

๐Ÿ”ฎ Planned

  • 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

๐Ÿ› ๏ธ Tech Stack

Core

  • Framework: Flutter 3.x
  • Language: Dart 3.x
  • State Management: Riverpod 2.x
  • Architecture: Clean Architecture

Backend & Database

  • Authentication: Firebase Auth
  • Cloud Database: Cloud Firestore
  • Storage: Firebase Storage (planned)
  • Local Cache: Hive (planned)

Development Practices

  • Version Control: Git & GitHub
  • Code Style: Dart conventions
  • Architecture Patterns: Repository Pattern, Dependency Injection, Use Cases
  • Principles: SOLID, DRY, Clean Code

๐Ÿ—๏ธ Architecture

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

Architecture Benefits

โœ… 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

Layer Responsibilities

๐ŸŽฏ 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

๐Ÿ“Š Current Progress

Domain Layer - Auth Feature โœ… 100%

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

Data Layer - Auth Feature ๐Ÿšง 33%

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

๐Ÿ—บ๏ธ Roadmap

Phase 1 - Foundation (Week 1-2) ๐Ÿšง 75%

  • 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)

Phase 2 - Core Features (Week 3-4)

  • Complete Authentication flow with UI
  • Transaction management (CRUD)
  • Category system
  • Basic statistics

Phase 3 - Advanced Features (Week 5-6)

  • Budget tracking and alerts
  • Charts and visualizations
  • Data export (PDF, CSV)
  • Dark mode

Phase 4 - Polish & Deploy (Week 7-8)

  • Animations and UI polish
  • Testing (Unit, Widget, Integration)
  • Performance optimization
  • Deploy to Google Play / App Store

๐Ÿš€ Getting Started

Prerequisites

  • Flutter SDK (>= 3.0.0)
  • Dart SDK (>= 3.0.0)
  • Firebase project configured
  • Android Studio / VS Code
  • Git

Installation

  1. Clone the repository
git clone https://github.com/CLopes86/money-flow.git
cd money-flow
  1. Install dependencies
flutter pub get
  1. Configure Firebase

    • Create a Firebase project at Firebase Console
    • Enable Email/Password authentication
    • Create Firestore database
    • Download and add google-services.json (Android) to android/app/
    • Download and add GoogleService-Info.plist (iOS) to ios/Runner/
  2. Run the app

flutter run

๐Ÿ“š Learning Journey

This project showcases professional Flutter development practices:

Concepts Mastered โœ…

  • 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

Currently Learning ๐Ÿšง

  • Riverpod - Modern state management
  • Firebase Integration - Auth, Firestore, Storage
  • Testing - Unit tests, widget tests
  • Error Handling - Either type, custom exceptions

Next Steps ๐Ÿ”ฎ

  • Advanced UI - Animations, custom painters
  • ML Kit - OCR for receipt scanning
  • Performance - Optimization techniques
  • CI/CD - Automated testing and deployment

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ‘จโ€๐Ÿ’ป Author

Cesaltino Lopes

Cesaltino Lopes

๐ŸŽ“ 3rd Year - Informatica & Multimedia @ IPCB
๐Ÿ’ป Mobile Developer | Flutter Enthusiast
๐Ÿš’ Volunteer Firefighter since 2023
๐Ÿš€ Building professional-grade applications

GitHub LinkedIn Email

๐Ÿ“ Portugal | ๐ŸŒ Open to opportunities


๐Ÿ’ก "Building the future, one line of code at a time"

Made with ๐Ÿ’™, Flutter, and Clean Architecture

โญ Star this repo if you find it useful!


๐Ÿ“ˆ Project Stats

Commits Last Commit Code Size

About

๐Ÿ’ฐ Advanced personal finance tracker built with Flutter, Firebase and Clean Architecture

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published