Networth is a personal financial aggregation application built with .NET Aspire. It allows users to track their net worth, view asset allocation, and sync accounts from various financial institutions using the GoCardless API.
- Dashboard: Real-time overview of Net Worth, Total Assets, Liabilities, and Cash Flow.
- Asset Allocation: Visual breakdown of assets (Cash, Crypto, Real Estate, Stocks).
- Account Sync: Integration with GoCardless to sync bank account balances and transactions.
- Trend Analysis: Historical view of net worth over time.
- Orchestration: .NET Aspire
- Backend: Azure Functions (.NET 10 Isolated Worker)
- Frontend: React (Vite + Tailwind CSS)
- Database: PostgreSQL (EF Core)
- Infrastructure: Azure Storage Queues (Azurite for local dev)
- .NET 10 SDK
- Docker Desktop
- Node.js (optional, for frontend development)
Run the complete application stack (PostgreSQL, Azure Functions, React frontend, Documentation):
dotnet run --project Networth.AppHostThis starts all services including:
- PostgreSQL with PgAdmin (port 5050)
- Azure Functions backend
- React frontend (port 3000)
- Docusaurus documentation (port 3001)
- Aspire Dashboard (https://localhost:17065)
Comprehensive architecture documentation is available in the Docusaurus site:
- Local: Run
dotnet run --project Networth.AppHostand navigate to http://localhost:3001 - Standalone: See Networth.Docs/README.md for running docs independently
The documentation includes:
- Architecture overview and design patterns
- Component documentation (Functions, Application, Infrastructure, Domain)
- Data flow diagrams
- API reference with Scalar integration
1. Create Local Configuration
Copy the base configuration and create your local development overrides:
cp Networth.AppHost/appsettings.json Networth.AppHost/appsettings.Development.jsonEdit appsettings.Development.json and fill in the required values:
postgres-password: Any password for local PostgreSQL (e.g.,LocalDevPassword123!)firebase-api-key: Your Firebase Web API keyfirebase-auth-domain: Your Firebase auth domain (e.g.,your-project.firebaseapp.com)firebase-project-id: Your Firebase project ID
2. GoCardless Secrets (Required for Bank Sync)
GoCardless credentials are sensitive and must be stored in user secrets:
dotnet user-secrets set "Parameters:gocardless-secret-id" "YOUR_SECRET_ID" --project Networth.AppHost
dotnet user-secrets set "Parameters:gocardless-secret-key" "YOUR_SECRET_KEY" --project Networth.AppHostIf running the Azure Functions project strictly standalone (without Aspire), configure settings in Networth.Functions/local.settings.json.
Database migrations are managed explicitly and are not automatically applied at application startup.
For local development, apply migrations manually using the EF Core CLI:
dotnet ef database update --project Networth.InfrastructureMigrations are automatically applied during CI/CD deployment (see .github/workflows/deploy-dev.yml). The deployment pipeline:
- Provisions infrastructure via Terraform
- Applies database migrations before deploying the application
- Deploys the Functions API and Frontend
For manual migration against a deployed environment, use the migration script:
./infra/migrate.shThis script retrieves connection details from Terraform outputs and Key Vault automatically.
System tests use Playwright for end-to-end testing. You must install the Playwright browsers before running these tests:
Install the required browsers:
pwsh Tests/Networth.Functions.System.Tests/bin/Debug/net10.0/playwright.ps1 installThis project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
