Smart carpooling for college students
Rydr is a schedule-aware carpooling app that connects students heading to the same classes and destinations. Save money, reduce your carbon footprint, and build community—one ride at a time.
- Upload your course schedule (PDF) and automatically match with drivers going to the same classes
- Smart location matching using Google Maps API
- See rides filtered by your class locations and times
- Post rides with real-time location autocomplete
- Search for rides by destination
- Filter by time, price, parking pass availability, and recurring schedules (MWF/TTh)
- Only
.eduemail addresses can sign up for verified student safety
- Coordinate pickup spots and timing directly with drivers
- Real-time messaging powered by Firebase
- Book rides with one tap—seats automatically update
- Miles carpooled counter on your profile
- See your environmental and financial savings
- View upcoming and offered rides in one place
- Frontend: React Native (Expo)
- Backend: Node.js + Express (PDF parser)
- Database: Firebase (Auth + Firestore)
- APIs: Google Maps (Geocoding, Places Autocomplete, Distance Matrix)
- Chat: Firebase Realtime +
react-native-gifted-chat
- Node.js (v18+)
- npm or yarn
- Expo CLI
- Firebase project
- Google Maps API key
-
Clone the repository
git clone https://github.com/yourusername/rydr.git cd rydr -
Install dependencies
npm install
-
Set up environment variables
Create a
.envfile in the root directory:# Firebase EXPO_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id EXPO_PUBLIC_FIREBASE_APP_ID=your_app_id EXPO_PUBLIC_FIREBASE_MEASUREMENT_ID=your_measurement_id # Google Maps EXPO_PUBLIC_GOOGLE_MAPS_API_KEY=your_google_maps_api_key # Backend (use your local IP for physical devices) EXPO_PUBLIC_SCHEDULE_API_URL=http://192.168.x.x:4000/parse-schedule
-
Start the backend parser server
node backend/parser-server.js
The server will listen on
http://localhost:4000 -
Start the Expo app
npx expo start
-
Run on device/simulator
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go for physical device
- Press
- Sign up with your
.eduemail - Upload your course schedule (PDF) during signup
- Navigate to "Ride to Class" to see rides matching your classes
- Or use "Find a Ride" to search by destination
- Tap a ride → Chat with the driver → Confirm your seat
- View your upcoming rides in "My Rides"
- Go to "Offer Ride"
- Enter start/end locations (with autocomplete suggestions)
- Set time, price, max seats, and optional recurring schedule
- Your ride appears to students with matching destinations
- Chat with riders and manage your rides in "My Rides"
rydr/
├── app/ # Expo Router pages
│ ├── pages/
│ │ ├── signin-signup.tsx # Authentication
│ │ ├── HomeScreen.tsx # Main dashboard
│ │ ├── OfferRide.tsx # Post a ride
│ │ ├── FindRide.tsx # Search rides by destination
│ │ ├── RideToClass.tsx # Schedule-based ride matching
│ │ ├── RideChat.tsx # Chat & booking
│ │ ├── MyRides.tsx # View your rides
│ │ └── Profile.tsx # User profile & stats
│ ├── _layout.tsx
│ └── index.tsx
├── backend/
│ ├── parser-server.js # Express server for PDF parsing
│ └── parseSchedule.js # PDF text extraction logic
├── lib/
│ ├── geocode-utils.ts # Google Maps utilities
│ └── location-cache.ts # Location caching
├── firebaseConfig.ts # Firebase initialization
├── .env # Environment variables (not tracked)
└── package.json
- Create a Firebase project at console.firebase.google.com
- Enable Authentication (Email/Password)
- Enable Firestore Database
- Add your Firebase config to
.env
- Create a project at console.cloud.google.com
- Enable these APIs:
- Geocoding API
- Places API
- Distance Matrix API
- Create an API key and add to
.env
users/
{uid}/
- name: string
- email: string
- phone: string
- parsedSchedule: object
- milesCarpooled: number
bookings/
{rideId}/
- startLocation: string
- endLocation: string
- time: timestamp
- pricePerSeat: number
- status: "upcoming" | "completed"
rideOffered/
{rideId}/
- driverId: string
- startLocation: string
- endLocation: string
- startPlaceId: string (Google Maps)
- endPlaceId: string (Google Maps)
- time: timestamp
- recurring: "none" | "MWF" | "TTh"
- parkingPass: boolean
- pricePerSeat: number
- maxSeats: number
- remainingSeats: number
- confirmedRiders: string[]
messages/
{messageId}/
- text: string
- senderId: string
- senderName: string
- createdAt: timestamp
- system: boolean
- Dark theme with purple accent (#7C3AED) for modern, readable UI
- Minimal friction: Sign up → Upload schedule → Find rides in < 2 minutes
- Safety first:
.eduverification ensures student-only community - Smart matching: Google Maps normalization handles "Morgridge" vs "Morgridge Hall"
If 100 students carpool 10 miles/week:
- 💰 Save ~$40-80/month per student on gas + parking
- 🌱 Reduce ~520 lbs CO₂ emissions per week
- 🚗 Free up ~150 parking spots on campus
- Push notifications for ride reminders
- Driver ratings & reviews
- Recurring ride automation (auto-post weekly rides)
- Parking pass sharing integration
- Multi-campus support
- In-app payment processing
Built at MadHacks 2025 by DevSync
This project is licensed under the MIT License.
- Expo for the amazing React Native framework
- Firebase for backend infrastructure
- Google Maps for location services
- MadHacks for the hackathon opportunity
- UW-Madison students for testing and feedback
Ready to ride smarter? Let's carpool! 🚗💨