Betterment
Urdu-first civic reporting for Pakistani cities
A civic issue-reporting app built at Build for Pakistan: residents report local problems in Urdu or English, photos are AI-verified through Gemini, and reports route to a Node/Postgres backend from a React Native client.
- React Native · Expo
- Node.js
- PostgreSQL
- Gemini AI
- i18n

01 / context
Build for Pakistan challenges teams to ship something useful for Pakistani cities in a weekend. Our pick: civic reporting — potholes, broken streetlights, sanitation — where the friction isn't reporting itself, it's trust and language. Reports needed to work in Urdu first, and they needed to be verifiable before they hit a dashboard.
02 / problem
Two hard parts. Verification: a photo of something isn't a photo of the reported issue — we needed a gate that rejected irrelevant images without a human in the loop. Language: forms, prompts and error states all had to feel native in Urdu, not translated-afterthought.
03 / decisions
Gemini as the verification gate
Every submission's photo passes through a Gemini check against the report category before it's accepted — a structured prompt returns pass/fail with a confidence, and borderline cases get flagged for review instead of silently dropped.
Urdu-first i18n, not English-with-translations
Strings, layout direction considerations and typography were designed for Urdu first; English is the fallback locale. RTL-friendly component structure came from enforcing logical CSS properties everywhere in the React Native client.
Thin client, honest backend
A Node/Postgres API with a clean reports domain — the mobile client stays thin and offline-tolerant for flaky networks, queueing submissions locally when connectivity drops.
04 / outcome
- Placed at Build for Pakistan — recognized in a national field of teams.
- AI-verified reports with zero manual pre-moderation during the demo.
- Bilingual UX that felt native in Urdu — judged by Urdu-first users.
05 / what i'd do differently
Hackathon pacing meant the verification prompt went through one iteration; production would need a proper eval set of tricky photos and a feedback loop on false accepts. I'd also spend more on the offline queue — our tolerance for network flakiness was optimism, not engineering.