Overview
Räppli is named after the Swiss German word for the smallest coins, and it answers one question: where did all the money go? You export a statement from your e-banking, drop the file in, and within seconds you see your spending by category, month and merchant, a budget score from 0 to 100, and honest, concrete saving tips with CHF estimates.
It is built for Swiss banks specifically: UBS, PostFinance, Raiffeisen, ZKB, the cantonal banks, Migros Bank, Revolut, neon and Yuh all work out of the box, and the app speaks German, French, Italian and English. It is not financial advice, just honest numbers.
How It's Built
Räppli is built with heavy help from AI. Much of the code was written with AI coding tools.
The planning and the ideas are entirely mine: the concept, the features, the focus on Swiss banks, the privacy approach, and how the app should look and feel.
What It Does
One upload, one dashboard. Everything from file parsing to the final critique happens in a single flow: upload, processing, results.
Reads any Swiss statement
CSV, CAMT.053/054 XML, Excel or PDF. Räppli detects the bank and format itself, including file encodings and Swiss number and date formats.
Knows Swiss merchants
300+ hand-written rules map Migros to groceries, SBB to public transport and CSS to insurance. An LLM only classifies what the rules don't know.
Charts that make sense
KPI tiles, spending by category, monthly trend, top merchants, recurring payments and subscriptions, largest expenses and spending by weekday.
Budget score & persona
A score from 0 to 100, a saver persona that fits you, and a list of strengths and weaknesses in your spending.
Honest critique & saving options
Räppli names merchants and amounts ("CHF 186 a month on Uber Eats?") and suggests saving options with a CHF-per-month estimate and the effort they take.
Speaks your language
German, French, Italian and English, detected from the browser. Switching language keeps a finished analysis and translates its insights on demand.
Under the Hood
Private by architecture
Parsing, categorisation rules and the analysis run in the browser. No database, no cookies, no accounts: closing the tab erases everything.
Redaction before the AI
PDF text is stripped of IBANs, card, AHV and phone numbers, names and addresses before it leaves the browser. Otherwise the LLM sees mostly merchant names and amounts.
Stateless LLM layer
Four API routes (categorise, insights, translate, extract) call OpenRouter with zod-validated JSON, fallback models, rate limiting, and only providers that don't retain data by default.
Works without AI
Without an API key, the rule-based categoriser and rule-based fallback insights still produce a complete analysis.
Tested core
Vitest unit tests cover the parsers, the categoriser, the analysis and the LLM layer.
Tech Stack
| Framework | Next.js 16 (App Router, Turbopack) |
|---|---|
| Frontend | React 19, TypeScript, Tailwind CSS 4 |
| UI | Recharts, Motion, lucide-react |
| Parsing | PapaParse (CSV) · fast-xml-parser (CAMT) · SheetJS (Excel) · pdf.js (PDF) |
| AI | OpenRouter (default: Gemini 2.5 Flash Lite), zod-validated JSON |
| i18n | Own dictionaries for DE / FR / IT / EN, locale routing |
| Quality | Vitest, ESLint |
| Repository | Public on GitHub |