The problem
Splitting expenses on a group trip is fiddly: everyone pays for different things, and working out the fewest payments that settle everyone up is error-prone on paper.
What I built
TripSplit lets a group create a shared trip, log expenses against any subset of members, and instantly see a settlement plan that minimizes the number of transactions. The interesting part is the sync model:
- Offline-first peer-to-peer — devices on the same trip discover each other over
MultipeerConnectivityand exchange expenses directly, so the app works with no internet at all. - CloudKit backup — when a network is available, data is mirrored to the user’s private CloudKit database so nothing is lost across devices.
Architecture
The codebase follows a strict MVVM split: Models/ (pure data), Services/
(CloudKitService, MultipeerService, PersistenceService, SyncService),
ViewModels/, and Views/. Utilities like the settlement calculator and invite-code
generator are isolated and unit-test-friendly.