Skip to content

liguori/savings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

394 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Savings

Build Frontend Build Backend

A personal finance projection and tracking application that lets you define recurring income and expenses, manage one-time transactions, and project future account balances. Supports multiple deployment modes: web application or full-stack development with .NET Aspire orchestration.

Features

  • πŸ’° Savings Projection β€” Project future account balances based on recurrent and fixed transactions
  • πŸ”„ Recurrent Items β€” Manage recurring income and expenses with parent-child relationships
  • πŸ“Œ Fixed Items β€” Track one-time transactions with category filtering
  • πŸ“œ History β€” View materialized transactions and compare actuals vs. projections
  • πŸ“Š Reports β€” Category-level spending summaries grouped by month or year
  • 🎨 Theme Support β€” Light and dark themes
  • πŸ–₯️ Multiple Deployment Options β€” Web app or development with Aspire

Getting Started

Quick Start Commands

Goal Command
Full-stack development cd src/Savings.AppHost && dotnet run
Run API only cd src/Savings.API && dotnet run
Run SPA only cd src/Savings.SPA && dotnet run
Debug API in VS Code Press F5 β†’ "C#: Savings.API Debug"
Debug SPA in VS Code Press F5 β†’ "C#: Savings.SPA Debug"

Tech Stack

Layer Technology
Frontend Blazor WebAssembly, Radzen Blazor
Backend ASP.NET Core, Entity Framework Core
Database SQLite
Orchestration .NET Aspire 9.0.0

Prerequisites

  • .NET SDK 10

1. .NET Aspire Orchestration

Recommended for full-stack development

The application includes .NET Aspire 9.0.0 orchestration providing:

  • Unified orchestration of API and SPA
  • Built-in service discovery
  • Observability with OpenTelemetry
  • Health checks and resilience
  • Dashboard for monitoring all services

Run:

cd src/Savings.AppHost
dotnet run

Services started:

  • Savings.API β€” ASP.NET Core Web API (dynamic port)
  • Savings.SPA β€” Blazor WebAssembly (dynamic port)
  • Aspire Dashboard β€” available at the URL shown in terminal output

2. VS Code Debug Configurations

Recommended for debugging individual components

Pre-configured launch configurations in .vscode/launch.json:

Configuration Description
C#: Savings.API Debug Debug backend API with .NET debugger
C#: Savings.SPA Debug Debug Blazor frontend with .NET debugger

How to use:

  1. Open Run and Debug (Ctrl+Shift+D)
  2. Select configuration from dropdown
  3. Press F5

Ports: API runs on https://localhost:7563, SPA runs on https://localhost:7026


3. Web Server Deployment

Recommended for production hosting

Build

# API
cd src/Savings.API
dotnet publish -c Release -o ./publish

# SPA
cd src/Savings.SPA
dotnet publish -c Release -o ./publish

Deploy

Component Target
API IIS, Azure App Service, Linux/Kestrel, Containers
SPA Azure Static Web Apps, any static host, or served by API

Configuration: Update appsettings.Production.json for both API and SPA with production URLs and settings.


Security

The application supports two authentication modes:

Mode Use Case
API Key Simple shared-secret authentication
Azure AD Enterprise identity with OAuth 2.0 / JWT

API Key

Add the following to both Savings.API/appsettings.json and Savings.SPA/appsettings.json:

{
  "AuthenticationToUse": "ApiKey",
  "ApiKeys": "keyToUse"
}

Azure AD

Configure two app registrations in Azure AD β€” one for the API (exposing a scope SavingProjection.All) and one for the SPA (with API permission for that scope).

API (Savings.API/appsettings.json):

{
  "AuthenticationToUse": "AzureAD",
  "IdentityProvider": {
    "Authority": "https://login.microsoftonline.com/{tenantID}/",
    "Audience": "api://{apiClientID}"
  }
}

SPA (Savings.SPA/appsettings.json):

{
  "AuthenticationToUse": "AzureAD",
  "AzureAd": {
    "Authority": "https://login.microsoftonline.com/{tenantID}/",
    "ClientId": "{spaClientID}",
    "ValidateAuthority": true,
    "DefaultScope": "api://{apiClientID}/SavingProjection.All"
  }
}

Screenshots

Savings Projection

Project your future account balances based on recurring and fixed transactions:

Light Theme Savings Projection

Dark Theme Savings Projection Dark

Recurrent Items

Recurrent Items

Additional Views

Click to see more screenshots showing configuration, fixed items, history, reports, and dark mode views

Configuration

Configuration

Configuration (Dark)

Configuration Dark

Fixed Items

Fixed Items

Fixed Items (Dark)

Fixed Items Dark

History

History

History (Dark)

History Dark

Recurrent Items (Dark)

Recurrent Items Dark

Reports

Reports

Reports (Dark)

Reports Dark

About

Project your income into the future while also taking expenses into account. Technologies: Blazor, ASP.NET Core, EF Core and Electron

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors