BudgieCode

About

These days there are more digital nomads and ex-pats than ever living abroad, and budgeting in multiple currencies is extremely difficult.

Budgie is a simple and intuitive monthly budgeting app, based on Psql, Express, React, and Node, to solve the difficulty of living in multiple currencies.

Budgie is flexible for both monthly expenses and short trips, ultimately just comparing your budget to your expenditures for any period of time.

Download your statistics, reset, and Budgie On! Simple as that!

Why?

Our group tossed around many ideas for a final project, however, one of our members is an expat and there was a real use for Budgie. Solving real-world problems is the best application for technology I can think of!

App on phone

How?

Budgie was built using CRA, Material UI, SASS, with a Node and Express backend. We chose to use PostgreSQL, writing raw SQL queries for performance and character building!

Lessons

An important aspect of any app is User Authentication. I understand that there are many options out there, Firebase, Next Auth, Clerk, etc, however, I also see the value in diving deep and working to understand the typical pattern for Authentication. I decided to build the User Authentication by hand.

On the backend, I implemented express session and cookies (in memory for MVP). This allowed the protection of all sensitive routes by first checking whether the encrypted cookie matched the encrypted session id, if not, the request was denied, and if yes the request was processed as needed.

On the FrontEnd, I implemented a custom useContext hook to keep track of whether there was a user logged in or not, by requesting the information from the backend on the first app load! And using protected routing to show the application pages as a result.

It was a great learning experience to dive deep into the control flow of User Authentication. In the future using one of the mentioned options in combination with a data fetching library, RTK Query or SWR would make simplify the process.

 Back