My Spending

Personal Finance & Freelance Bookkeeping

A full-stack finance application combining household expense tracking with bookkeeping tools for freelancers in Japan.

My Spending dashboard showing financial summaries and charts

Overview

My Spending is a personal project I built to solve two problems I encountered in everyday life: managing household expenses with my wife and preparing financial records for my freelance work in Japan. What started as a way to centralize family spending gradually evolved into a full-stack application with transaction management, financial dashboards, and accounting ledgers.

The problem

My wife and I were tracking household expenses separately, making it difficult to maintain a clear picture of our shared spending. At the same time, preparing my freelance tax records involved manually organizing transactions in Excel and creating accounting ledgers. I wanted a single application that could support both workflows without making everyday expense tracking unnecessarily complicated.

The solution

I developed a finance management application supporting personal, shared, and professional accounts. Users can organize transactions into customizable categories, track income and expenses through dashboards, and generate accounting ledgers from professional transactions. The application uses Supabase authentication and PostgreSQL Row Level Security to control access to financial data.

Key features

Tech stack

Technical implementation

Challenges & engineering decisions

Results & lessons learned

Results

My Spending has grown from a household expense tracker into a working full-stack application that also supports my freelance bookkeeping workflow. It generates professional ledgers, supports browser-based PDF exports, and includes automated tests running in CI. Shared-account management and Excel exports remain areas for future development.

Lessons learned

  • The right data model depends on the relationships and queries an application actually needs. Moving to PostgreSQL gave me more flexibility as the project grew.
  • The simpler solution is sometimes the more reliable one. Replacing custom JavaScript pagination with browser-native printing reduced complexity and made ledger exports more consistent.
  • Authorization belongs at the data layer, not just in the interface.
  • Building software around a real personal need reveals requirements and edge cases that are easy to overlook at the start of a project.