Inspiration

As UTD students, we know the pain of navigating campus: from finding classrooms within labyrinth-style buildings, to standing in the hallway during an awkward hour-long gap between classes. We wanted to build something that takes the friction out of campus navigation. Instead of wandering the halls searching for an empty room or hastily tapping the classroom name into map UTD. We built an app that automates the entire daily journey starting with nothing more than a photo of your schedule.

What it does

  • Easy Onboarding And Persistent Profiles: Create an account with email and password, then upload a picture of your schedule. Our Gemini powered backend builds your customized timeline, ready every time you log in.
  • Smart Timeline: It creates a vertical timeline of your day that shows exactly what time to leave your class.
  • Intelligent Gap Filling: If you have a break longer than 45 minutes, CampusNav calculates the closest empty room to your current location. It prioritizes the building you're already in, the building your next class is in, and then sorts other nearby buildings by physical distance.
  • Integrated Wayfinding: It gives you exact walk times and routes between your classes and suggested study spots.
  • AI Assistant: An integrated chat feature helps you organize your schedule and answer quick questions about your day.

How we built it

We cleanly divided our React frontend from our backend API routes and data logic.

  • Design and UX: We used Figma to craft the user journey, ensuring the timeline view felt intuitive. This allowed us to iterate on the design before writing a single line of CSS. Figma Link: https://www.figma.com/design/0DFnzUCPH4zwtdtZAgNtm9/hackai?node-id=7-2&t=8IIgQiMXNaTG9U7g-1
  • Schedule Parsing: We built the /api/upload route to send schedule images directly to the Gemini API, which structures the raw text into clean JSON (day, course code, time, room).
  • Room Availability: We utilized the Nebula API to pull daily events. We wrote a custom filtering algorithm lib/closest-empty-room.js that creates set of occupied rooms for a specified time window, deduces which rooms are empty, and references static coordinate data to find the closest option.
  • Mapping and Routing: We integrated the Concept3D API for UTD map searches and wayfinding, grabbing precise walking durations and dynamically generating map.utdallas.edu URLs.
  • Data Storage and AI: We used MongoDB to cache map directions (saving API calls) and to store chat history for the Gemini-powered AI assistant. We also integrated ElevenLabs for text-to-speech capabilities.
  • Authentication and User State: We implemented a custom email and password login system using NextAuth.js (v4). User data is stored in MongoDB, with passwords securely hashed using bcrypt (10 rounds). We manage sessions via JWTs and built a seamless LoginModal with react-hot-toast notifications. We also fully developed the protected API routes ('api/schedule/save and /api/schedule/get' to handle cloud persistence for user schedules.

Challenges we ran into

Handling the spatial and temporal logic for the "Closest Empty Room" feature was incredibly tricky. We had to fetch the day's events, accurately calculate overlapping time blocks to build the set of occupied rooms, and then map those available rooms to a completely different dataset of building coordinates to calculate physical distance. Reconciling the data structures between Nebula's event schemas and Concept3D's mapping nodes required a lot of trial and error on the backend.

Accomplishments that we're proud of

One part we are really proud of the schedule upload pipeline. Taking a messy, unstructured image of a schedule and having it instantly fill a beautiful timeline with accurate walking segments and personalized study room suggestions feels like magic.

What we learned

We learned a ton about chaining multiple complex APIs together. Relying on LLMs (Gemini) for data structuring is incredibly powerful, but it requires writing highly specific prompts to ensure the JSON output is perfectly predictable for the frontend. We also got a crash course in working with university-specific infrastructure like the Nebula API.

What's next for CampusNav

Right now, the app is a powerful web dashboard, but campus navigation is inherently mobile. We'd love to adapt the frontend into a native mobile app. We also want to expand the map integrations to highlight active club events or hackathons happening in the buildings you're walking past, turning the app from just a scheduling tool into a full campus discovery platform.

Built With

Share this project:

Updates

Submission history