Writing instead of filling in forms

I built Margin around a familiar action: writing a note. You can enter order grab 5$ or income 2k usd without choosing a category first. The app keeps your sentence and puts its reading of the amount in the right margin. A confidence dot shows which entries need a closer look.

Today is the main ledger, rather than one tab among several. Changing the period lets you review earlier entries or open a monthly summary without leaving that record behind. The screenshots below use example data.

A reading you can correct

For a finance tracker, an uncertain sentence shouldn't quietly become a certain amount. Margin saves the original capture before interpretation starts, and keeps those words unchanged so you can compare them with the result. Clear amounts go through a local parser without a model call. Ambiguous amounts ask for clarification instead of guessing.

That distinction also shapes review. When a proposed interpretation changes the money or the number of purchases, you can compare it with the current entries before accepting it. Remembered merchant and category rules are visible and editable, with sample matches and conflicts you can inspect. Changing a rule applies to future captures by default; applying it to old entries requires a separate preview and action.

Keeping capture separate from sync

The iPhone app uses SwiftUI, with SwiftData holding the local cache and upload outbox. A saved line can wait for a connection without blocking the next note. A status receipt distinguishes saving locally, syncing, reading, and needing confirmation, rather than treating them as one loading state.

Supabase provides the account-backed data and interpretation service. Model requests run on the server, keeping API credentials out of the app. This adds an account and sync boundary to a notes-like interface, so the original capture and review decisions have to survive retries.

The tracking and review work is implemented and verified locally. Live model evaluation and physical-device performance checks remain release work.