← Writingpersonal project

I Built a Group Expense Splitter for the Filipino Barkada

March 29, 2026 · 7 min read


It started on the drive home from Pampanga.

One day, six people, one car. We left Manila early — 10am, the sun starting to heat up, someone brought pandesal. The plan was simple: do what we needed to do as a group in Pampanga, eat good food, and be back before midnight. And honestly, the trip itself was perfect.

The accounting after was not.

Someone fronted the gas. Someone else paid for the toll fees. Lunch was one bill, merienda was another, and we kept splitting into smaller groups every time we stopped so nothing was ever clean. By the time we hit NLEX on the way home, nobody had a clear picture of who owed who what — just a vague collective guilt and a Messenger GC full of "magkano? sino babayaran?"

We tried to sort it out in the car. We couldn't agree on the numbers. Someone opened Splitwise. Nobody could figure out where to start. We ended up just estimating, someone ate the difference, and we all agreed to "ayusin na lang natin later."

We did not in fact got around to it later.

I knew I could build something better. So I did.

What Kaya Is

Kaya is a group expense splitter built specifically for the Filipino barkada. The name means "can do" — or colloquially, "we can afford it" — which felt right for an app whose whole promise is that splitting expenses should be the least stressful part of any trip.

The target user isn't someone who manages a household budget or tracks investments. It's a group of friends leaving for a day trip at 4am, trying to figure out who still owes someone for the gas and who already paid back for the toll.

That specificity shaped every decision.

Groups overview — net balance, recent expenses, all your groups

Opinionated by Design

Kaya doesn't try to minimize the number of payments between people. A lot of expense splitters do this — if A owes B and B owes C, they'll tell A to just pay C directly. It's clever. It's also confusing, because you end up getting a payment request from someone you never actually bought anything with.

Filipino friend groups don't need that. They pay each other directly, and it takes thirty seconds. So in Kaya, every debt is tied to a specific expense and a specific person. You always know exactly what you're paying for and who you're paying.

The other big call: the design is warm terracotta, not the cold blues and greens of every fintech app you've ever seen. It should feel like something made here, for people here.

Building It

The mobile app is built with Expo and React Native. Supabase handles everything on the backend — the database, authentication, file storage, and realtime updates. There's also a second repo: a Next.js web app that powers the landing page and the invite link bridge (so people can join a group from a link without any extra setup).

The realtime piece works simply: whenever anything changes in the database, the app refreshes the relevant data. No complicated syncing logic. It just works.

The Features That Took the Longest

Adding an expense sounds simple. It took the most iterations.

Add expense — description, category, amount, paid by, and split

The hard part isn't the form — it's the split math. When you divide an amount equally, you almost always get a remainder of a few centavos. The app has to decide who gets it. Eventually I settled on just assigning it to the first person in the list. One line of logic that took a surprisingly long time to settle on.

Multi-currency was the feature I kept putting off and then couldn't ship without. Kaya groups often form around trips — Japan, Korea, Europe — where every expense is in a foreign currency but everyone's thinking in Peso. So you can now log an expense in the original currency, set the exchange rate for that day, and Kaya converts everything to PHP automatically. Everyone sees pesos. Nobody has to do mental math at 2am while still on the trip.

The Balances tab went through a full overhaul. The first version tried to minimize debts. I pulled it out after realizing it was confusing in practice — the direct debt model is less elegant on paper and much clearer in real life.

Balances — who you owe, who owes you, settle inline

Settling up went through the most UX iteration. It started as a separate tab, became a dedicated screen, and eventually landed as an inline flow directly from the Balances tab. The fewer taps between "I need to pay this" and "done," the better.

Guest members came from a real gap. Not everyone on a trip has the app — or wants to install one. Tita Rose joined the Japan group, paid for the accommodation in cash, and had no interest in downloading anything. The old version had no way to track her share. Now you can add anyone as a guest. Their debts are tracked, their name shows up in the splits, and if they ever sign up, they can claim their full history. It makes Kaya work for the whole group — including the ones who haven't downloaded it yet.

The Activity tab is what I'm most proud of. Every expense added, every settlement made, in one clean chronological feed. Tap any row for the full breakdown. It's the receipts for your whole trip.

Activity — every expense and settlement in one timeline

Nudges came from a simple frustration: reminding someone to pay you back always felt awkward. Now there's a one-tap nudge from the Balances tab. No message to compose. The other person gets a notification. Done.

The Dashboard

The home screen shows your overall position across every group — total you're owed, total you owe. No digging through individual groups to get a sense of where you stand. It's the feature that makes Kaya feel like something you keep open, not just open when you need to log something.

Shipping It

Kaya is live on the App Store.

The first version took about a week of focused evenings and one full weekend. Multi-currency, guest members, nudges, and the dashboard came after — each one pulled in by an actual gap that real usage surfaced.

The things I'd do the same: Supabase for everything, the direct debt model, the terracotta design system. The things I'd do earlier: nail the Add Expense UX before building anything else, because every other screen depends on getting that right.

The things I'm most proud of: the Activity tab, the invite flow, and guest members. On a trip, the last thing you want is to explain an onboarding screen to someone who's still half asleep from the 4am call time. Kaya should work for the whole group — including the ones who haven't downloaded it yet.

If your barkada goes on trips and your post-trip accounting usually ends in a Messenger GC thread arguing about who paid for the pasalubong — give it a try. It's free.

The ride that started this was thirty minutes of confusion. The app took a few weeks. That math almost always works out.

Now onto the Android build.