The idea is a budget/money management app. The best way to describe my vision for the app is a lite version of YNAB. My app initially will support csv files imported from the big 4 Aussie banks (Commbank, NAB, Westpac, ANZ)
My app will allow users to:
- create/login to a personal account
- create a budget linked to the users account
- add/remove/edit transactions from a budget
- filter transactions by date, amount, description
- import transactions from a csv file to a budget
- view net worth (graph?)
- view income/expense
Install Python and git
sudo apt-get update
sudo apt-get install git
sudo apt-get install python3
Git clone and Open Folder
git clone https://github.com/HarryTranAU/my_money_app.git
cd my_money_app
Optional: Virtual Environment (Recommended)
sudo apt-get install python3-venv
python3 -m venv venv
source venv/bin/activate
Install Pip/requirements
sudo apt-get install python3-pip
pip install -r requirements.txt
flask db-custom create # Create all tables
flask db-custom drop # Drop all tables
flask db-custom seed # Seed all tables
Github Actions
- Setup Python (Github Marketplace)
- Install dependencies
- Run Tests (
unittest
) - Check Data Types (
mypy
) - Style Check (
flake8
)
- The Login Page is the users starting point.
- Login will require an existing username and matching password to continue.
- Successful login will proceed to the Budget Selection Page.
- Register New User will proceed to Register User Page.
- Forgot Password will proceed to Forgot User Page.
- Username and Email must be unique.
- Successful registration will lead back to Login Page.
- A valid existing email is required to reset password.
- A temporary password will be sent to the provided email.
- User will be able to add and remove bank accounts from this page.
- Note: Username is displayed to show which user is currently logged in.
- The user will be able to change/add a profile picture.
- The Budget Selection screen will be used to select which budget to view.
- The budget selected will proceed to the Budget Overview page.
- Budgets can be created and deleted on this page.
- The user's budget will be customized in the budget overview page.
- The Category column will initialize blank. The user should be able to add and remove 'Categories' and assign a number to the category.
- 'Budgeted' column can be edited by the user. Numbers Only.
- 'Activity' column will reflect transactions in that category. User cannot edit this column.
- 'Available' column will show the difference between the Budget and Activity column. E.g. $100 was budgeted for groceries, $50 was spent on groceries reflected in the transactions, $50 is remaining as 'Available'. User cannot edit this column.
- The Accounts Page will show transactions from the corresponding account(savings, credit, etc).
- The user will be able to change between accounts from a drop down list or equivalent.
- A single transaction can be added by manually entering date, payee, category, memo (description), inflow or outflow (Note: a transaction cannot be both an inflow and outflow).
- The user will have an option to import transactions through a CSV file instead of inputting transactions manually. The bank will need to be select in case the CSV is structured differently for different banks.
- The balance shown should reflect the current state of the account. Should there be no outstanding transactions to add, the balance should match the user's real (bank) account.
- The Cashflow page will show the users income and expense for the different months.
- The different reporting pages can be navigated through a menu.
- The net worth page will show the user's overall assets and liabilities over a period of time.
- The different reporting pages can be navigated through a menu.
- Each User can have multiple Budgets.
- Each Budget can have multiple categories. E.g. Rent, Groceries, Utilities, Eating Out, etc.
- Each Budget can have multiple Bank Accounts. E.g. Savings accounts, Credit Card account, etc.
- Each Bank Account can have multiple Transactions.
- Each Transaction can only have one Payee.
- Each Payee can have multiple transactions. E.g. Multiple trips to Coles. Same Payee different transaction.
- Each Payee can only belong to one Category. E.g. Coles cannot belong to both Groceries and Eating Out.
- Each Category can have multiple Payees. E.g. Groceries category can have Coles, Woolworths, IGA, etc.
Endpoints documented using OpenAPI 3.0.3.