← Ecosystem

JoeLedger

Personal spending analysis on thirteen years of real data: not another tracker, but a tool to compare categories year on year.

The problem

Since 2013 I have logged my expenses in an Android app: over fourteen thousand transactions. But the app only shows the balance and the current month: it cannot show how a category moved over the years, or compare this year with the same period of past years.

The app's backup is encrypted in a closed format, and the only way out was a CSV export. That is where a tool that imports, normalises and compares was born.

How it works

Structure

Accounts, categories, subcategories and transactions in their own tables inside JoeCMS. Three views: an overview, the transaction list and the comparison page, which is the heart of the project.

Usage flow

You export the CSV from the app and upload it. The importer syncs: it updates changed rows, adds new ones and removes those that disappeared within the file's date range. Then you pick a category or subcategory and compare it year on year, by week, month or year.

Technical choices

Repeatable imports without duplicates thanks to a fingerprint per transaction, all inside a transaction that can be rolled back. The data rules are written down: people and places stay categories, when category and subcategory are swapped the main one wins, positive amounts on the spending account count as income.

Known limits

It is in the design phase: the importer and the pages exist, the new look is approved but not yet in the templates, and the import of the full file must be validated before going live.

Numbers

Transactions since 2013 14,373
Years of data 13
Main categories 82
Subcategories 1,278
Accounts 4

Stack

  • PHP 8
  • MySQL
  • JoeCMS
  • Chart.js
Screenshots coming soon