Status: ๐ง In Development
Features โข Tech Stack โข Architecture โข Progress โข Getting Started
Centi 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)
- Splash Screen (Animated)
- Login Screen (UI + Logic)
- Register Screen (UI implementation)
- State management with Riverpod
-
Core
- App Theme (Indigo + Gold palette)
- [/] Dashboard (Basic implementation)
- Presentation Layer (Auth Feature)
- Register Screen (Connecting logic)
๐ Differentiators (Why users switch)
- ๐ต๐น IRS Refund Gamification - Live progress bar for tax benefits (15% VAT)
- ๐ณ MB WAY Smart Decoder - Aliases for phone numbers (e.g. 9123... -> "Landlord")
- ๐ฝ๏ธ Meal Card Tracker - Separated balance with "Quick Lunch" button
- ๐ Savings Certificates - Auto-calculation for Series E/F interest
๐ก๏ธ Essentials (Trust & Security)
- ๐ Privacy First - Local-only database (SQLite/Isar) option
- ๐ฆ Open Banking - Connect to PT Banks (CGD, BCP, Activo) via GoCardless
- ๐ Biometric Security - FaceID / TouchID
- ๐ถ Multi-Currency - Auto-convert GBP/CHF/PLN to EUR
โ Retention (Daily Use)
- ๐ Subscription Detector - Alerts for tomorrow's Netflix/Spotify charge
- ๐ฆ Traffic Light Budgets - Visual limits (Green/Yellow/Red)
- ๐ Smart Analytics - Spending by category & evolution charts
- Database Encryption: AES-256 via Isar/Hive +
flutter_secure_storagefor keys. - SSL Pinning: Prevent Man-in-the-Middle attacks for API calls.
- Biometric Enforcement: Mandatory FaceID/TouchID via
local_auth. - Legal: In-app Privacy Policy & "Not Financial Advice" Terms.
- 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
โ โโโ theme/ # โ
App Theme & Colors
โ โโโ 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/ # โ
COMPLETE - Data Layer
โ โ โโโ models/
โ โ โ โโโ user_model.dart # User model with conversions
โ โ โโโ datasources/
โ โ โ โโโ auth_remote_datasource.dart # Firebase calls
โ โ โโโ repositories/
โ โ โโโ auth_repository_impl.dart # Repository implementation
โ โ
โ โโโ presentation/ # ๐ง IN PROGRESS - UI Layer
โ โโโ controllers/ # Riverpod Notifiers (AuthController)
โ โโโ providers/ # Dependency Injection
โ โโโ screens/ # Login, Register, Splash
โ
โโโ dashboard/ # ๐ง IN PROGRESS - Dashboard Feature
โโโ presentation/
โโโ screens/ # DashboardScreen
โ
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
Repositories & DataSources
- AuthRemoteDataSource - Implemented with Firebase Auth
- AuthRepositoryImpl - Connects Domain to Data layers
Screens
- Splash Screen: Animated with auth check โ
- Login Screen: UI, Validation, Riverpod Integration โ
- Register Screen: UI Structure created ๐ง
State Management
- AuthController (AsyncNotifierProvider) handles all logic
- Global Error Handling via SnackBars
- 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