← All projects

Solo full-stack developer

Expense Tracker AI

Conversational bookkeeping from voice notes and receipt photos

2026activefull stack ai
Expense Tracker AI screenshot

A production Django app for household finance with a PydanticAI assistant that turns plain language, voice notes and photographed receipts into categorized ledger entries — installed on Android and used daily.

Expense Tracker AI ("Ledger") is a real, daily-driven personal-finance app that replaced a tangle of spreadsheets for running a family's money. It is a hybrid Django 6 monolith: HTMX and Alpine.js drive the CRUD-heavy pages while React 18 islands (Vite) power the analytics dashboard and the AI chat widget, all served from one ASGI process. At its core is a single, provider-agnostic PydanticAI agent that turns natural language, transcribed voice notes and photographed receipts into structured, categorized entries — resolving category, payment method and credit-card billing month before saving. A vision model extracts receipt line items while deterministic Python prorates discounts so the split always sums to the amount paid; the guiding principle is that the LLM decides intent but Python does every bit of the arithmetic. Per-user rules are stored as pgvector embeddings for semantic memory that persists across sessions, and the product ships as a PWA wrapped in an Android TWA. The Brazilian-Portuguese UI models real R$ conventions and credit-card invoice cycles; the codebase, with 766 passing tests, runs on Cloud Run + Supabase.

Problem

Tracking real household spending in spreadsheets is tedious, and the friction of manual entry is what kills the habit.

Approach

A hybrid Django 6 + DRF monolith (HTMX for CRUD pages, React islands for the dashboard and chat) with a single provider-agnostic PydanticAI agent. Voice notes and receipt photos are parsed by transcription and vision models; the LLM resolves intent while deterministic Python handles all money math, and per-user rules live as pgvector embeddings.

Outcome

A production app used every day to run a family's finances — installed on Android as a PWA/TWA, deployed on Cloud Run + Supabase, with 766 passing tests.

Highlights

  • Conversational bookkeeping — describe a purchase in plain Portuguese and the assistant resolves category, payment method and billing month before saving
  • Receipt OCR — photograph a receipt; a vision model extracts line items and Python prorates discounts deterministically so the split always reconciles
  • Voice notes — record a memo; it is transcribed and routed through the same registration flow, with media processed then discarded
  • Semantic memory — per-user rules stored as pgvector embeddings and recalled across sessions
  • Hybrid architecture — HTMX for CRUD pages, React islands for the dashboard and chat, shipped as an installable Android PWA/TWA

Metrics

Automated tests
766 passing

Stack

  • Python 3.12
  • Django 6
  • Django REST Framework
  • HTMX
  • React 18
  • Tailwind CSS v4
  • PydanticAI
  • OpenAI
  • PostgreSQL + pgvector
  • Docker
  • Google Cloud Run
Repository