So I want to learn more about building webapps and was looking for a use-case. Turns out I am not super satisfied with how I track expenses - so this seemed like a match made in heaven. I currently have to export data from the different financial institutions and inject it into GnuCash by hand expenses every month. The process works, but is a bit overkill I think and I tend to slack every now and then because the process of exporting is a bit annoying and double-entry bookkeeping is a bit tedious for what I want to do right now - just keep track of expenses. Gnucash / excel is probably still a better tool for wealth tracking / serious stuff.
Coming back to today, I am now thinking with experimenting with manually adding expenses every time I make a transaction. I am hoping this has the effect of automatically keeping my expenses in check by mimicking ‘cash transactions’ due to the difference in user behavior when spending cash vs plastic.
The goal here is to build something that’s basic as far as UI goes, but allows me to explore and understand the process of building and deploying a (somewhat) usable web-app with a backend. As far as tools go, I want to learn more about JavaScript and backend stuff rather than CSS.
High level architecture
In addition to the high level components described above, since I intend to put real transaction data here, I am going to integrate some form of authentication. Won’t be implementing it on my own, rather use some third party service like okta/auth0/google? Not sure which one yet, but definitely won’t implement my own authentication setup.
UI
So basically this app would have a very simple ui which allows us push a transaction when I do it. The key here is speed of entry so I am going to start with something really simple: Amount, Category, Account and Notes. I don’t want to get stuck in a loop of forever designing the UI, so I will try to use toolswhich abstract the low-level CSS design as much as possible.
Database type and schema
I don’t have much experience using databases / schema design. So I am going to go with something that smarter people say is a good starting point: a SQL database with one table per user with columns capturingdifferent inputs. Must mention though, I intuitively felt that a NoSQL database might be nicer - since they are schemaless, but people who deploy these to production say that they don’t scale well and the ‘schemaless’ property can be a bug, rather than a feature.
Hosting
Will probably host everything in a VM - either in AWS / GCP. Seems like the least intrusive way to set this up and possibly least expensive too.