# 💰 Budgeteer [![Build and Test](https://github.com/edgeofsanity76/Budgeteer/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/edgeofsanity76/Budgeteer/actions/workflows/build-and-test.yml) [![Docker Publish](https://github.com/edgeofsanity76/Budgeteer/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/edgeofsanity76/Budgeteer/actions/workflows/docker-publish.yml) A personal finance dashboard built with Blazor Server (.NET 10). ## Features - **Multi-account support** — current accounts, savings, credit cards, each with its own currency and colour - **Transaction tracking** — income & expenses with date, category, and account assignment - **Recurring transactions** — daily, weekly, monthly, or yearly recurrence with automatic materialisation up to one year ahead - **Dashboard** — balance trend chart (Chart.js), recent & upcoming transaction lists, inline balance editing, and configurable time window - **Categories** — emoji-icon categories with sensible defaults and full CRUD - **Authentication** — ASP.NET Identity with registration, login, password change, and account deletion - **Sortable transaction table** — click column headers to reorder by date, description, or amount - **Responsive UI** — Bootstrap 5, mobile-friendly layout with collapsible sidebar ## Tech Stack | Layer | Technology | |---|---| | Framework | .NET 10 / Blazor Server (InteractiveServer) | | Database | SQLite via EF Core | | Auth | ASP.NET Core Identity | | Charts | Chart.js (CDN) with JS interop | | CSS | Bootstrap 5, scoped CSS | ## Getting Started ### Prerequisites - [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) ### Run Locally ```bash cd BudgetApp dotnet run ``` The app will be available at `https://localhost:5001` (or the port shown in the console). A `budgetapp.db` SQLite file is created automatically on first run. ### Run with Docker ```bash # Build docker build -t budgeteer . # Run (persists database in a named volume) docker run -d -p 8080:8080 -v budgeteer-data:/app/data --name budgeteer budgeteer ``` The app will be available at `http://localhost:8080`. ## Project Structure ``` BudgetApp/ ├── Components/ │ ├── Layout/ # MainLayout, AuthLayout, NavMenu │ └── Pages/ # Home, Accounts, Transactions, Categories, Settings, Login, Register ├── Data/ # EF Core entities, DbContext, Identity user ├── Migrations/ # EF Core migrations (SQLite) ├── Services/ # AccountService, TransactionService, CategoryService, DashboardService └── wwwroot/ ├── app.css # Global styles └── js/ └── chart-interop.js # Chart.js interop (balance trend, crosshair, highlight) ``` ## Configuration Default connection string in `appsettings.json`: ```json { "ConnectionStrings": { "DefaultConnection": "Data Source=budgetapp.db" } } ``` Override at runtime via environment variable: ```bash export ConnectionStrings__DefaultConnection="Data Source=/path/to/budgeteer.db" ``` ## Licence This project is provided as-is for personal use.