About Projects Modules Contact
← Back to projects
In development Next.js · AI · FinTech

Räppli

Your budget, down to the last Rappen. Upload a Swiss bank statement and get an instant breakdown of your spending: auto-categorised, charted and critiqued. No sign-up, nothing stored.

Räppli logo

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

Built with AI

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.

Core

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

FrameworkNext.js 16 (App Router, Turbopack)
FrontendReact 19, TypeScript, Tailwind CSS 4
UIRecharts, Motion, lucide-react
ParsingPapaParse (CSV) · fast-xml-parser (CAMT) · SheetJS (Excel) · pdf.js (PDF)
AIOpenRouter (default: Gemini 2.5 Flash Lite), zod-validated JSON
i18nOwn dictionaries for DE / FR / IT / EN, locale routing
QualityVitest, ESLint
RepositoryPublic on GitHub