Settle
A group trip companion that splits expenses, simplifies who pays who, and keeps the itinerary in one place.
Designer & Developer · Personal Project · 2026
Next.js, Firebase, PWA, Tailwind

The short version
- Problem
- Every group trip ends in a chat thread of who paid for what and a spreadsheet nobody finishes.
- What I did
- Designed and built it: expenses in any currency, balances that lead with your own number, settle-up with the fewest transfers, and the itinerary in the same place.
- What changed
- Built for my own trips and in use on them, as an installable PWA.
Why Settle
Every group trip ends the same way: a long chat thread of "I paid for dinner", "you owe me for the taxi", and a spreadsheet nobody finishes. Splitwise solves part of it, but it doesn't know anything about the trip itself, and the free tier keeps getting smaller.
I wanted one place for a trip: the plan, the spending, and a clear answer to "who pays who" at the end. So I built it for my own trips first.
What It Does
Settle is a shared space for one trip. Create a trip, invite friends with a link, and everyone logs expenses as they happen, in whatever currency they paid in. The app keeps running balances and, when the trip is over, works out the fewest transfers needed to square everyone up.
Alongside the money, each trip has an itinerary and a day-by-day schedule with places on a map, so the plan and the spending live together.
Screens





Design Decisions
- One trip per screen. No global feed, no cross-trip dashboards. When you open Settle you're inside the trip you're on.
- Balances first. The home screen leads with your own number: what you paid, what your share is, and the difference. Everything else hangs off that.
- Fewest transfers, not fairest. Settling up uses a greedy debt simplification: the biggest creditor is matched with the biggest debtor until everyone is square. Four people owing each other becomes two or three payments.
- Currencies lock at entry. Each expense stores the rate at the moment it was logged, so balances don't drift after the trip when exchange rates move.
- Settlements are recorded, not recomputed. "Who pays whom" lists the transfers, and the person owed taps Confirm Received. Once confirmed it's locked, so the numbers stop shifting under people's feet.
- Seven categories, no more: Food, Flights, Transport, Stay, Activities, Shopping, Other. Enough to see where the money went on the home screen, not so many that logging becomes a chore.
- Optimistic UI. An expense shows up the moment you tap save and syncs in the background, because you're usually adding it while standing at a counter.
Features
- Trips with invite links, no account setup for friends beyond signing in
- Expense logging with payer, split, category and multi-currency support
- Live per-person balances and a simplified settle-up plan
- Recorded settlements with locked amounts
- Day-by-day schedule with map search and travel time estimates
- Printable itinerary, exportable as PDF
- Wishlist and bookings panels per trip
- Spending by category on the trip home, plus per-person filters on expenses
- Push notifications and installable PWA with offline support
Tech Stack
- Next.js with TypeScript
- Firebase Auth, Firestore and Storage
- Tailwind CSS
- Google Maps Places for schedule and wishlist
- Vercel