Full-stack · Local AI

Monny AI

A household cash-flow system that runs entirely on local hardware — rules parse what rules can parse, a locally-hosted LLM handles only what they can't, and no financial data ever leaves the network.

Year
2026
Role
Solo — software engineer, data modelling & local AI
Monny AI's monthly report: net cash flow, a day-by-day inflow/outflow bar chart, a filterable transaction list with category tags, and a top-outflow-categories breakdown. Amounts are masked by the app's privacy toggle.
None
Data leaving the network
0
Public ports open
On-device
Model runtime

Overview

Monny AI tracks household cash flow across individual and joint accounts. The constraint that shaped every other decision is that bank statements are about as sensitive as personal data gets, so nothing in the system is allowed to reach a third-party API. The models run locally, the database is local, and remote access goes over Tailscale with no port exposed to the public internet.

My Role

Solo — architecture, data model, Python backend, Next.js frontend, and the local model setup.

Architecture

The backend is a Python service with a SQLAlchemy data model under Alembic migrations, running in Docker Compose. Ollama deliberately sits outside the compose stack — installed natively on macOS and reached from the backend container via host.docker.internal. Containerising it would have been tidier, and would also have thrown away Metal GPU acceleration, which was not a trade worth making.

Attribution is derived rather than stored: transactions belong to whoever owns the source account, joint-account transactions count in full in the combined view and split by ownership ratio in individual views. There is no attributed_to column to drift out of sync, and combined figures are always summed live from individual records rather than cached.