27/32proof of conceptPersonal Finance Automation

AI Expense Dashboard

Bank SMS messages parsed and classified into a ledger of monthly spend, income and net position.

What it solves

Spending is scattered across bank text messages and statements. This turns each SMS into a categorised ledger entry and matches it against the statement import.

How it runs

Seven steps, input to output

Goes inThe bank’s SMS, forwarded from the phone

  1. 01

    Forward

    The phone forwards each bank SMS to a webhook.

  2. 02

    Authenticate

    The edge function accepts only requests that carry the shared secret header.

  3. 03

    Parse

    Each message format has its own pattern. A message that matches none is stored raw, never dropped.

  4. 04

    Store

    The raw text and parsed fields are saved, with a fingerprint that rejects a re-sent SMS.

  5. 05

    Classify

    The merchant map answers first. On a miss, Claude Haiku picks a category and the answer is cached.

  6. 06

    Ledger

    The transaction joins the ledger with a fingerprint that matches the statement import.

  7. 07

    Roll up

    Statement and SMS transactions roll into monthly spend, income and net position by pay cycle.

Comes outA ledger of monthly spend, income and net position by pay cycle

What it does

Bank SMS parsed, fingerprinted and classified into the ledger, with an LLM fallback and cache, then statement and SMS transactions rolled into monthly spend, income and net position by pay cycle.

Three decisions

What shaped the build

Built with

8 parts

Supabase Postgres
transaction ledger
Edge Function
Deno sms-hook
Claude Haiku
merchant classifier
merchant_map
classifier cache
md5 fingerprint
duplicate guard
Telegram bot
read-only queries
supabase-js
dashboard queries
Vercel
dashboard host