Back to portfolio

Full-Stack

Clear Path - Personal Finance Dashboard

A personal finance app that does the part most budget apps skip: telling you which debt to kill first, and proving how it got there.

Clear Path - Personal Finance Dashboard

The problem

Most budgeting tools stop at recording what you spent. The harder and more useful question is what to do next, especially when several debts compete for the same limited money each month. Answering that means modelling interest rates, minimum payments and any extra amount available, then projecting the whole payoff order forward. And because the app handles money, every change to a record has to be traceable afterwards.

Approach

  • A dedicated payoff service generates a full plan using either the snowball method (smallest balance first, for momentum) or the avalanche method (highest interest first, for lowest total cost), and accepts an extra monthly payment to show how much sooner the debts clear.
  • Nine domain models cover transactions, budgets, goals, debts and their individual payments, reminders, currency rates and an audit log, so debts are first-class records rather than another expense category.
  • Every mutation is written to an audit log that stores the action, the model touched, the old and new values, the IP address and the user agent, so any figure can be traced back to the change that produced it.
  • Currency rates are stored with eight decimal places and an effective date, which means historical amounts stay converted at the rate that applied when they happened instead of today's rate.
  • Scheduled reminders run through an artisan command covered by its own test, so notifications are a verifiable feature rather than a cron job nobody checks.
  • The interface is Vue 3 through Inertia.js, so the app is a single Laravel codebase that renders a single-page experience without maintaining a separate API client.

What it proves

  • 77 feature tests covering authentication, budgets, debts, dashboard, profile and the scheduled notification command.
  • Debt payoff plans computed server-side by an isolated service, testable independently of the interface.
  • Every record change is auditable, with before and after values retained.
  • Runs entirely on SQLite with file-based sessions and cache, and ships with its own Dockerfile, so it deploys to any container host without an external database.
LaravelVue 3Inertia.jsTailwind CSSSQLitePHP

Building something like this?

Let's talk