2026Mobile AppIN PROGRESS

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.

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
  • Expo
  • React Native
  • Next.js
  • Claude API
  • Notion API
  • Supabase
  • Gmail API