Inspiration

I've tried budgeting apps many times and always gave up within a few weeks. Each entry meant opening an app, choosing a category from a menu and typing into a form. This discourage me from logged my spending in the moment I spend it, I will just log for the whole week at once. In the end I always had a patchy record that couldn't tell me where my money went.

The one app I open all day is communication app (Telegram, Whatsapp, Zalo). So I asked: what if logging money felt like texting a friend, and something cute depended on me keeping it up?

What it does

M.E.O.W. (My Expense & Outflow Watcher) is a Telegram finance buddy.

  • Log by text, voice or screenshot: coffee 6, lunch 14, a voice note in English or Vietnamese, or a photo of a receipt or bank transfer. Every entry comes back as a card you can undo or fix in one tap.
  • Mochi the cat turns your everyday budget into a daily food bowl: $$\text{bowl} = \frac{\text{everyday budget}}{\text{days in the month}}$$ Each night she's scored. If you stay under the bowl she gains weight, up to Chonky King 👑. If you overspend or forget to log, she gets thin and eventually moves to grandma's.
  • Reports as pictures: weekly and monthly pie charts with fun facts and a daily pace tip. A Telegram Mini App lets you browse any week or month.
  • Ask in plain words: "how much on Grab in August?" The AI turns the question into a filter, and code finds the entries and adds them up.
  • It does the chores itself: bills log themselves, subscriptions are spotted from your history, you're reminded before renewals, and on the 1st it helps you match each wallet to your bank app.
  • A persona (Sassy Cat, Asian Mom or Zen Monk) reacts to each entry and questions prices far above what you usually pay.

How I built it

The rule behind every design choice: the AI reads and writes words; code does every number.

  • Python + FastAPI on Vercel receive Telegram's webhook. Supabase Postgres stores an append-only ledger, with amounts as whole cents or dong and an SGD value for every entry at that day's exchange rate.
  • Rules first, AI second. A rule parser reads common messages instantly. Only unclear ones go to Claude Haiku 4.5 through a forced tool call, and Pydantic checks the output against your real categories and wallets. In real use, 30 of 41 typed or spoken messages never needed the AI. The first 99 AI calls cost about US\$0.12 in total.
  • Claude vision reads screenshots. Account, card and phone numbers are removed before anything is saved. Duplicates, money sent to people and amounts of S\$500 or more always ask before logging.
  • Groq Whisper transcribes voice notes, and spoken amounts are converted before parsing.
  • Supabase pg_cron calls the app every 15 minutes for reminders, Mochi's nightly score, reports and exchange rates. Each job runs at most once.
  • 211 tests (319 checks) run the whole bot against a real Postgres, with a fake Telegram and a fake Claude that can fail or return bad output on purpose.

Challenges I ran into

  • Making AI trustworthy with money. Early on it was tempting to let the model do everything. I moved every sum, conversion and budget into tested code, and the AI only proposes structured data.
  • Messy real-world input. Vietnamese amounts in voice transcripts, a bank name after a comma, 30tr160k, and a Shopee screenshot read with today's date instead of the order date. Each real bug became a test with the real input before I fixed it.
  • Scheduling on a serverless host. Vercel has no always-on worker. I used Supabase pg_cron to call the app every 15 minutes, and made every job safe to run twice so nothing is logged or sent twice.
  • Keeping the charts private. The Mini App checks Telegram's signature so the page only shows the signer's own numbers, with nothing private in its link. The first version of that check had a bug, which a test now covers.

Accomplishments that I'm proud of

  • I use it every day, with over a year of my real history imported.
  • The AI tip is not allowed to suggest cutting needs like meals, rent or health, and stays silent when nothing stands out.
  • Mochi actually keeps me logging.

What I learned

  • Rules before LLMs make an AI product cheaper, faster and more reliable at the same time.
  • Guardrails need tests. A safety claim only counts once a failing case proves it holds.
  • Design matters as much as the model: one-tap undo, confirmation questions and a cat do more for trust and habit than a smarter prompt.

What's next

  • I am thinking of commercialize the bot
  • Develop Mochi the cat with accessories

Built With

  • claude
  • fastapi
  • python
  • supabase
  • telegram
  • telegram-bot-api
  • telegram-mini-apps
  • vercel
Share this project:

Updates

Submission history