Inspiration
Our team wanted to tackle a real problem that everyone can relate to, and one that goes beyond any single issue: UCF parking. Finding an eligible garage, knowing where there’s space, and remembering where you parked are frustrations everyone shares. Without a clear source of answers, students and staff are forced to just guess and hope that there is an open spot.
This particular issue stuck with us because it's a daily frustration for nearly every student and staff member, which makes it the perfect place to start. The current garage capacity tracking on myUCF isn’t always accurate, since it only counts the cars entering and leaving each garage. We set out to improve on that by finding a way to detect whether each individual space is occupied, giving drivers a more accurate picture of garage capacity. As a result, we built Parkour to make campus parking more organized and accessible for everyone, help drivers find an eligible garage near their destination, understand availability, and remember where they parked.
What it does
WATCH HARDWARE FUNCTIONALITY VIDEO HERE: link
- Smart recommendations: Pick a campus destination and get permit-aware garage suggestions (Student or Employee) based on walking distance, availability, and time.
- Live spot availability: See individual spaces by floor, updated as spots fill or free up. If your spot gets taken, the app reassigns you a new one.
- Parking essentials: Quick access to UCF permit, parking rule, and parking service information, so students know where to find official answers.
- Save My Spot / Find My Car: Confirm where you parked and easily get back to it later.
- AI and voice assistant: Ask parking questions by text (Gemini) or hands-free by voice (ElevenLabs), which helps drivers and others who need extra accessibility support.
- Light and dark mode across the whole app: Makes the app easier to use based on the user's preferences
How we built it
Work Split
Each teammate worked on one part of the stack and merged through feature branches and pull requests.
- Design and app front end: One teammate designed the app in Figma first, then rebuilt it in Expo and React Native. It runs on phones through Expo Go and in the browser on web. They also built the Save My Spot flow, the Parking Essentials page, the Gemini chat interface, app-wide light and dark mode, and a settings screen.
- Backend and data: One teammate built the Flask backend, the in-memory spot store, the recommendation engine that scores garages by permit, walk time and open spots, authorized sensor updates, and the Arduino serial bridge. They also built the Google Places destination search.
- Voice and accessibility: One teammate built the ElevenLabs voice assistant, including a server-side text-to-speech endpoint with throttling, so the voice key never ships in the app. They also unified the project into one repo, prepared the backend for public demo hosting, and connected the app to the hosted API.
- Live parking and integration: One teammate built the spot simulator that drives the live demo, connected the garage screen to live backend spots, and added the logic that reassigns your slot if your spot is taken.
Across the Stack
- AI: Gemini turns free-text questions into destinations and explains results in plain language, but our scoring logic makes the actual decision, so the AI never invents availability.
- Security: The app never talks to Gemini or ElevenLabs directly. It calls our backend, which keeps the keys in server-side environment variables, so users never see or have access to them.
Challenges we ran into
- Merging features: We had to learn how to build everything in parallel (voice, chat, live data, dark mode) without interfering with what other team members are doing.
- Syncing: Keeping the garage view in sync with the backend, including what happens when a user's chosen spot is taken by someone else.
- Keeping the AI honest: Occasionally it would lie about spot availability and where the closest garage was if it didn't know. We ended up limiting Gemini to language tasks and fed it only verified facts, with fallbacks if it fails.
- Scoping: We wanted to use computer vision to record multiple parking spots, but our raspberry pi was faulty, so we had to improvise and switch to an Arduino kit using an HC-SR04 sensor that detects if something is within a certain distance. Because of this we are only able to track one spot at a time, whereas a camera would be able to track multiple spots at once.
- API: We learned to keep API keys secret. Instead of storing Gemini keys in local files or on GitHub, the app talks to our backend, which holds the keys in server-side environment variables, so users never have access to them.
What's next for parkour.
- Predictive software that's able to tell you a good spot based on factors like time, how many people are at another spot, and whether a spot is usually taken there.
- Instead of using an hc sr04 sensor, utilizing a camera that's capable of viewing multiple parking spots.
- Problem reporting so that users can report issues like blocked spaces, broken lights or signs, debris and violations, with the garage and floor attached, and the problems reach the people who can fix them instead of going unmentioned.
- Show user report status, notify when something they reported is fixed, and route reports to campus facilities or parking services.
Built With
- arduino
- c/c++
- css
- eleven-labs-api
- expo.io
- figma
- flask
- gemini-api
- google-cloud-places-api
- html
- javascript
- python
- react-native
- typescript
Log in or sign up for Devpost to join the conversation.