Inspiration

It started when a close friend broke his leg and was confined to a wheelchair for two weeks before transitioning to crutches. I spent that time helping him get around, and while Singapore is generally known for having excellent infrastructure, I still hit unexpected roadblocks—missing curb cuts, blocked pathways, and areas that were incredibly difficult to navigate.

It was an eye-opening experience. It made me think about the elderly, people with permanent disabilities, and those who don't have someone there to help them over a rough patch. Standard map apps assume everyone can just step over a 4-inch curb. I realized I needed a tool that actually looks at the streets to keep vulnerable people safe, so I built AccessRoute.

What it does

Give it a start and an end point, and AccessRoute:

  1. Pulls the real walking route from Google — and its alternatives.
  2. Samples Street View imagery every ~50m along the way.
  3. Sends each image to Gemini with a barrier-assessment framework grounded in published accessibility research — curb cuts, steps, obstructions, crossing safety — not categories I invented myself.
  4. Scores the route and flags the specific points worth knowing about, each with the actual photo and a plain-language note.
  5. If the default route scores poorly, it checks Google's alternatives the same way and recommends whichever one actually scores best — not just "here's a problem," but "here's a better way."

You can try it out if you input the API keys, which are all free, I have not included mine due to privacy reasons

How I built it

Next.js and TypeScript on the frontend, deployed on Vercel. Google's Routes API and Street View Static API for the routing and imagery. Gemini for vision analysis — chosen because its free tier needs no credit card, unlike the alternatives. Underneath it all, a framework-agnostic pipeline (routing → sampling → vision → scoring) that's fully decoupled from the UI, which is what let me build both an offline demo-generation script and a live "check your own route" endpoint off the exact same tested code, with zero duplicated logic.

Challenges I ran into

Getting the Vision API to reliably interpret Street View photos was surprisingly difficult. Early on, the AI would hallucinate or misidentify shadows as curbs. I had to heavily engineer my prompts, creating strict, deterministic guidelines for exactly what the model should look for (curb cuts, gradients, obstructions) and forcing it to return perfectly structured JSON.

Building the custom route creator was another major hurdle. When users requested longer routes, sampling images every few meters resulted in massive API payloads, severe rate-limiting issues, and timeouts. I had to optimize my sampling logic and implement smart fallback keys so the generator wouldn't crash midway through a longer journey.

Finally, merging asynchronous crowdsourced photo uploads and live community feedback into the existing route datasets without breaking the core engine required me to completely rethink my state management.

Accomplishments that I'm proud of

A fully tested, modular pipeline with over 130 automated tests, no file in the codebase over 300 lines. A recommendation loop that actually recommends, not just flags. And a live mode that lets anyone check a real route in real time, not just click through pre-baked demos, and it actually works

What I learned

A single Street View frame is a genuinely useful but imperfect signal. Published research on this exact task (Wang et al., 2026) found that AI vision models reliably spot clear features such as curb ramps and marked crossings, but are far less reliable in detecting subtle surface conditions and temporary obstructions. I built that finding into two layers of the app: the vision prompt asks the model to self-calibrate around it, and the scoring function independently discounts those specific categories as a backstop. I'd rather be honest about what the AI is confident about than oversell a number.

What's next for AccessRoute

Expanding past Singapore to any city with Street View coverage, the pipeline is already city-agnostic. Letting users confirm or correct a flagged point, turning a single AI signal into a growing, verified dataset over time.

Built With

  • google-gemini-api
  • google-maps-javascript-api
  • google-routes-api
  • google-street-view-static-api
  • next.js
  • react-testing-library
  • tailwind-css
  • typescript
  • vitest
Share this project:

Updates

Submission history