Skip to content
Ritesh FirodiyaGet in touch

Work / Aakalan / Wiki / Surfaces

balances-search

Surfacecanonicalverified 2026-09-23

SURFACE.MOBILE.BALANCES.SEARCH

Summary

One query over your people, your groups and the whole address book.

Raw wireframe

  • .context/designs/mobile/balances/search.html

Why it is drawn this way

Searching replaces the header title rather than pushing a screen. It is the same route with its header swapped, so everything it can reach is what Balances reaches.

It matches the NUMBER as well as the name. "Who is 98450 12345" is a question people genuinely arrive with. Digits only on both sides, so the spacing a contact happens to be stored with does not decide whether it matches.

Sync lives inside the search field and nowhere else. There is no contacts screen and no permanent "Find friends" row; the question Sync answers is the one being typed. It is offered only until the address book has been read, because after that the contacts are simply in the list below.

Nothing is read until Sync is tapped, which is the promise sign-in makes. The empty state on balances says so in as many words rather than letting the button look like a formality.

A contact row is deliberately lighter than a balance row. These are candidates, not relationships, and they must not read as people you already split with.

Tapping a contact creates nothing. It opens Add carrying their name and number; the person is minted when the expense saves. The "Add" button this replaced made a person with a zero balance and no history — a row that did nothing until you split with them, which is what you were about to do anyway — so every abandoned attempt left somebody nobody ever used.

Inline contacts are capped at eight, with a line saying how many matched. A 900-contact phone would otherwise bury the balances under the address book.

The permission-denied card is not drawn. (tabs)/index renders a whole card across denied / unavailable / can't-ask-again, including an Open Settings button; recorded in routes.js under missing.

Related

Sources

  • src/app/(tabs)/index.tsx
  • src/components/ui/search-field.tsx
  • src/services/contacts.ts

Every project of mine is written down like this.

Read the résumé