diff --git a/BudgetApp/Components/Pages/Help.razor b/BudgetApp/Components/Pages/Help.razor
index 4dfd669..e96dad4 100644
--- a/BudgetApp/Components/Pages/Help.razor
+++ b/BudgetApp/Components/Pages/Help.razor
@@ -125,6 +125,32 @@
+ @* ── Reports ── *@
+
+
+
+
The Reports page gives you a visual breakdown of your spending and income over a chosen time period.
+
+
Filters
+
+ - Use the preset buttons (7d, 30d, 90d, 1y) or pick custom start/end dates to set the time range.
+ - Toggle individual accounts on or off to include or exclude them from the charts and summary.
+
+
+
Charts
+
+ - Expenses by Category — a doughnut chart showing how your spending is distributed across categories.
+ - Income by Category — a doughnut chart showing the sources of your income.
+ - Monthly Income vs Expenses — a bar chart comparing total income and expenses for each month in the selected range.
+
+
+
Category Summary Table
+
Below the charts is a table listing every category with its total income, total expenses and net amount. A totals row at the bottom shows the overall figures for the period.
+
+
+
@* ── Settings ── *@
diff --git a/BudgetApp/budgetapp.db-shm b/BudgetApp/budgetapp.db-shm
index 8be99ab..38f52a3 100644
Binary files a/BudgetApp/budgetapp.db-shm and b/BudgetApp/budgetapp.db-shm differ
diff --git a/BudgetApp/budgetapp.db-wal b/BudgetApp/budgetapp.db-wal
index 9053516..abb10ff 100644
Binary files a/BudgetApp/budgetapp.db-wal and b/BudgetApp/budgetapp.db-wal differ
diff --git a/README.md b/README.md
index e2eadc2..8724911 100644
--- a/README.md
+++ b/README.md
@@ -5,16 +5,25 @@
A personal finance dashboard built with Blazor Server (.NET 10).
+> **Status:** beta — see the in-app badge.
+
## 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
+- **Dashboard** — balance trend chart (Chart.js), recent & upcoming transaction lists, account filter toggles, inline balance editing, and configurable time window
+- **Reports** — doughnut charts for expenses and income by category, monthly income vs expenses bar chart, and a category summary table with filterable date range and account selection
- **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
+- **Transactions table** — sortable columns, search, pagination, per-account filtering, time-window presets, bulk selection & delete, and responsive column hiding on mobile
+- **Authentication** — ASP.NET Identity with registration, login, password change, account deletion, and 5-attempt lockout
+- **SSO providers** — optional Google, Microsoft, and GitHub sign-in (configured via `appsettings.json`)
+- **Settings** — change password, reset all data (with confirmation), delete account
+- **Toast notifications** — inline validation feedback via a toast system
+- **Help & About pages** — in-app guides, tips, and project info
+- **Responsive UI** — Bootstrap 5, mobile-friendly layout with collapsible sidebar, responsive table columns, and scoped CSS
+- **CI/CD** — GitHub Actions for build/test and Docker Hub publishing
+- **Docker** — multi-stage Dockerfile with volume-mounted SQLite, OCI image labels, and automatic security patching
## Tech Stack
@@ -22,9 +31,12 @@ A personal finance dashboard built with Blazor Server (.NET 10).
|---|---|
| Framework | .NET 10 / Blazor Server (InteractiveServer) |
| Database | SQLite via EF Core |
-| Auth | ASP.NET Core Identity |
+| Auth | ASP.NET Core Identity + optional Google / Microsoft / GitHub SSO |
| Charts | Chart.js (CDN) with JS interop |
| CSS | Bootstrap 5, scoped CSS |
+| Tests | xUnit |
+| CI/CD | GitHub Actions |
+| Container | Docker (multi-stage build) |
## Getting Started
@@ -41,6 +53,12 @@ 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 Tests
+
+```bash
+dotnet test
+```
+
### Run with Docker
```bash
@@ -62,14 +80,24 @@ The app will be available at `http://localhost:8080`.
BudgetApp/
├── Components/
│ ├── Layout/ # MainLayout, AuthLayout, NavMenu
-│ └── Pages/ # Home, Accounts, Transactions, Categories, Settings, Login, Register
+│ ├── Pages/ # Home, Accounts, Transactions, Categories,
+│ │ # Reports, Settings, Help, About, Login, Register
+│ ├── ToastContainer.razor
+│ └── ToastValidator.razor
├── Data/ # EF Core entities, DbContext, Identity user
├── Migrations/ # EF Core migrations (SQLite)
-├── Services/ # AccountService, TransactionService, CategoryService, DashboardService
+├── Services/ # AccountService, TransactionService, CategoryService,
+│ # DashboardService, ToastService, AppState
└── wwwroot/
├── app.css # Global styles
└── js/
- └── chart-interop.js # Chart.js interop (balance trend, crosshair, highlight)
+ └── chart-interop.js # Chart.js interop (line, doughnut, bar charts)
+
+BudgetApp.Tests/
+├── Helpers/ # TestDbContextFactory
+├── Models/ # AccountModelTests
+└── Services/ # AccountService, TransactionService, CategoryService,
+ # DashboardService tests
```
## Configuration
@@ -90,6 +118,29 @@ Override at runtime via environment variable:
export ConnectionStrings__DefaultConnection="Data Source=/path/to/budgeteer.db"
```
+### SSO Providers (optional)
+
+Add client credentials to `appsettings.json` (or via environment / user-secrets). Each provider is only registered when both `ClientId` and `ClientSecret` are non-empty.
+
+```json
+{
+ "Authentication": {
+ "Google": {
+ "ClientId": "",
+ "ClientSecret": ""
+ },
+ "Microsoft": {
+ "ClientId": "",
+ "ClientSecret": ""
+ },
+ "GitHub": {
+ "ClientId": "",
+ "ClientSecret": ""
+ }
+ }
+}
+```
+
## Licence
This project is provided as-is for personal use.