HOW IT’S BUILT

A TypeScript web app on PostgreSQL, hosted on AWS.

The budgeting app for a business operating across currencies and banking in multiple jurisdictions. It draws exchange rates directly from the central bank, uses AI to translate and refine matches across accounts, and gives you one financial window across entities, business and personal.

Key capabilities

TRANSLATION

Read the original. Understand it in English.

A built-in glossary translates familiar Georgian bank phrases. Other phrases go to Gemini through OpenRouter, which can also suggest a category. The original text stays. You choose whether to accept a category.

ASK THE DATA

Your question, answered from the ledger.

Ask a spending or income question in plain language. Gemini, through OpenRouter, turns it into filters. budgeter calculates the result and links the matching transactions, so you can check the figure.

CURRENCY CONVERSION

Official rates, tied to the date.

Reporting uses National Bank of Georgia rates in force on each transaction's date. Cross-currency conversions go through GEL. Original amounts stay in their own currencies, and missing rates are shown as gaps rather than guessed.

MCP INTEGRATION

Work with your ledger from Claude.

Claude connects with a custom connector. The endpoint is /mcp and uses Streamable HTTP. You can revoke access. Bulk changes and edits to transactions are shown before they are saved.

WISE

A daily read from Wise.

A Wise account can sync once a day, read only. budgeter can see the balance and the movements. It cannot send money.

AI WITH A DEFINED JOB

The answer comes from your books.

How Ask the data answers a questionYour question goes to Gemini through OpenRouter, which returns filters. budgeter checks those filters and calculates a result from the ledger. The answer links to the matching transactions.
Ask the data uses AI to read the question. The app calculates the figure.

For Ask the data, Gemini receives your question through OpenRouter, with context such as account and category names. budgeter does not send transaction rows or balances with that question.

Translation sends descriptions with amounts, dates and account identifiers removed. Connecting Claude is separate: Claude receives the ledger data you ask it to fetch.

HOSTING & ACCESS

On AWS in Frankfurt.

The production app runs on AWS in Frankfurt, Germany, accessed over HTTPS. WebAuthn passkeys handle normal sign-in, with a separate workspace for each user.

Money is stored in whole minor units (cents, for example) to avoid floating-point rounding errors in balances. Writes to money tables are audited.

The technical version For readers who want the stack

A strict TypeScript monorepo: React 19 on Vite for the browser, a framework-free Bun HTTP API, and PostgreSQL with hand-written SQL migrations and no ORM. Shared Zod schemas generate the OpenAPI documentation. Claude connects over Streamable HTTP at /mcp, and those tools call the same API as the web app.