Skip to content
Angelika Cheng

Explain My Money

Guidance, not a dashboard.

Most budgeting apps answer a question nobody asked. The one people actually have is simpler: am I spending my money well this month?

Explain My Money is a mobile-first finance app built on the 50/30/20 rule. Income splits into needs, wants and savings, the split is adjustable, and the app steers toward paying down high-APR debt and building an emergency fund before anything else.

The Explain My Money dashboard, splitting a month of income across needs, wants and savings.

The product

One view of whether you’re on track.

It is built for people in survival mode, so the job is not tracking. It is showing where you are in a sequence and what the next move is: clear the high-interest debt, build the safety net, then start investing.

Recurring expense detection separates money already committed from money already spent, which is where most budgeting surprises come from. Colour-coded feedback and contextual prompts turn the month into something you act on rather than a report you read.

Figma frames for the sign-up screen, the dashboard, and the debts and safety-net views.

Key features

Six decisions the app makes easier.

Stack
Next.js 16, TypeScript, Supabase, Tailwind v4, Recharts
Tests
Vitest unit, Playwright end to end
Status
In active development, v2
  1. 01Guided financial systemthe 50/30/20 framework shows where the money is going against where it should go.
  2. 02Goal-oriented progressionhigh-interest debt, then emergency savings, then investing, with your position in that sequence always visible.
  3. 03Debt prioritisationdebts surface ranked by interest rate, so the fastest payoff is the obvious one.
  4. 04Committed versus actual spendingupcoming recurring expenses are held apart from money already spent.
  5. 05Contextual promptsthe next step is explained where the decision is made, not in a help page.
  6. 06Colour-coded feedbackon track, at risk, or needs attention, readable at a glance.

Tech choices

No API layer. Row-level security instead.

The front end talks to Supabase directly and every isolation rule between users lives in Postgres policies rather than in application code. That removes a whole backend from the project, and it puts the guarantee in the one place a UI bug cannot get around.

It was built with agentic tooling throughout: Claude, Codex and Cursor against a Supabase backend. That is the other thing this project is evidence of, which is how quickly a designer who codes can get a real product in front of real users.