Monavo Monavo
All posts

Building an AI that teaches itself out of a job

April 2026

Every expense tracker has the same problem: logging a transaction takes too long.

You open the app, tap "add," pick a category, type an amount, maybe adjust the date, then hit save. Six taps if you're fast. Most people quit after two weeks.

I did too.

So for Monavo, I wanted something different: type coffee 3.50 and you're done. No picker, no confirmation, no extra steps. One input, one send, saved.

That part is easy to demo. The interesting part is what happens in between.


The problem with "just use AI"

The obvious solution is to send every input to a language model:

coffee 3.50 → Claude → { category: "Food", amount: 3.50 }

Ship it.

It works — but it breaks in three ways:

  • Latency — 500ms to 2s per input. You feel it.
  • Cost — every transaction costs money. At scale, it adds up quickly.
  • Offline — no signal, no parsing. The app stops working.

So AI can't be the system.
It has to be the fallback.

Local-first parsing

Every input is parsed locally first. No network, no delay.

Two steps:

1. Extract the amount
First number wins.
coffee 3.50 → 3.50
uber 50 → 50

2. Resolve the category
Strip the number, normalize text, then run it through a resolution chain.

First match wins:

  • Hard corrections — if you fixed something before, that decision sticks forever.
  • Keyword map — ~200 high-confidence terms across 6 languages. ("coffee" → Food, "uber" → Transport)
  • Soft corrections — previous AI results cached locally.
  • Category name match — diacritic-insensitive substring match against your own category names.

If any level hits, the transaction is saved instantly. No AI involved.

After a few days of usage, most inputs resolve in under a millisecond.


The AI fallback

If nothing matches locally, we call Claude (Haiku).

But not with raw input.

coffee 3.50 → coffee <amount>

The number never leaves the device.

The AI only sees:

  • the text
  • your category list

It returns a category. The amount is merged locally.

No training. No stored history. No personal data.

The learning loop

After every successful AI result:

"sushi" → Food

is stored locally.

Next time:

  • no API call
  • instant match

If the AI was wrong and you fix it:

→ it becomes a hard correction
→ permanently overrides everything else

You only correct once.

What actually happens over time

Week 1: ~40% of inputs hit AI
Week 2: ~15%
Month 1: almost none

The system slowly stops needing the model.

The AI teaches the local parser, then disappears.


Small detail, big effect

Corrections are stored without numbers:

coffee 3.50 → "coffee"
coffee 12 → "coffee"

One correction applies everywhere.


Privacy by architecture

Not a policy — a constraint:

  • amounts never leave the device
  • only text + categories are sent
  • corrections are local
  • fewer calls over time
  • no account required

After a month, most users barely touch the network.


The result

You type: coffee 3.50

In under a millisecond:

  • category matched
  • amount extracted
  • transaction saved

No spinner. No friction.

If it doesn't know something:

  • AI handles it once
  • then never again

The goal

The AI's job is to make itself unnecessary.

And it does.

Monavo is a personal expense tracker available on iOS and Android. Free to use, with optional premium features. Why Monavo doesn't connect to your bank →

Monavo Monavo
Privacy Policy Terms of Service Support
© 2026 Monavo. All rights reserved.