Organize accounts, budgets, and savings in one focused system.
A structured platform to manage cash flow, categorize expenditures, monitor budget thresholds, and track progress toward financial milestones — with bank and UPI messages from your phone turned into transactions automatically.
Features
Structured financial domain model
Account Registry
Register multiple accounts per user with invariant-validated deposits, rename and deposit-adjustment operations, and per-account balance calculation.
Income & Expense Ledger
Paged search and filtering across the ledger, per-account and monthly views, balance validation on expenses, and CSV export of the full transaction log.
Per-User Categories
Income and expense categories scoped to each user, unique by name, and referenced by transactions, budgets, and AI extraction.
Category Budgets
Define caps per category over a date range, with usage and remaining amounts computed from matching expense transactions.
Savings Goals
Set target amounts with deadlines, add or withdraw savings, and track remaining amount and completion percentage.
Automated Transaction Capture
Forward bank and UPI messages from your phone and have them parsed into transactions. Revocable per-device tokens, idempotent retries, an OTP content filter, and a review queue for anything uncertain.
Financial Summary
Total income, total expenses, net balance, and expenses grouped by category, surfaced on the dashboard as period-filtered charts.
Authentication
Email and password sign-up with hashed credentials, JWT-authenticated API access, and every query scoped server-side to the signed-in user.
Privacy & Theming
Light and dark themes, a privacy shutter that blurs amounts on demand, a notification centre, and snapshot comparison between periods.
System Design
Layered .NET 10 solution with an Angular 22 client
Dependencies point inward toward the domain. The domain has no external references, the application layer owns the use cases and abstractions, and infrastructure, AI, and the API sit at the edges as replaceable implementations.
User, Account, Transaction, Category, Budget, SavingsGoal, AiIngestionLog, SmsImportDevice and SmsImportReceipt, each validating its own state. No dependencies on any other project.
Repository and service interfaces plus the services that implement them, including validation, summaries, AI ingestion orchestration, and SMS device and content-filter logic.
Code-first DbContext with migrations, nine repository implementations, unique indexes for identity and import idempotency, and the CSV transaction exporter.
A typed client for any OpenAI-compatible chat-completions endpoint, with prompt construction, retry and backoff, and lenient JSON and date parsing. Changing model or provider is configuration only.
Ten controllers over DTO mapping layers, JWT bearer auth alongside a separate device-token scheme, per-token rate limiting, ProblemDetails exception handling, a health endpoint, and Swagger in development.
Server-rendered SPA with guarded feature routes, typed API services and interceptors, CSS custom-property theming, and ApexCharts dashboards.
The interactive menu the project started as, still running against the file-backed repositories. Kept as a second consumer of the same application layer.
xUnit coverage over the application and domain layers, concentrated on device tokens, message hashing, sensitive-content filtering, transactions, and categories.
Api and Console reference Application, Domain and Infrastructure. AI references Application alone. Domain references nothing, so business rules stay independent of storage and transport.
FinanceApp.Domain/ Entities and business invariants
FinanceApp.Application/ Interfaces, Models, Services
FinanceApp.Infrastructure/ Persistence (EF Core + SQLite, Migrations), Export
FinanceApp.AI/ Configuration, Prompts, Providers
FinanceApp.Api/ Controllers, Dtos, Authentication, Middleware
FinanceApp.Console/ Program, MainMenu, Data
FinanceApp.Xunit/ Unit tests
FinanceApp.Frontend/ src/app/core, src/app/features