Inspiration

I have used envelope budgeting for my personal finances for more than a decade, but the major apps I tried never fit the way I manage my money. It felt like developer attention was only going toward premium add-ons rather than the core experience for paying users.

The inciting incident was the day Amazon transactions started including unique IDs in the charge description and suddenly the app I was using couldn't detect Amazon transactions anymore. And years later this is still a problem with that app. So, I decided to make my own and fix that problem.

What it does

Perfii is a finance and budgeting app that uses envelope budgeting to manage daily expenses. It also allows you to track your credit cards, loans, and investment accounts.

The flagship feature is the ability to import transactions from multiple file types and automatically detect how your transactions should be categorized. I have spent a lot of time developing the algorithm so it can reliably detect merchants and expense types and quickly react to changes and variability.

I deliberately chose not to add runtime AI so it doesn't require an API key or ongoing expense to operate. This app's detection and predictions are deterministic, local, and inspectable.

The meaningful Build Week extension is the Pay Yourself First savings planner which helps you reach your savings goals faster by setting up savings rules and calculating how much to put into savings from each paycheck. Also I have added a suite of customization tools so anyone can upload this repo to their preferred coding agent and customize the app for their needs.

How I built it

This is an existing app that I extended for this Hackathon.

In 2024, as ChatGPT became more capable at coding, I decided to build the finance app I actually wanted. I worked with ChatGPT in VSCode to build the core structure and interface. And as my knowledge of web development grew, and ChatGPT's coding abilities improved, I continued to come back to this app to push it a little further.

With GPT 5 I no longer had to dive into the code myself. The model could make significant code changes on its own and generally it would work.

A few months ago I set up an OpenClaw agent using Codex-5.4 and put this app live on a Raspberry Pi. It has now replaced the app and spreadsheets I used to use, and cut my weekly budgeting down to a 1/3 of the time it used to take.

With GPT 5.5 I could give my OpenClaw agent a feature spec and have it implement that feature on its own from start to finish.

And now with GPT 5.6 in the ChatGPT app all I had to do was hand it an old budgeting spreadsheet. It extracted the feature I wanted, figured out how it worked, and implemented it. Most of the work on this feature was fixing UX issues, but it totally one-shotted the core feature I wanted to add.

GPT-5.6 and Codex were my development partners throughout Build Week. They helped me analyze the spreadsheet workflow, narrow the scope, create acceptance criteria, design the schema and calculation service, build the interface, integrate transfer recording, generate a fictional demo workspace, and create focused tests. They also helped identify failure cases such as: stale previews, user switches, changed settings, double-clicks, retries, transfer failures, deleted dependencies, and concurrent requests.

And then I spent the remainder of the hackathon planning with GPT5.6 how we could optimize this project for coding agents to quickly intake and customize for individual users without needing all of the context I had developed with my agents while building it. I think that is the future of software. Taking a base template and working with coding agents to customize it for our preferences.

Challenges I ran into

Most of the challenges I faced with this app occurred early-on working with earlier models. I had to manually apply every code change so I could watch out for bad code and make sure the the model didn't go back and mess up or undo previous work.

As ChatGPT models progressed these issues rapidly disappeared.

For build week the biggest challenge was correcting for the model's tendency to agree. So, when working through my ideas for how to extend the app I had to be very careful not to demonstrate any preferences in order to get real feedback. The first feature I almost embarked on was an automatic receipt scanner where I could upload a scan of a receipt or an Amazon receipt email and have it automatically parse the items and categorize them individually. I realized after a day of work that it would be difficult to demo that feature without posting real receipts in the video, so I pivoted. I still plan to implement that feature later though.

Accomplishments that I'm proud of

I'm really happy with the transaction import system. I put a lot of work into using transaction history to speed up importing because the thing that used to take up most of my time was manually categorizing transactions.

What I learned

The biggest thing I learned from building this project is the importance of breaking projects down into parts and tackling them one at a time. Any time a feature starts to bog down I break it down into smaller pieces and that usually solves it.

What's next for Perfii the Customizable Budgeting App

Next I want to implement that receipt scanner feature I discussed earlier. The biggest blind spot in my finances right now is the "Amazon" category where one transaction may have multiple items from different expense categories. Manually editing every Amazon purchase to enter the categories would take too much time. So I want to automate that.

And I have also been doing some research on Plaid. It might be possible to implement an automatic transaction import feature for individual users without having to turn this into a hosted service. It would be an optional feature, because Plaid charges for transaction lookups, but automatic transaction import could be a game changer.

Built With

Share this project:

Updates