(01) Tauri 2, Rust,
React and TypeScript.

Architecture

One window, a Rust core, local workers.

The desktop app is built with Tauri 2, Rust, React and TypeScript. The interface is deliberately thin. Everything that touches money, files or the model lives in the Rust core.

The language model and the OCR worker run as local sidecar processes over pipes. No loopback server is bound, and no worker opens a network socket.

Where to look

A map of the repository.

How a question is answered

Five steps between you and the model.

The model is the last step, not the first. That ordering is what keeps a generated sentence from becoming a ledger entry.

Docs/ADR/0008-local-ai-and-grounded-chat-architecture.md

  1. Classify the questionAn allow-listed intent parser decides what is being asked. Free-form instructions cannot reach the database.
  2. Compute from recordsThe Rust core calculates the figure in integer minor units and collects the transactions it used.
  3. Cite the evidenceThe answer carries identifiers for each supporting invoice or transaction, which open in the evidence inspector.
  4. Let the model write wordsThe local model may phrase the answer, but it cannot change a figure or write to the ledger.
  5. Label the resultThe interface marks the answer Verified when SAAR calculated it, or Not verified when the model wrote it.

Exact money

Integer minor units, checked.

Amounts are signed 64-bit integers in the currency's minor unit, with checked arithmetic that refuses to overflow and a currency mismatch that cannot be added. Totals are grouped by currency, never converted without a recorded rate.

src-tauri/src/finance/money.rs