Case study01of 05

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
Personal Finance Tracker sign-in page with its secure account access panel.
Product captureSecure account entry

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.

  1. 01

    React client

    Transactions, budgets, filters, analytics, and export.

  2. 02

    Domain modules

    Integer-cent math, dates, categories, and CSV safety.

  3. 03

    Supabase boundary

    Authentication and scoped data access.

  4. 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.

01

Integer cents

All aggregates use exact integer values rather than binary floating point.

02

Business dates

Reporting dates remain separate from audit timestamps.

03

RLS authorization

User ownership is enforced in PostgreSQL, not inferred from filtered UI state.

04

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.

  1. 01Add server-side pagination if data volume requires it
  2. 02Verify policies with dedicated database integration tests
  3. 03Expand export formats only with equivalent safety checks

What the implementation clarified.

  1. 01

    Integer-cent arithmetic keeps forms, budgets, charts, and exports aligned around exact money values.

  2. 02

    Row Level Security is the ownership boundary; filtered client state is only a presentation concern.

  3. 03

    Accessible analytics require the same values to remain available without relying on a chart or color encoding.