Designing for a shared phone and one bar of signal
- UX
- Accessibility
- React Native

Building a marketplace for daily-wage workers takes apart a lot of assumptions that are invisible until they break. The user may not read comfortably. They search in Hindi. The phone is shared. The data pack is metered and nearly out.
None of that is an accessibility edge case. For this product it is the median user, and designing for the median user meant discarding most of my defaults.
Icons carry the meaning, text confirms it
A trade list rendered as words is unusable to someone who does not read fluently. The same list as large, distinct pictures — a trowel, a wrench, a paint roller — is scannable by anyone, and the word underneath confirms rather than carries.
The test I settled on: cover the text and see whether the screen still works. If it does not, the icons are decoration, not communication.
This also means resisting a tidy icon set where everything is the same weight and colour. Visual distinctness matters more than visual consistency here. Two trades that look alike at a glance are two trades that get tapped by mistake.
Both languages, everywhere, always
Not a language toggle buried in settings — every screen in both Hindi and English, and search that matches across both. Someone typing "मिस्त्री" and someone typing "mason" must find the same people, or the marketplace splits in half by script.
That means the language is a property of the data, not just the interface. Trades carry both labels, search indexes both, and results are identical either way.
Distance is a field, not a sort option
The most common wasted interaction was a worker travelling to a job too far to be worth it, and an employer calling someone who was never going to come.
So distance became something workers declare: how far they will travel, stated up front. Results sort by proximity, and jobs outside a worker's stated radius do not reach them. Nobody wastes a trip and nobody wastes a phone call.
A field the user fills in beats a preference the system infers, when getting it wrong costs somebody a day's bus fare.
Assume the phone is shared
One phone often serves a household. That breaks the assumption that a logged-in session equals a person.
Practical consequences: make sign-in cheap to repeat — phone number plus OTP, no password to remember and no documents to produce. Keep sessions short enough that a handed-over phone does not expose the previous user's messages. Never surface a notification preview that assumes privacy.
Every kilobyte is somebody's money
On a metered pack, page weight is not a performance metric, it is a cost the user pays.
Small images, aggressively compressed, correctly sized — not one large asset scaled down in CSS.
Text and layout first; imagery loads after and never blocks.
Cache hard, so a repeat visit costs almost nothing.
No autoplaying anything, ever.
Ratings that run both ways
The last one is social rather than technical, and it changed behaviour most. Employers rate workers, and workers rate employers.
One-directional ratings quietly say whose time matters. Making it mutual meant an employer who does not turn up, or pays late, is remembered by the other side too — which is the only mechanism that made the marketplace feel fair enough to keep using.