This one was built for a specific trip, three days before leaving. Money on a trip with friends moves through UPI in dozens of small payments, and it goes wrong in three predictable ways: the spending itself is never written down anywhere, so the month is a mystery afterwards; money lent to one person disappears from memory, because a loan is remembered for about a week and then it is simply gone; and when one person fronts a bill for the group, the reckoning at the end is done from everyone's partial recollection, which is how friendships get quietly taxed. Every existing tracker asks the user to type each expense in by hand, which is the step nobody sustains past the first week. The objective was an app where the logging happens whether or not anyone remembers to log.
The transaction data already exists on the phone — every UPI payment produces a bank SMS. On Android, a thin Capacitor shell around the web app reads those messages and writes the spend automatically, so the ledger fills itself. Everything else is one Vite and React PWA backed by Convex for queries, mutations and scheduled crons, with Google sign-in through better-auth. Two decisions shaped the data model rather than the UI. Amounts are stored as integers in paise, never as floating-point rupees, because money that is added and split and settled repeatedly will drift if it is stored as a float. And a debt is attached to a person rather than to whatever string the SMS happened to contain — the single decision the whole udhaar feature rests on.
