Update README and help pages
This commit is contained in:
1 parent
79cd667f7e
commit
38067df8c3
4 files changed
+86
-8
No files matched your search
@@ -125,6 +125,32 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@* ── Reports ── *@
|
||||||
|
<div class="card mb-4" id="reports">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">📈 Reports</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<p>The <a href="/reports">Reports</a> page gives you a visual breakdown of your spending and income over a chosen time period.</p>
|
||||||
|
|
||||||
|
<h6>Filters</h6>
|
||||||
|
<ul>
|
||||||
|
<li>Use the preset buttons (<strong>7d</strong>, <strong>30d</strong>, <strong>90d</strong>, <strong>1y</strong>) or pick custom start/end dates to set the time range.</li>
|
||||||
|
<li>Toggle individual accounts on or off to include or exclude them from the charts and summary.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h6>Charts</h6>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Expenses by Category</strong> — a doughnut chart showing how your spending is distributed across categories.</li>
|
||||||
|
<li><strong>Income by Category</strong> — a doughnut chart showing the sources of your income.</li>
|
||||||
|
<li><strong>Monthly Income vs Expenses</strong> — a bar chart comparing total income and expenses for each month in the selected range.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h6>Category Summary Table</h6>
|
||||||
|
<p class="mb-0">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.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
@* ── Settings ── *@
|
@* ── Settings ── *@
|
||||||
<div class="card mb-4" id="settings">
|
<div class="card mb-4" id="settings">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
@@ -168,6 +194,7 @@
|
|||||||
<a href="/help#accounts" class="list-group-item list-group-item-action">🏦 Accounts</a>
|
<a href="/help#accounts" class="list-group-item list-group-item-action">🏦 Accounts</a>
|
||||||
<a href="/help#transactions" class="list-group-item list-group-item-action">💸 Transactions</a>
|
<a href="/help#transactions" class="list-group-item list-group-item-action">💸 Transactions</a>
|
||||||
<a href="/help#categories" class="list-group-item list-group-item-action">🏷️ Categories</a>
|
<a href="/help#categories" class="list-group-item list-group-item-action">🏷️ Categories</a>
|
||||||
|
<a href="/help#reports" class="list-group-item list-group-item-action">📈 Reports</a>
|
||||||
<a href="/help#settings" class="list-group-item list-group-item-action">⚙️ Settings</a>
|
<a href="/help#settings" class="list-group-item list-group-item-action">⚙️ Settings</a>
|
||||||
<a href="/help#tips" class="list-group-item list-group-item-action">💡 Tips</a>
|
<a href="/help#tips" class="list-group-item list-group-item-action">💡 Tips</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -5,16 +5,25 @@
|
|||||||
|
|
||||||
A personal finance dashboard built with Blazor Server (.NET 10).
|
A personal finance dashboard built with Blazor Server (.NET 10).
|
||||||
|
|
||||||
|
> **Status:** beta — see the in-app badge.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Multi-account support** — current accounts, savings, credit cards, each with its own currency and colour
|
- **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
|
- **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
|
- **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
|
- **Categories** — emoji-icon categories with sensible defaults and full CRUD
|
||||||
- **Authentication** — ASP.NET Identity with registration, login, password change, and account deletion
|
- **Transactions table** — sortable columns, search, pagination, per-account filtering, time-window presets, bulk selection & delete, and responsive column hiding on mobile
|
||||||
- **Sortable transaction table** — click column headers to reorder by date, description, or amount
|
- **Authentication** — ASP.NET Identity with registration, login, password change, account deletion, and 5-attempt lockout
|
||||||
- **Responsive UI** — Bootstrap 5, mobile-friendly layout with collapsible sidebar
|
- **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
|
## Tech Stack
|
||||||
|
|
||||||
@@ -22,9 +31,12 @@ A personal finance dashboard built with Blazor Server (.NET 10).
|
|||||||
|---|---|
|
|---|---|
|
||||||
| Framework | .NET 10 / Blazor Server (InteractiveServer) |
|
| Framework | .NET 10 / Blazor Server (InteractiveServer) |
|
||||||
| Database | SQLite via EF Core |
|
| 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 |
|
| Charts | Chart.js (CDN) with JS interop |
|
||||||
| CSS | Bootstrap 5, scoped CSS |
|
| CSS | Bootstrap 5, scoped CSS |
|
||||||
|
| Tests | xUnit |
|
||||||
|
| CI/CD | GitHub Actions |
|
||||||
|
| Container | Docker (multi-stage build) |
|
||||||
|
|
||||||
## Getting Started
|
## 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.
|
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
|
### Run with Docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -62,14 +80,24 @@ The app will be available at `http://localhost:8080`.
|
|||||||
BudgetApp/
|
BudgetApp/
|
||||||
├── Components/
|
├── Components/
|
||||||
│ ├── Layout/ # MainLayout, AuthLayout, NavMenu
|
│ ├── 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
|
├── Data/ # EF Core entities, DbContext, Identity user
|
||||||
├── Migrations/ # EF Core migrations (SQLite)
|
├── Migrations/ # EF Core migrations (SQLite)
|
||||||
├── Services/ # AccountService, TransactionService, CategoryService, DashboardService
|
├── Services/ # AccountService, TransactionService, CategoryService,
|
||||||
|
│ # DashboardService, ToastService, AppState
|
||||||
└── wwwroot/
|
└── wwwroot/
|
||||||
├── app.css # Global styles
|
├── app.css # Global styles
|
||||||
└── js/
|
└── 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
|
## Configuration
|
||||||
@@ -90,6 +118,29 @@ Override at runtime via environment variable:
|
|||||||
export ConnectionStrings__DefaultConnection="Data Source=/path/to/budgeteer.db"
|
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
|
## Licence
|
||||||
|
|
||||||
This project is provided as-is for personal use.
|
This project is provided as-is for personal use.
|
||||||
Reference in new issue
Block a user