Splitwise used to be the answer. Clean interface, easy group management, everyone knew how to use it. Then they moved to paid tiers and started limiting free transactions. Meanwhile, Tab has solid OCR - point your phone at a receipt and it parses the items — but the overall experience isn’t as polished.
I wanted the best of both: Splitwise’s intuitive interface with Tab’s receipt scanning. So I’m building it.
Why mobile
Bill splitting happens at restaurants, not at desks. The whole point is to pull out your phone, snap the receipt, assign items, and settle up before anyone leaves. A web app would be easier to build, but it would miss the entire point.
This means I’m learning mobile development from scratch. It’s a steep curve, React Native is its own paradigm, and mobile has a ton of surface area I’ve never dealt with. Deep linking, navigation stacks, touch gestures, platform differences between iOS and Android. It’s a whole new way of thinking about code, and honestly that’s part of why I wanted to do this. Shoutout to claude for helping bridge this gap.
The stack
Backend: FastAPI with PostgreSQL. The API handles bill logic, user accounts, group management. Poetry for dependency management, Alembic for migrations. This part feels familiar. I know Python, databases, and APIs.
Mobile: Expo with React Native. Expo smooths over a lot of the rough edges of mobile dev, and I can target both platforms from one codebase. Hot reloading makes the learning process way faster.
tabit/
├── backend/
│ ├── app/ # FastAPI application
│ ├── alembic/ # Database migrations
│ └── pyproject.toml # Poetry dependencies
└── mobile/
├── src/ # React Native source
└── package.json # npm dependencies
Current state
Early prototype. The backend is in decent shape, auth works, core models exist. The mobile app connects and can do basic operations. But there’s a lot left: receipt OCR, group flows, payment tracking, and all the polish that makes an app feel good to use. Overall, it sucks right now. I’m struggling to find a good way to locally test this, I’m able to test API functionality, but not app functionality consistently.
What I’m learning
Mobile dev is humbling. Things I take for granted on the web — layouts, navigation, state management — all work differently here. I’m building intuition for patterns I’ve never had to think about before.
FastAPI’s auto-generated OpenAPI docs have been a lifesaver. Being able to test endpoints in a browser while building the mobile client reduces a lot of context switching.
The vision
A full-featured bill splitting app. Scan a receipt, assign items to people, track who owes what, settle up. Groups with history. Maybe payment integration someday. The goal is something I’d actually use with friends and something good enough that they’d use it too.