← Back to Work

App

Ledger

A full-stack personal finance application with bank sync, intelligent duplicate detection, asset tracking with depreciation, and a meticulously crafted design system.

Role

Creator & Lead Developer

Timeline

2025 – Present

Team

Solo project

The challenge

Existing personal finance apps either lack the flexibility for detailed tracking or require expensive subscriptions. Managing multiple accounts, detecting duplicate transactions from bank sync, and tracking asset depreciation across different methods needed a purpose-built solution.

The approach

Built a full-stack TypeScript application with a React frontend and Express API. Implemented three-tier duplicate detection (exact, fuzzy, and temporal), SimpleFIN bank sync integration, and a flexible asset depreciation system supporting straight-line, declining balance, and MACRS methods.

Process

Five phases from audit to launch.

01 Core Architecture Designed the database schema, API layer, and React component architecture. Set up TypeScript strict mode, ESLint, and a monorepo structure.
02 Transaction Management Built CRUD operations, categorization, filtering, and search. Implemented split transactions and transfer detection between accounts.
03 Bank Sync & Dedup Integrated SimpleFIN for automatic bank imports. Built three-tier duplicate detection: exact match, fuzzy matching, and temporal proximity analysis.
04 Asset Tracking Added asset management with multiple depreciation methods, historical value tracking, and net worth calculations including depreciating assets.
05 Design System Created a comprehensive design system with dark/light themes, consistent component patterns, and responsive layouts.

Ledger is a personal finance application built from scratch.

Outcomes

3-tier

Duplicate detection

Auto

Bank sync

3

Depreciation methods

Full

Design system

Tools & Disciplines

React Express TypeScript SQLite