Photo by Towfiqu barbhuiya on Unsplash
Paycheck to Paycheck Budget app
There are a bunch of budget apps out there, but none of the ones I have used so far do what I need them to.
This is the beginning of a series. I want to build something for my own personal use using tools and libraries I have seldom or never used before. The goal of this endeavor is two-fold:
Build a budget application that allows me to do my budget the way I have been in Microsoft Excel for over 20 years - but easier and more efficient
Learn a new tech stack
I have not tried every budget app that exists, so it is entirely possible that someone has already tackled what I am trying to do. It is also possible that there may be features and functions within Microsoft Excel that could make my efforts easier. Even still, I want to take on this challenge.
I will be putting my code into a GitHub repository, but I am still debating on if I want to make that repository public or not. I am sure that there is some benefit to getting input from developers who have used these tools and libraries before, but I kind of want the struggle alone. At least in the beginning.
Tools and Libraries
The list of libraries is likely to expand, but here is what I will be starting out with.
Angular - I have worked with React and I believe these are similar in nature
VS Code - I have used this some at work, but mostly use Visual Studio Enterprise Edition. I want to get more familiar with VS Code
Prettier - I have often struggled with trying to enforce a code style, this should help (even when I may disagree with it)
ESLint - Maybe there is a better option, but I want to get more familiar with linting
I am unsure of what other libraries to include at the start, but I am sure that the list will grow.
I have not decided on a database yet. I have used MySQL in the past, and since I do not want to spend any money on this project because it is for learning purposes only, that may be the route I go in.
The Current State
When I create a budget in Microsoft Excel, I create a tab for every two-week pay period. In each tab, I have a list of expected credits and debits throughout that pay period. I keep a running total so that I know what my bank account should look like after every charge.
I also have a tab that keeps a list of my credit cards, what their balances are, and what the payment each month is usually expected to be. There is another tab that I have created to try and plan out how much I can put towards each card in an effort to pay my credit cards off.
I have attempted to create a tab for each pay period as far out as I can in an effort to best plan for...anything. The problem that I have is that I have to manually create a row for each of the credits and debits on every tab, they do not pull in automatically.
Creating each tab can take five to 10 minutes depending on how far it is away from the list of monthly charges. If a charge no longer exists, it is exhaustive to go through each tab that was already created, remove the charge, update the values, etc.
Current App "Problems"
Most of the apps I have used allow you to create a monthly budget. Monthly budgets are fine and dandy, but not when you are basically living paycheck to paycheck. Take the following scenario:
Jane Smith has an average monthly budget of $3,500. Every two weeks, Jane gets paid roughly $1,800. On most months, Jane is barely scraping by. However, her monthly budget app shows her that in the month of March, she is going to have $1,900 available. Jane decides that she would like to use that money to go on a short weekend trip, so she books the trip for the last weekend of the month. As the trip gets closer, she now realizes that her last paycheck was going to be the second to last day of the month, she does not have enough money to pay the remaining balance, or gas, or food... Also, her rent/mortgage is due the first of the month, and that is a majority of that last paycheck. So now she has to cancel her trip, stay home, and look for a trip another day.
This scenario is obviously a bit extreme and hopefully Jane wouldn't have made such quick decisions without planning a bit better. Hopefully she would try, as best as possible, to put some money to the side every paycheck and plan a trip with that money. But I have sadly found myself in these exact situations.
Also, of the apps I have used, it is difficult to "see" the Snowball Debt method play out. It would be nice to see "if I pay a little extra every month on this bill, how quickly could it be paid off?" But for most of the apps I've used, you just set a monthly expected payment, and that goes until you make changes and then have to update upcoming monthly budgets.
The Features
I am going to be as granular as possible to start, just to get an idea of what is in front of me.
Create a recuring charge
Create a recuring debit
Update a recuring charge
Update a recuring debit
Delete a recuring charge
Delete a recuring debit
Combine debts into a "snowball" category
Create tags for financial events
Create reports ("snowball", debt, etc.)
Create a filterable summary
Allow the user to create a monthly budget period
Allow the user to create a bi-weekly budget period
Allow the user to create a weekly budget period
Allow the user to create an irregular budget period
Allow the user to add an "extra amount" to recuring charges
Allow the user to add unique financial events to specific pay periods
Create an auto-generated list of pay periods based on the selected budget period
Calculate expected budget upon choosing a pay period
Show possibly carry over amount from one pay period to the next
Allow the user to have different bank accounts
Allow the user to have different savings accounts
Allow the user to specify which financial events relate to which accounts
Create event plans (you want to save X amount of dollars for a trip you plan to take in six months)
This is far from a complete list of features the application should have when finished. However, this is a good starting point.
Where to begin...
At the time of this writing, I have already created a basic Angular app (just using their CLI) and added prettier and eslint. I am taking some time to explore why the basic project is already setup the way it is and determining what settings I want for some of the existing configurations. I will likely not begin writing any functional code for a little while as I better learn some of these libraries and tools.
Also, I want to write tests for everything. I also want to automate as much as possible. If I can get it to run ESLint, prettier, and run tests when saving a file, that would be pretty nice. May not be possible, but I want to try.
I have no timetable for this project. I am not trying to get this done in X number of months or before a certain event. Ideally, once I am finished with this app, I will continue using it for my budgeting. And maybe, just maybe, it is something I will feel comfortable enough to open up for others to use as well.