Inspiration

Campus is confusing, especially in your first semester. New students and their parents show up not knowing that cutting through Derring Hall saves five minutes over walking around it, or that "Perry Place" isn't even a building - it's a dining hall tucked inside Hitt Hall. We wanted a map that knew campus the way a senior does, shortcuts included. But the more we dug into how VT's buildings actually connect, the more we ran into a harder problem; almost none of that "insider knowledge" distinguishes between a shortcut anyone can take and one that only works if you can climb stairs. A quicker path is only quicker if you can actually walk it - and for a student using a wheelchair, on crutches, or navigating any mobility disability, a "shortcut" that dead-ends at a staircase isn't a shortcut at all. It's a wasted trip, or worse, a route you can't get out of.

What it does

CampPath is a campus routing app for Virginia Tech that finds walking routes across the Drillfield and North Academic District, including routes that cut straight through buildings when that's faster than walking around them (through Derring Hall to Pamplin, for example). Unlike a general-purpose map, it also provides accommodating routes for people with mobility issues - whether that may be a wheelchair or crutches, CampPath will provide the fastest, safest route for its users. Additionally, our project utilizes ElevenLabs as a text-to-speech helper for visually impaired users.

How we built it

The data lives in an Excel workbook - buildings, entrances, indoor/outdoor paths, elevators, POIs - which a Python script converts into GeoJSON. A standalone Dijkstra-based routing engine (stdlib only, no dependencies) loads that graph and computes routes under different accessibility preferences (avoid stairs, require step-free, avoid unverified data, etc.), served through a lightweight HTTP API and rendered on a Leaflet/OpenStreetMap front end. We also pulled in real sidewalk geometry from OpenStreetMap's Overpass API to replace hand-drawn straight-line paths with actual traced sidewalks, and snapped it onto our existing building/entrance network.

Challenges we ran into

Initially, our router would have issues going through buildings and creating shortcuts. This issue plagued our code for most of our runtime. To solve our issue, we fed CampPath actual hand-drawn routes in tandem with OpenStreetMap's Overpass API. After this, however, our accessibility functionalities stopped working, so we employed a similar strategy to solve that issue. Finally, after a long time of implementation, we finally arrived upon a product that we were proud of.

Accomplishments that we're proud of

Optimizing our mapping app while providing more accessible routes was a challenge, but we are very glad that we stuck with the process. In the end, we made a product that any and all students can use - whether they are from VT or another school, we intend to expand CampPath to other schools.

What we learned

Accessibility data is mostly missing, not wrong; almost nothing about step-free access, elevator status, or building hours is actually confirmed anywhere, which reframed the whole project from "build a router" to "build a router based on accessibility issues." We also learned that real map data (OpenStreetMap) gets you real geometry fast, but real accessibility facts, the part that actually matters for a disabled student, still requires someone walking the campus and checking.

What's next for CampPath

Long-term, once VT's pilot proves the model out, the plan is to open-source CampusPath and expand it to other universities. The architecture was already built campus-agnostic, so growth doesn't mean a rebuild each time. Being open source means any student at VT or elsewhere can contribute directly: submitting a shortcut they've found, confirming a door or elevator actually works, or standing up the pipeline for their own campus. Eventually the idea is one shared, community-maintained platform across schools rather than isolated apps - but always following the same rule: a route only ever gets marked "confirmed" because someone who actually checked it says so, never a guess.

Share this project:

Updates

Submission history