Back to projects

Agents· Tool

Mi Hogar

A single-user finance tracker you run by chatting with a Telegram bot. An OpenAI agent with typed tools turns text, voice notes and receipt photos into transactions; a Next.js dashboard covers reports, budgets, debts and Colombian payroll.

Private single-user app. Source below.Source →

Problem

Most finance apps die because logging an expense is friction. The bet here: the fastest input is a chat message you already have open on your phone. So the primary interface is a Telegram bot, not a form. The constraints: money has to be exact, the data has to be locked to a single owner, and the whole thing ships as a fully public reference repo with no real financial data in it.

My role

Designed and built the whole system spec-first. An OpenAI tool-calling agent (11 typed tools, a bounded 6-hop loop) parses natural language, Whisper-transcribed voice notes, and vision-extracted receipt photos into typed transactions. Money is stored as integer cents with a currency code per row. The numeric work lives in pure, tested TypeScript, not the prompt: amortization schedules, a reduce-term vs reduce-installment payoff simulator, and a Colombian payroll engine (UVT brackets, retefuente, salario integral, AFC). Single-owner Row-Level Security gates every table, the service-role key never reaches the client, and the webhook validates a secret header plus a Telegram whitelist.

Tradeoff

The LLM is an input parser, not a database and not a calculator. The agent only calls typed tools; every amount, budget and amortization number is computed in tested TypeScript. That gives up the flexibility of letting the model reason over numbers, but buys exactness and testability where it matters most: money. Chose Telegram over a custom app for zero-friction capture, at the cost of a conversational UI you cannot fully control.

Metric

Money is exact by construction: integer cents, never floats, with a currency code per row and USD auto-converted at the day's TRM. Every external input (Telegram payloads, tool-call arguments, forms) is Zod-validated. The agent loop is bounded to 6 tool hops, and access is locked down by RLS scoped to one owner. This site links the cleaned, data-free public copy: every amount, identity and credential in it is a placeholder.