Personal productDesign Engineer — end to end

olbo

A personal finance app that reads your spending pace, not your balance — designed, built and shipped solo.

The product

  • olbo dashboard with the traffic light in green — spending pace is at or under the share of the month elapsed.
    01Green: the pace matches the calendar.
  • olbo dashboard with the traffic light in alert — the same pocket read against an earlier day of the month turns the color to a warning.
    02The same amount, earlier in the month, reads as alert.
  • olbo expense capture screen — entering a movement in whole Colombian pesos in a few taps.
    03Capture in whole pesos, in seconds.
  • olbo movements list — recorded expenses grouped and categorized, stored locally in IndexedDB.
    04Movements, categorized and kept on the device.
/ Walkthrough — no sound

An expense logged in four taps; the month's pace updates before the sheet closes.

/ Role
Design Engineer — end to end
/ Duration
Weeks — still shipping
/ Team
Solo — design, engineering, shipping
/ Year
2026

The impact

634
Tests passing
in 292ms
0
Dependencies
no bundler, no framework
62
JS modules
across 24 views
1:2.5
Test-to-code ratio
6,400 lines of tests

Live and in daily use: log an expense by photo, voice, bank text or PDF, and one color tells you whether the month is on pace.

Context

Budgeting apps answer "how much is left", the anxious question. I built olbo for my own household: a local-first PWA in Colombian pesos whose traffic light reads spending pace against the calendar.

What I did

  1. 01

    Product and interface — 24 views, from the traffic-light dashboard to AI that reads receipts, voice and PDFs.

  2. 02

    Zero dependencies — vanilla ES modules, no build step; pure budget math, so 634 tests run in 292ms.

  3. 03

    Privacy you can check — your data stays on the phone; the only thing that leaves it is the call to the AI.

What it can do

Capture is where finance apps die: if it takes effort, nobody does it. So olbo takes an expense however it arrives.

  • AI

    Photograph the receipt

    Claude reads total, merchant and category into a card you confirm before saving.

  • AI

    Say the expense out loud

    "Cincuenta mil en el mercado" becomes a structured movement: Claude with a forced tool call, flagged for review below 0.7 confidence.

  • Product

    Paste the bank's text message

    Deliberately no model: an exact parser reads both bank formats offline, free, with no way to hallucinate an amount.

  • AI

    Read the whole card statement

    A PDF becomes data: closing and due dates, monthly rate, every installment purchase and its remaining term.

How it happened

  1. 01

    The problem was mine

    Every app I tried counted cents in someone else's currency. Product first: whole pesos, my data on my own phone, one screen that says if I'm fine.

  2. 02

    Built with AI, decided by tests

    I paired with Claude but refused disposable output: a pure domain layer, with "today" always injected, so every test runs in Node without a browser. AI wrote fast; the tests decided what survived.

  3. 03

    Shipping, then listening

    Live as an installable, offline PWA, service worker at v150. Daily use surfaced what no spec would: a timezone bug that broke the color at night, and receipts I refused to retype.

Key decisions

  • The traffic light reads pace, not balance

    Spending pace over the month elapsed: green up to 1, amber to 1.25, red above. 90% spent on the 28th is fine; 80% on the 10th is not.

  • Variable bills never reserve money

    Power, water and fuel count only once you record what they cost. A reserved estimate can paint a false red, and one false red is enough to stop believing the color.

  • Privacy you can check, not just read

    Everyone claims local-first. Here the CSP header proves it: nothing leaves the device except calls to api.anthropic.com. It cost every inline style, even inside SVGs.

/ Tools & methods
  • Vanilla JS (ES modules)
  • PWA & Service Worker
  • IndexedDB
  • node --test
  • Strict CSP
  • Claude API
/ Authorship

Design and engineering end to end. Claude worked inside the build and the product; the decisions, and the tests that enforce them, are mine.

© 2026 Doug Vargas