2026 · MOBILE APP · AI

Balboa Finance

Personal financial assistant. Ingests credit card statements from Gmail, captures physical receipts via Claude Vision, categorizes across 11 fixed spending buckets, and surfaces pending transactions for one-tap confirmation before anything gets persisted.

Stack
  • Expo
  • React Native
  • Next.js
  • Claude API
  • Notion API
  • Supabase
  • Gmail API

What it does

  • Hourly Gmail poll picks up credit card PDF statements via Gmail API + OAuth2 and extracts transactions with pdf-parse
  • Camera screen captures physical receipts — Claude Vision reads merchant, amount, date, and suggests a category
  • Every extracted transaction lands in a Pending inbox: review, edit, or reject before anything gets written
  • One-tap confirmation persists the finalized transaction to the database
  • Chat tab answers spending questions in natural language — "how much did I spend on restaurants this month?" — with streaming responses
  • Weekly and billing-cycle analysis shows spending by category, top merchants, and period-over-period movement
  • 11 fixed spending categories (Supermercado, Restaurante, Transporte, Salud, Entretenimiento, Ropa, Hogar, Educacion, Servicios, Viajes, Otro) — Claude classifies, the user confirms

Why it matters

  • Replaces a fragile n8n prototype that carried a dual-write risk — the rewrite eliminated that failure mode before it ever reached the permanent record
  • Zero manual categorization per transaction — Claude classifies, the user confirms in one tap; the full review loop takes under 5 seconds per transaction
  • Physical receipt capture closes the gap that bank-statement-only tools miss — in Panama, a significant share of everyday spending (restaurants, local markets, transport) never appears in a card statement

Architecture

  • Expo monorepo: mobile app (React Native + NativeWind + Expo Router v4) and API (Next.js 15 on Vercel) share types via a `packages/shared` workspace package
  • Supabase stores operational state — pending transactions, dedup log, learned merchants, billing cycles
  • GitHub Actions runs the hourly Gmail poll cron — the cron secret can queue transactions but cannot write to the database; only the DEVICE_TOKEN-authenticated confirm endpoint can
  • Claude Sonnet 4.6 handles both receipt OCR (vision) and conversational queries (streaming); the 11 categories are injected as the only valid classifier outputs so Claude cannot invent new ones
  • Replaces a fragile n8n prototype: every integration has a first-class Node SDK; n8n was adding complexity, not capability, and carried a dual-write risk that could not be silently rolled back

Philosophy

  • The confirmation invariant is the first principle: zero writes to the permanent record without an explicit user tap. The cron, the classifier, the OCR — none of them can touch it
  • Physical receipts matter in Panama more than most places — a lot of everyday spending never lands in a bank statement