budgow
budgow is the project I’m currently developing. It is a web app that can save and track all your expenses from multiple accounts. With it, you can add tags to individual expenses to keep track of where you are spending money. I’m planning on open sourcing it as soon as it’s has matured to a degree where it makes sense to do so. Right now, it is not possible for anybody (except me) to create an account and login, since the software has not yet reached my desired level of maturity.
The backend is build using Golang, with a PostgreSQL database. The frontend uses React and Typescript. While I’m very happy with the basic tech stack (PostgreSQL + Golang + Typescript), the rest of the stack still needs some figuring out. At first, I had used beego for almost everything (router + ORM). Since then I have switched to Gorilla for the router, which gave me much more control and better integration into my error handling and access control. The ORM still uses beego. It works, but has some rough edges, so I will most likely remove it medium term.
For the frontend, I used to use Redux with React, for data fetching and caching I used Redux-Saga. Both have since been removed and replaced with Recoil. In the medium term, I want to add React Query for data fetching and caching. When adding React Query, I will reevaluate my decision for Recoil. It might be just too powerful for the job. With zustand (as an example), there are much smaller and simpler alternatives for state management.
As it has been the case with all my projects for a few years, I’ve automated every aspect of testing, compiling, and deploying. Specifially, I’m using GitLab CI to build and test the frontend and backend, build the docker image and deploy it to the kubernetes cluster.