Finanza
Full-stack personal finance management application built with ASP.NET Core (.NET 8) and Angular 18, following Clean Architecture and Domain-Driven Design principles.
Overview
Finanza is a full-stack personal finance application designed to demonstrate a production-ready architecture with strong separation of concerns, maintainability and testability.
The backend applies layered Clean Architecture with DDD, domain events and multi-tenant database isolation. The frontend is an Angular 18 SPA with standalone components, reactive forms and Angular Material.
Architecture
Backend — Clean Architecture layered approach.
Domain
- Entities
- Value Objects
- Domain Services
- Domain Events
- Business rules
- No external dependencies
Application
- Application Services
- DTOs
- Repository Interfaces
- Unit of Work
- Use case orchestration
Infrastructure
- Entity Framework Core
- SQLite (multi-tenant per user)
- ASP.NET Core Identity + JWT
- Resend (transactional email)
- Repository Implementations
API Layer
- Minimal APIs
- JWT Authentication
- Dependency Injection
- Swagger / OpenAPI
- Problem Details middleware
Frontend — Angular 18 SPA.
Features
- Dashboard with charts and financial summary
- Transactions — create, edit, pay, reopen, cancel
- Categories management
- Authentication — login, register, forgot/reset password
- Account — profile, data export, account deletion
- Light / dark theme
Frontend Stack
- Angular 18 (standalone components)
- Angular Material
- Reactive Forms
- Chart.js + ng2-charts
- HTTP Interceptors (auth + error handling)
Technologies
Architectural Patterns
- Clean Architecture
- Domain-Driven Design (DDD)
- Repository Pattern
- Unit of Work
- Domain Events
- Multi-tenancy (per-user SQLite databases)
- Dependency Injection
- Separation of Concerns
Testing Strategy
The project includes multiple testing layers:
- Domain Tests — entities, value objects and business rules
- Application Tests — use case orchestration with Moq
- Infrastructure Tests — repositories and auth services against real SQLite
- API Integration Tests — full pipeline using WebApplicationFactory
Integration tests use an in-memory SQLite database and run the full API pipeline.
Database
Each user gets an isolated SQLite database (multi-tenant by user). A shared database manages tenant routing. Integration tests run with an in-memory SQLite database and automatically create the schema during test setup.