Work / Aakalan / Wiki / Surfaces
add-with-person
Surfacecanonicalverified 2026-09-23
SURFACE.MOBILE.ADD.WITH-PERSONSummary
The same screen, split with one person and no group.
Raw wireframe
- .context/designs/mobile/add/with-person.html
Why it is drawn this way
The pair group behind this is created on SAVE, not on selection. Backing out of a half-typed expense must leave nothing behind — and an empty group is visible to the other person, so that litter would not even be private.
A contact tapped on balances-search is held as a draft person with a
provisional id, for the same reason. addPerson runs on save and mints the real
id, which is why the splits are re-keyed there; it also de-duplicates by phone
number, so tapping somebody you already have quietly resolves to the existing
person.
One roster, used everywhere on this screen. Every name here is looked up by uid — the payer chips, the split sheet, the summary sentence — and a draft person is by definition not in the store yet. Reading the store directly meant those lookups missed and fell through to the literal string "Someone", so the screen said "Paid by You / Someone" about a person it had just named at the top.
Paid-by WRAPS rather than scrolls. A ten-person group hid four payers past the edge with nothing saying they were there — the same fault the old "With" chip scroller had, at smaller scale.
The whole split is one tappable sentence, and the per-head figure is printed in it so nobody does arithmetic. The sheet behind that line is the only place any of it can be edited.
A split that does not add up never looks saveable. The line turns rose and names the gap in money, before you try. The store refuses it too; this is the half that tells you why.
Saving lands on the person's ledger, because a pair has no group screen worth showing and the balance it just moved is the one on their ledger.
Related
Sources
- src/app/(tabs)/add.tsx
- src/lib/split.ts
Every project of mine is written down like this.
Read the résumé