experiment · in development · 2026–

OpenGoal

A personal finance app, and a lesson in what ends up being useful.

I built a private finance app because I wanted to see where my money was going, organize it into sensible buckets, and plan for Waajebaat and my other goals. It grew into something Mariyam and I could both use, with a copilot to help clean things up and a bot that brought the useful bits into WhatsApp. OpenGoal is the rebuild I'm working on so other people can use it too.

The app screenshots use my original interface with fictional figures, accounts and merchants. The WhatsApp screenshot is the original one I shared, with its existing redactions.

the feature I kept using

This ended up being the most useful feature: a WhatsApp message telling me I'd gone over my eating-out budget.

My original WhatsApp finance alert: eating out reached 123% of a $200 budget, with $246.57 spent, $46.57 over and $35.81 pending. The surrounding conversation and link are redacted.
The actual WhatsApp alert, September 21, 2026. Original screenshot, with the redactions it already had.

The bot watches the 80% and 100% marks in each spending bucket, including pending charges. It tells me how much room is left, or how far over I am, in a conversation I'm already checking. I can ask it how much is left in a bucket, too.

I gave Mariyam her own login to the finance app and set up direct budget alerts for both of us. That was part of making this useful at home. We could both see the spending and get the same heads-up when a bucket was getting tight.

Building and using this helped me figure out quickly what was commodity and what was helpful. A lot of the dashboard features are things you'd expect from any finance app. I still wanted them, but the budget alert earned its place in my day. When you can build quickly, you get to learn that from using the product and put the next round of work into the parts you keep coming back to.

a copilot for the cleanup

Getting transactions into the app was one part of it. Getting them into the right categories took more work. A bank transfer doesn't always tell you what the money was for, and payments to the same recipient can belong in different buckets.

I wanted to explain the pattern once: find these transfers, put the regular membership payments in one bucket and the other gifts in another, count them as expenses, and remember that for next time. Copilot made that kind of reorganization much quicker.

Finance Copilot finds 18 fictional transfers totaling $1,350, separates membership payments from giving, and saves future categorization rules. Each change has an Undo button.
The original app's Copilot interface. This scripted demo uses a fictional recipient and 18 dummy transfers to illustrate the search, bulk changes, future rules and undo receipts. No financial records were changed for the screenshot.

The early version was frustrating. It could find some transactions, then get stuck when I asked it to change all of them. I went back through that flow so it could search the full history, keep track of the exact set we were discussing, and apply a change across it. It also shows what changed and gives me an undo button.

That was another thing I learned by using it. Being able to say what I meant and quickly reorganize a messy history mattered a lot. The web copilot handles those changes; the WhatsApp bot answers questions and sends alerts.

planning for Waajebaat

Waajebaat was one of the things I specifically wanted the app to help me plan for. I wanted to put in the obligation, see what I could fund from the money available, and work out what I would need to earn each month to cover the rest.

The planner lets me choose which expected payments to count, keep a cash reserve aside, and compare different timelines. It also takes essential spending into account. Changing the timeline or the reserve changes the monthly income needed, so I can see what each assumption does to the plan.

Original Waajebaat planner with a fictional $18,000 target, $8,400 deployable, $2,400 expected and $2,400 reserve protected. The twelve-month scenario needs $800 in additional net income per month.
Original Waajebaat planner with dummy figures. This example protects a $2,400 reserve and spreads the $9,600 funding gap over twelve months, giving $800 a month in additional net income needed. The gross figure uses an illustrative manual tax rate.

Expected inflows stay separate from money actually received. I can include a receivable in a scenario without pretending it has already landed in my account. Other savings goals sit alongside the planner, each with its own target and progress.

seeing the whole picture

The private app connects to my accounts through Plaid. The monthly view puts income and spending on the same chart, then breaks spending down into buckets. I can see how the month compares with the ones before it and which categories need attention.

Monthly chart with spending bars and an income line from April to September. Fictional September spending is $3,940 against $5,800 income. Spending buckets below show their budgets and remaining amounts.
Original app, fictional six-month history. Bars show spending; the green line shows income. The example month has $3,940 spent, $5,800 received and $4,580 planned.

Investments have their own view, with balance history and the split between different holdings. Keeping that separate from everyday spending makes it easier to see what is happening in each.

Investment balance history rises from $44,000 to $48,250 in a fictional example. Allocation is 70 percent index funds, 20 percent retirement and 10 percent private investments.
Original app with a fictional $48,250 portfolio. The line tracks balances, which can include contributions; the $4,250 change is not a measure of investment return.

the everyday view

The original dashboard brings the month together: spending so far, income, weekly pace, and the buckets that are getting tight. From there I can get into the transactions, recurring bills, investments and goals.

The original finance dashboard shows fictional September spending of $3,940, income of $5,800, weekly spending bars and budget progress.
The original Today dashboard, using dummy numbers. Select any screenshot to see it full size.

The ledger keeps all the movements visible, including transfers and card payments, while the spending reports use their classification. Recurring bills have a table of their own, where I can check the pattern, the next date and the expected amount.

The original transaction ledger with fictional expenses, payroll and a savings transfer. Flow type, category and review status are separate editable columns.
Original transaction ledger. Fictional records, with classification and review controls.
The original recurring expenses table shows fictional rent, mobile service, software and club membership, with expected amounts, next dates and confirmed or detected status.
Original recurring view. Fictional bills and subscriptions, with patterns to confirm.

turning it into OpenGoal

Once I had something useful for us, I wanted to see what it would take to make it available to other people. OpenGoal brings that work into a separate product. The screenshots here show the original app that got me to that point.

Rebuilding for other people also means being deliberate about who can read their financial records. OpenGoal encrypts sensitive fields with a separate key for each user and keeps readable amounts and merchant names out of routine logs. The server still needs to decrypt records to work with them, so the running service is part of the trust boundary.

The codebase is designed to run on Cloudflare or in a self-hosted container with SQLite, and carries an AGPL license. I'm still working through the rebuild. OpenGoal is pre-release; the private app is where I worked out what I wanted it to do.