KNKuba Nowacki
← Work

Tabby

A Polish bill-splitting app for people in their twenties. You split an expense and text each friend a payment link; they pay by BLIK or bank transfer in the browser and tap "paid", with no app or account.

Status
In development
Platforms
iOS · Android
Started
2026
Stack
Expo, React Native, NestJS, MikroORM
  • Tabby screenshot 1
  • Tabby screenshot 2
  • Tabby screenshot 3
  • Tabby screenshot 4
  • Tabby screenshot 5
  • Tabby screenshot 6

Tabby is a Polish bill-splitting app for people aged 18 to 25. You pay for the pizza, split it, and send each friend a link. They pay you back by BLIK or bank transfer without installing anything. It is in development, with a waitlist at gettabby.pl.

Friends don't need the app

Other split apps make everyone sign up before they can pay you back, and that is where most people give up. In Tabby only the person who paid has an account. Everyone else gets a payment link by SMS that opens a page with the BLIK phone number, the account number and an “I paid” button.

The pay page is the first thing most future users see, so it is rendered on the server as plain HTML with inline styles and a strict Content Security Policy. It needs no framework and makes no external requests, so it opens fast inside any in-app browser.

A link is a secret

Each share has its own random 64-character token, and the link is the only way to reach it. Nobody can guess another person's share, and one link cannot reach any other debt.

Settling without double counting

Each share goes from pending to claimed to settled. The friend claims it, the owner confirms it, and either side can reopen it. Every transition is idempotent: pressing “paid” twice changes nothing the second time.

Two people can act on the same share at once, for example the friend claiming while the owner confirms. Rows carry a version number, so a write based on stale data fails with a conflict instead of silently overwriting the other one, and the app reloads and retries.

Money as integers

Amounts are stored as integer grosze, never floats. Splits can be equal, by amount or by percent, and the split logic makes sure the shares always add up to the total, down to the last grosz.

Supabase for auth, not for data

Sign-in uses Supabase with Apple and Google. The data lives in the same Postgres, but every table has row-level security switched on with no policies, which closes Supabase's public data API. Only the NestJS API, which connects as the table owner, can read or write it.

Built for a TikTok feed

Growth is meant to come from TikTok and Reels, so every screen has to look good in a screen recording: dark, warm, chunky type and a clay cat that reacts to what is happening. The waitlist landing page is a separate Astro site in Polish and English, with GSAP motion and a welcome email sent through Resend.

Where it stands

Tabby is in development for iOS and Android. The waitlist is open, and people who join get half off their first three months of the paid tier.