Inspiration

UMBC students waste time searching for open seats. AOK Library fills up fast. ITE fills up. Engineering fills up. You end up on the floor outside Sherman Hall. The problem is not that free rooms don't exist. The problem is you have no way to know which ones are open right now without walking to each building. SeatSniper AI solves that.

What We Built

SeatSniper AI is a real-time study spot finder for UMBC. It pulls the actual course schedule from a local JSON file and cross-references it against every classroom and study room on campus. The app knows, minute by minute, whether a room has a class in it.

Students flag spots as "claimed" using a session ID, no login required. Claims expire automatically so the data stays accurate. The map on the right is a live OpenStreetMap view of campus. Click any card and the map jumps to that building and drops a pin. Useful when you don't know where Sondheim Hall is.

Where Gemini Comes In

The course schedule is dense: hundreds of building codes, room numbers, time slots, and day patterns. No student parses that in their head to find the best spot for a 90-minute gap between CMSC 341 and MATH 251.

We use Gemini 2.0 Flash for two things:

1. Natural language spot search: type something like "quiet room near Engineering for 2 hours" into the search bar. Gemini reads the current availability context, including noise levels, capacities, and free-until times, then returns 2 to 3 ranked recommendations with a plain-English reason for each. It reasons about proximity, noise preference, and time constraints rather than filtering by keyword.

2. "Plan My Day" gap optimizer: paste your weekly class schedule in plain text (e.g. "CMSC 341 MWF 10-10:50, MATH 251 TuTh 1-2:15"). Gemini parses the schedule, identifies every gap longer than 30 minutes across the full week, and recommends the closest available study spot to your surrounding classes so you're not walking across campus between a chemistry lecture and a biology lab.

Without Gemini, both of these features would require either a rigid form UI (pick building, pick noise level, and pick duration) or a full NLP pipeline that we'd have to build from scratch. Gemini lets us skip all of that and just talk to the data.

How We Built It

  • Scraped UMBC's public course schedule into a JSON file with building, room, days, and start/end times.
  • Built a pure-CSS availability engine that computes spot status in real time with no server needed.
  • Firebase Realtime Database handles live claimed bookings, and updates push to all open tabs instantly.
  • React + Vite for the frontend, styled to feel like Airbnb
  • Leaflet + OpenStreetMap power the campus map using exact GPS coordinates from the official UMBC campus map.
  • Gemini 2.0 Flash via the @google/generative-ai SDK for the search and plan features

Challenges

The hardest part was the availability engine. UMBC's schedule uses day codes like MWF, TuTh, M, F. Rooms can have multiple sections back-to-back with 10-minute gaps. Getting the "free until" calculation right (accounting for back-to-back classes, the 10:30 PM closing time, and crowdsourced reports aging out after 30 minutes) took most of the build time.

The second challenge was making Gemini's output reliable. It returns JSON, but the schema has to be tight or it hallucinates field names. We ended up specifying responseMimeType: 'application/json' and giving it a strict example schema in the prompt.

Share this project:

Updates