Finance product · Live
Personal Finance Tracker
Exact money calculations, accessible analytics, and user-owned financial data.
An authenticated finance workspace for transactions, monthly budgets, cash-flow analytics, filtering, and defensive CSV export.
- Role
- Product direction, financial-domain modeling, Supabase architecture, accessible interface design, testing, and release verification.
- Year
- 2026
- Status
- Live
- Stack
- React · TypeScript · Supabase · PostgreSQL · Recharts · Tailwind CSS · Vitest · GitHub Actions

Overview
An authenticated personal-finance workspace for recording income and expenses, managing monthly spending targets, analyzing cash flow, and exporting filtered history.
Problem
Finance applications can produce misleading results when decimal arithmetic, signs, dates, database rules, exports, and visualizations do not use consistent assumptions.
Solution
The application centralizes financial rules in pure TypeScript modules, converts values to integer cents, aligns frontend validation with PostgreSQL constraints, protects ownership with RLS, and provides accessible analytics.
Feature evidence
Transaction workspace
Income and expense CRUD uses explicit types, business dates, and fixed categories.
Exact reporting
Cash flow and budgets aggregate integer cents instead of floating-point currency.
Accessible analytics
Charts include tabular alternatives and controls expose clear labels and states.
Defensive export
Filtered CSV output neutralizes spreadsheet formula injection.
System layers
A React client applies shared domain rules before calling Supabase. PostgreSQL constraints mirror those rules, while Row Level Security remains the authorization boundary.
- 01
React client
Transactions, budgets, filters, analytics, and export.
- 02
Domain modules
Integer-cent math, dates, categories, and CSV safety.
- 03
Supabase boundary
Authentication and scoped data access.
- 04
PostgreSQL + RLS
Constraints and user-ownership policies.
Where the engineering concentrates.
Consistent money semantics
Forms, reports, budgets, charts, and database constraints share the same positive-magnitude and explicit-type model.
Race-safe user context
Requests guard against stale user and stale month responses overwriting current state.
Choices and tradeoffs.
Integer cents
All aggregates use exact integer values rather than binary floating point.
Business dates
Reporting dates remain separate from audit timestamps.
RLS authorization
User ownership is enforced in PostgreSQL, not inferred from filtered UI state.
Table alternatives
Every charted value remains available in accessible tabular form.
Security, accessibility, and testing.
Security
- PostgreSQL Row Level Security
- Database constraints mirror UI rules
- Safe internal redirect restoration
- CSV formula-injection defense
Accessibility
- Accessible custom controls
- Tabular alternatives for charts
- Keyboard-operable filters and forms
- Meaningful empty, loading, and validation states
Testing
- 26 test files with 155 passing tests
- 91.55% statement and line coverage, 85.46% branch coverage, and 92.74% function coverage
- Pure financial-rule tests
- React Testing Library coverage for critical controls
- Race-condition regression checks
- CI validation through GitHub Actions
Current boundaries
The current product has a deliberate scope. These boundaries define what it does not claim.
- Manual entry only
- No bank synchronization
- No financial advice
- No recurring transactions
- No multi-currency
- No custom backend
- No server-side pagination
- Frontend tests do not independently prove RLS
The next credible steps.
- 01Add server-side pagination if data volume requires it
- 02Verify policies with dedicated database integration tests
- 03Expand export formats only with equivalent safety checks
Verified product views
Genuine captures from the implemented product across core workflows and responsive layouts.

Authenticated financial overview 
Secure account entry 
Transaction management and defensive export 
Responsive dashboard on mobile
What the implementation clarified.
- 01
Integer-cent arithmetic keeps forms, budgets, charts, and exports aligned around exact money values.
- 02
Row Level Security is the ownership boundary; filtered client state is only a presentation concern.
- 03
Accessible analytics require the same values to remain available without relying on a chart or color encoding.