All case studies

Independent product · 2026

saldo.

From idea
to the App Store.

I wanted to know where my money went, without another spreadsheet. That became Saldo: an app for expenses, budgets and shared finances.

My roleProduct, UX, domain, full-stack and delivery
Real app screen in Polish · sample data
TypeScript / domainVue + Flutter / iOS
Real app screen in Polish · sample data

The key decision

Rules first. Screens second.

A nice chart is not enough for a finance app. Amounts must add up, data must stay in the right workspace and saving an expense needs clear rules. That is where I started.

Interactive examples · sample data · no connection to your account

01

What does “left for today” actually mean?

The user sets a daily limit. Not every expense has to count towards it: rent is still an expense when you exclude it from this particular view.

Change the scenario

50 PLN300 PLN
Demo day

Today's expenses

CoffeePLN 18.00
GroceriesPLN 42.00
RentPLN 300.00
Saldo / Today

Left for today

PLN 90.00
Daily limitPLN 150.00Included expensesPLN 60.00

Daily limit − included expenses on that day

Expenses recorded in historyPLN 360.00

The switch changes neither the transactions nor their total.

A new day, the same limit. Unspent money does not roll over; yesterday's expenses stay in history.

02

AI suggests. The user confirms.

Scanning a receipt should save typing, not take away control. The result goes into an editable form. A transaction is only recorded after confirmation.

Grocery store

17 Oct 2026

Bread and dairyPLN 19.30
Fruit and vegetablesPLN 32.60
Other productsPLN 34.50
TotalPLN 86.40
Sample receipt

A prepared recognition example. No photo is sent to an AI service.

Receipts & AI01 / 03

First a suggestion, then a decision.

Start the example to see the data review step.

Transactions saved in this example0
03

One subscription. One chosen workspace.

Pro belongs to a specific workspace. The subscriber chooses one of their own workspaces, and its members share the features and usage limits.

Choose a Pro workspace in this example

An example of assigning Pro at purchase, with no payment or account changes.

Pro

Shared workspace

Invited by someone else

  • Manual transactions and dashboard
  • AI, receipt scanner and Revolut
  • Members share usage limits

Your subscription covers one chosen workspace.

Joining someone else's Pro workspace does not use your slot. You can still have your own Pro workspace.

04

One product, clear boundaries.

Choose a layer. Each has its own responsibility; finance rules do not depend on the screen, database or payment provider.

02

TypeScript · business rules

Money and rules outside the framework

A separate domain package models finance. Money is stored in minor currency units; parsing and aggregated calculations use BigInt. The rules can be tested without running a UI or database.

Money / BigIntAggregatesDomain tests

Decisions and trade-offs

01

A shared UI, native capabilities

Sharing Vue simplifies web and iOS development. System features use a separate bridge that also needs testing on a physical device.

02

Automation with a clear boundary

Receipts and AI commands produce suggestions for confirmation. An authorised bank connection can import in the background. These are two different flows.

03

A subscription is not an access model

Payment enables Pro for a specific workspace. Roles still control who can view and change its data, and members share usage limits.

Try the finished product.

Transactions, budgets, goals and shared finances, in the app behind this case study.

The iOS app is currently available only in Poland.