All posts Looking back, dated a few days after the last commit. Project · OweFlow · interactive demo below

OweFlow: 120 commits, then the question about money

A fellow student and I spent a month building a Flutter app that splits group expenses. What stopped us wasn't the code but payment regulation.

Who paid for the taxi, who paid for the groceries, and who owes whom how much now? And why do you have to type the transfer into a completely different app afterwards?

Robert and I started on December 7 with that question. First semester at HPI. The idea was called OweFlow: split expenses in a group and settle up with one tap at the end. Not just a practice project. We wanted to know whether it could become a product.

We built a Flutter app split into feature modules: groups, debts, reminders, analytics and translations. Plus a few Python scripts to test whether receipts could be read automatically. By January 5 the repo had 120 commits, 43 of them mine.

My part was sign-in. That sounds like one login screen. It isn’t. Firebase Auth with email verification, which means deciding what an account may do while the address isn’t confirmed yet. Social login, so nobody has to create another password for an expense app. And all the in-between states you don’t think about beforehand.

Here is how the app works, and the demo on this page follows the same flow with sample data. You’re in a group and add an expense: who paid, how much, for whom. The app splits the amount across the people involved. The home screen then shows one balance per person. In the plus means you get money back, in the minus means you owe. “Settle up” resets the balance. That’s exactly where the money was supposed to move.

WG Berlin

3 members · 3 expenses87,00 €Gesamtausgaben

Salden

Du
0,00 €
Max
+3,00 €
Lisa
-3,00 €

Ausgleichen 1 Zahlung genügen

LM
Lisa → Max3,00 €

Ausgaben

Pizza-AbendDu hat bezahlt · 12.01. · 3 Pers. · nach Betrag
42,00 €

PutzmittelLisa hat bezahlt · 06.01. · 3 Pers.
9,00 €

WocheneinkaufMax hat bezahlt · 08.01. · 3 Pers.
36,00 €
Demo with sample data
Screens, colours and strings from the Flutter app (Material 3, German and English mixed as in the original). Amount, split by amount, balances and settle-up were only a data model in the prototype; here they run.
Interactive demo OweFlow with sample data: add an expense, split it, check the balances, settle up. Everything is clickable.

And that’s exactly where the question came up of how one-tap transfers work legally. The answer: payment services are regulated in Germany. Two first-semester students won’t solve that on the side. We stopped.

I don’t think the idea was bad. I think I read the hurdle wrong. I saw a wall. It was really a question: which licensed payment provider would let us build on top of its infrastructure? That question belonged on day one, not after a month of code.

What I’m taking away. First, legal before code. Wherever money, health or other people’s data is involved, I check the rules before I write the first line. Second, two people in one repo is a skill of its own, with branches, merges and agreeing who touches which file. Third, auth is a product in itself. You only notice it when it breaks.

Tools and skills: Flutter and Dart, Firebase Auth with email verification and social login, a feature-module architecture with translations, Git with two people. And for the first time, the question of whether an everyday problem can turn into a business.

The repo is public on Robert’s account. I haven’t completely let go of the topic.