Wallana
One view of your money across accounts and currencies — and a watchdog for documents that are about to expire.
- Client
- Own product
- Year
- 2026
- Platform
- Android + Windows
- Technologies
- React 19 · TypeScript · Supabase · Vite · Tailwind v4 · Recharts · Framer Motion · Capacitor · Tauri
The brief
Money is never in one place. A current account at one bank, savings at another, cash in the wallet, something in euros on Wise. Every bank has its own app, its own categories and its own idea of what counts as "shopping".
Anyone who wants to know how much goes on eating out each month ends up exporting to a spreadsheet and colouring rows by hand. It lasts about two months.
And next to that runs a second, even more annoying chore: papers with an expiry date. Car insurance, the MOT, a passport, a laptop warranty. People usually remember them only when it is too late.
The solution
One place where every transaction is together — and, above all, sorted without effort.
Import instead of retyping. A bank statement is uploaded as CSV, XLSX or JSON. The app parses it and links it to the right account. Manual entry stays for cash: an expense, income or a transfer between accounts, a few taps and done.
Rules do the boring part. Each rule sets where to look (description, counterparty, counter-account, variable or constant symbol), what to look for and with what priority — and anyone who wants can reach for a regular expression. Seven rules cover most recurring payments, leaving manual work only for the exceptions.
Currencies are never mixed. Crowns and euros live side by side, every transaction keeps its own currency, and nothing in the overview is quietly converted at a rate nobody knows the source of.
Documents have their own folder. Each one stores its type, validity from–to and a scan or PDF. A reminder can be set a week, a month or three months ahead, so nobody finds out about an expired MOT on the road.
Search works by description, counterparty and payment reference — exactly what is on the statement when you are tracking down a specific payment. The interface speaks Czech, English and Ukrainian.
How it’s built
One codebase, two targets. The frontend is React 19 with TypeScript and Vite, styles are Tailwind v4 with design tokens in one place, motion comes from Framer Motion and Recharts draws the balance and spending charts. Capacitor turns it into an Android app and Tauri into a Windows one — both build automatically in GitHub Actions, so a release means a push, not an hour of clicking.
The backend is Supabase: sign-in, Postgres and row-level security. For a personal finance app that is not a detail — access rules live in the database, not in the client, so not even a tampered request can reach someone else's transactions.
Document scans sit in Supabase Storage under the same rules as the data. A photo of an ID card or a green card is protected just like the account balance, which is the least you can expect for documents people upload to an app.
What I did
Design, frontend, the Supabase backend, data import and categorisation.
Outcome
A monthly overview comes from uploading a statement instead of an hour in a spreadsheet. And because the rules do the sorting, it stays up to date even six months later — which, for personal finance, is the difference between a tool and an abandoned project.
- 2
- platforms from one codebase — Android and Windows
- 16 + 7
- categories and automatic rules
- 3
- import formats — CSV, XLSX, JSON
- 3
- interface languages: CZ, EN, UA