Yugo

Inspiration

College students constantly need rides to the airport, grocery stores, parties, other campuses, but existing rideshare apps like Uber and Lyft are expensive and connect you with strangers. We wanted to build something that keeps it within the college community: ride with people who go to your school, verified by their .edu email and driver's license.

What It Does

Yugo is a college-only rideshare platform where students post ride offers and ride requests and get matched with each other.

As a passenger, you post where you're going, when you're available, and how much luggage you have. If you're a woman, you can filter to only match with female drivers.

As a driver, you post your route, how many seats you have, and your pickup radius. You can accept or reject interested passengers.

When a match happens, a private group chat is automatically created between the driver and passenger. A built-in GasBot powered by Gemini AI instantly calculates and explains the fair gas cost split so there's no awkward money conversation.

The For You feed uses Gemini AI to semantically rank posts by relevance so "BOS Logan" and "Boston Airport" are understood as the same destination, and your feed shows the most relevant rides first.

How We Built It

Layer Stack
Backend Python, FastAPI, Uvicorn
Database MongoDB Atlas, Motor (async driver)
Auth JWT, bcrypt
Frontend React 19, Vite, Tailwind CSS, Framer Motion
Real-time Socket.IO
AI Google Gemini 2.0 Flash
Maps Google Maps API, Google Distance Matrix API
Infrastructure Docker, Docker Compose

Challenges We Ran Into

  • Making the AI feed ranking fast enough to not slow down the feed we added a rule-based fallback so the feed always loads even if Gemini times out.
  • Designing the chat room lifecycle rooms needed to automatically expire after the ride date without any cron jobs. We solved this with MongoDB TTL indexes, which delete documents at a set expiry date natively.
  • Keeping the real-time WebSocket and the REST API in sync when messages arrive coordinating Socket.IO events with React Query cache invalidation.

What We Learned

  • How to structure a production-ready async FastAPI backend with proper lifespan management and startup indexes
  • How to use MongoDB TTL indexes as a replacement for scheduled cleanup jobs
  • Integrating multiple external APIs (Gemini, Google Maps, ID Analyzer, Resend) cleanly within a single async Python backend

Built With

Share this project:

Updates