Cash Flow
Quenga Designs · 2026
A personal budgeting app focused on the one number that matters: what's actually safe to spend right now.
- Problem
- Most budgeting apps drown you in categories and charts when the real question is simpler: is it safe to spend money right now?
- Solution
- I built a full-stack budgeting app on Next.js 16 and Supabase — transactions, budgets with alerts, CSV import/export, and a cash-flow chart that rolls up by day, week, month, year, or all-time.
- Result
- Built and deployed on Vercel, with a one-to-one test file for every component in the codebase.
The brief
A budgeting app for people who don't want a second job managing their budgeting app. The organizing idea is the approved one-liner: surface the one number that matters — what's actually safe to spend right now — and make everything else (categories, charts, imports) serve that number instead of competing with it.
What was built
A full account-based web app: email/password auth with signup, login, and a profile page that includes password management with strength checking and a danger zone for account deletion. The core surfaces are a dashboard with summary cards and budget alerts, a transactions page, a budget breakdown by category, and an insights panel.
Data gets in two ways: manual entry through add-transaction and add-category forms, or bulk CSV import with a matching CSV export for getting it back out. A categorization module assigns transactions to categories, and an uncategorized-recurring view surfaces the stragglers. The cash-flow chart renders at five granularities — Day, Week, Month, Year, and Total — each windowed to its most recent buckets so the chart stays readable regardless of account history. A theme picker rounds out the personal-finance-app basics.
Under the hood
Stack: Next.js 16 with React 19, Supabase for auth and data (via @supabase/ssr), Tailwind CSS 4, Recharts for the chart, and Papa Parse for CSV handling.
The finance math lives in a pure lib/finance.ts module with deliberate edge-case handling — percent change off a zero baseline returns null rather than a misleading zero, and over-budget progress bars clamp to 100% with an explicit over flag instead of overflowing. Testing is the standout scope fact: all 20 components in the codebase ship with a paired .test.tsx file, and every lib utility has a paired test, running on Vitest with Testing Library and V8 coverage.
Where it stands
Built and deployed on Vercel. It's an internal studio product I run on my own finances, which keeps the feedback loop honest — the features that exist are the ones that survived actual use.