Awesome
<div align="center"> </div>What is this?
๐ฆ I built this site to integrate with Up bank (an Australian digital bank), to assist users with budgeting and to gain powerful future insights.
Epics
-
โก Leverage the Up API (using Up.NET) to:
- Fetch existing Transactional and Saver accounts to make selecting which account to save/expense simple
- Use existing account balances for more accurate insights
- Track actual vs intended savings
- Automatically set savings in app when created on the site (this API does not exist on Up yet...)
-
๐ฒ Track incomes
- Exact ($)
- Allow multiple
-
๐งพ Track expenses
- Exact ($) or Relative (%) cost
- Source from Income streams/Up accounts
- One off + Recurring
-
๐ชฃ Create savings plans
- Create multiple, per income
- Exact ($) or Relative (%) cost
- Choose which Saver account to put the amount into
-
๐ Insights + analytics
-
Show a breakdown of how the calculations work (relative -> absolute), rolling totals, etc
-
Forecast graphs
- Income (in each Up account) - account for all income streams
- Expenses (aggregate recurring and one offs)
- Net Balances (Income - Expenses, in each account)
-
Suggested Budgetting
-
Daily Breakdown
-
Actual vs Intended
-
Reports
-
Examples
Layout + Notifications
Graph
Responsive Sider
<img src="./_docs/img/responsive-sider.png" width="50%" />Form
Result
Table
</div>Code Architecture
This project follows a simplistic take on Clean Architecture.
UpBlazor.Core
- Contains the core models that are stored in the database/not dependent on anything
- Repository interfaces to abstract the infrastructure layer
- Helper methods/extensions
- Services
UpBlazor.Infrastructure
- Contains repository implementations using Marten DB
UpBlazor.Web
- Frontend is Blazor server-side
- Authentication is using Microsoft OAuth2
- UI Framework is AntBlazor, with AntBlazor Charts (based on G2Plot)
Getting Started
Development
- Install a local instance of Postgres
- Create a database called upblazor, and a user with access
- Update the Marten connection string in appsettings.json
- Build and run UpBlazor.Web
Production
- Install Docker and docker-compose
- Run
docker-compose up -d --build
- The program is exposed on port 9994, so reverse proxy your domain to that port