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.

Finanza Dashboard

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

.NET 8 ASP.NET Core Entity Framework Core SQLite JWT Angular 18 Angular Material Chart.js xUnit FluentAssertions Moq WebApplicationFactory

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.