Inspiration

Was inspired heavily by Google Maps, so much so, we are using Google Maps' API. But we noticed a major gap: Google Maps doesn't know what building or floor a class like "CS-UA 201" is in, nor does it know if the pathway to the library is currently swamped with students or filled with high-pollen trees. We wanted a hyper-local, student-first navigation tool tailored to the realities of campus life.

What it does

It is a tailored campus navigation app specifically designed for NYU Washington Square. Students can pick an origin and destination—whether that's a dining hall, a library, an academic building, or even a specific class code (e.g., CS-UA 201)—from a unified, searchable interface. Users set their departure time and fine-tune their route preferences using a "Crowdedness" slider and an "Avoid Allergens" toggle.

CampusNav fetches routes via Google Maps, scores them against custom, time-active geographic zones, and renders the optimal path. It even tells you the exact floor and room of your class in the final direction step and provides live warnings if your destination (like a dining hall) is currently busy!

How we built it

We structured the project as a Bun monorepo to keep our workstreams fast and organized. The frontend is powered by Next.js 15 (leveraging React 19 and TypeScript) for a highly responsive web app.

For the map integration, we utilized @vis.gl/react-google-maps to handle the Google Maps SDK and Directions API. Under the hood, we built a custom scoring engine that checks the coordinate paths of Google's suggested routes against our own hardcoded geographic polygons (zones for allergens, safety, and crowds). The UI was built completely from scratch with custom React components to handle stateful time-picking, filtering, and destination searching.

Challenges we ran into

One of the biggest hurdles was bridging the gap between generic Google Maps directions and our hyper-specific campus data. Seamlessly intercepting the final step of a Google Maps route to append custom data (like "→ Bobst Library — Floor 3, Room 314") required careful manipulation of the directions payload.

Additionally, calculating route intersections with time-sensitive geofences (e.g., knowing a plaza is crowded at 1 PM but empty by 9 PM) required us to build a dynamic scoring algorithm that could accurately penalize or reward routes on the fly without tanking the app's performance.

Accomplishments that we're proud of

We are incredibly proud of the unified destination picker. Merging generic campus locations and specific, searchable class codes into a single autocomplete experience feels incredibly intuitive for a student user. We're also thrilled with the "Venue Crowdedness" indicator—it actively warns students if a dining hall or library is packed based on their chosen departure hour, saving them a wasted trip.

What we learned

We learned a massive amount about the intricacies of the Google Maps API, specifically manipulating the DirectionsService and overlaying custom scoring logic on top of third-party routing data. We also leveled up our React skills, particularly around building accessible, controlled UI components (like custom toggle switches and dropdowns) while maintaining strict architectural boundaries between our Map, UI, and Scoring modules.

What's next for CampusNav

Scaling beyond NYU Washington Square! We'd love to introduce:

Indoor Mapping: Step-by-step navigation inside complex, labyrinth-like campus buildings.

Live Crowd Sourcing: Integrating live data (perhaps via campus Wi-Fi access point density) for true real-time crowdedness tracking, rather than predictive hourly data.

Accessibility Mode: A dedicated filter that specifically routes around stairs, steep inclines, or non-ADA compliant pathways.

Built With

Share this project:

Updates