I'm building Road Survey Pro, a mobile app for collecting road information in the field with GPS. This post covers the goals and the stack decisions so far. It is a work in progress.
The problem
Field teams need to record new roads: road name, union, ward number, and photos from the start of the road to the end. Paper forms and scattered photos make this slow and hard to verify.
What the app does
- Collects road name, union, and ward number
- Requires a start photo and an end photo (mandatory)
- Stamps each photo with live GPS location
- Submits everything to a central database
- Scope: new roads only
Stack decisions
- Mobile app: Expo (React Native). One codebase, fast iteration, easy device testing.
- Database: Neon Postgres.
- Admin web app: hosted on Vercel.
- Photo storage: I looked at Cloudflare R2 but decided against it for now and kept photos with the Postgres-based setup to keep the architecture simple.
Lessons so far
- Make the critical fields mandatory in the UI, not in a later cleanup step. Requiring start and end photos at capture time removes a whole class of bad records.
- Tie location to the photo at capture time. Live GPS on the photo is much more trustworthy than coordinates typed in afterwards.
- Use real local data for pickers. The union list comes from the official upazila site, so field staff pick from a fixed list instead of typing names.
- Pick one mobile stack and stay with it. I considered a separate native Android build, then stayed with Expo to avoid maintaining two apps.
Next steps
Admin dashboard for reviewing submissions, offline capture for areas with weak signal, and export to CSV for downstream road datasets.
If you have built field data collection apps, I'd love to hear how you handled offline sync and photo uploads.
Top comments (0)