Back to projects

Featured Project · Senior Design

RideMatch

RideMatch is a completed prototype that replaces automatic driver assignment with a rider-controlled, preference-based matching experience. Riders can browse compatible available drivers and choose who they request rather than receiving an automatic assignment.

FlutterDartPythonFlaskMySQLStripe
Prototype complete · In active development View Code on GitHub
RideMatch Rider dashboard
RideMatch login screen
RideMatch swipe-based driver selection screen

Project walkthrough

See RideMatch in Action

Having trouble viewing the video? Watch it on YouTube

Overview

A More Personal and Transparent Rideshare Experience

RideMatch is a multi-interface rideshare prototype created by a three-person engineering senior-design team. Its purpose is to make rides more personalized and transparent by allowing riders to choose among compatible available drivers instead of receiving an automatic assignment.

The team delivered separate Rider and Driver Flutter applications, a browser-based Flask administrative portal, shared Python services, and a MySQL database. The working prototype has been tested locally and demonstrates the product concept across its connected, role-based workflows.

Although the senior-design prototype is complete, my work on RideMatch is continuing. Our team continues to gather feedback from potential users, use those insights to guide improvements, and prepare the application for deployment. Production readiness will also require additional work across hosting, security, privacy, payments, mapping, monitoring, and broader device testing.

RideMatch replaces automatic driver assignment with a rider-controlled, preference-based matching experience.

My role

My Role: Team Lead and Full-Stack Developer

RideMatch was a collaborative three-person project with responsibilities rotating across the Rider, Driver, Admin, backend, and database components. As team lead, I coordinated tasks, development progress, documentation, and the GitHub workflow while contributing directly to implementation.

My primary technical work included the administrative web panel, preference-based matching rules, ride-flow support, event logging, testing, debugging, and final system integration.

  • Established and maintained the team’s GitHub workflow
  • Coordinated project tasks, meetings, and development progress
  • Built basic administrative dashbaord
  • Implemented driver review, approval, and denial workflows
  • Contributed to rider-driver matching rules
  • Supported ride-request and ride-progression flows
  • Added event logging and supported automated and end-to-end testing
  • Contributed to documentation, debugging, and final integration

Core experience

From Account Creation to a Completed Ride

  1. 1A rider or driver creates an account and signs in.
  2. 2A new driver passes the administrative review workflow before activation.
  3. 3A rider selects pickup and destination locations.
  4. 4The system finds approved, available drivers using location and ride criteria.
  5. 5Preference-based matching compares rider priorities with driver characteristics and shared preferences.
  6. 6The rider browses drivers with a swipe-based interface.
  7. 7A selected driver receives the request and can accept or decline it.
  8. 8An accepted request moves through the ride lifecycle.
  9. 9Completed rides are saved to history and can support ratings, reviews, payments, and tips.
  10. 10Administrators can monitor accounts, driver applications, trip activity, reviews, analytics, and platform settings.

Key features

Preference-Based Matching Across Three Roles

  • Rider-controlled driver selection
  • Swipe-based driver browsing
  • Prioritized ride-preference categories
  • Shared-preference and recommendation indicators
  • Pickup and destination search
  • Current-location and map support
  • Driver availability and request dispatch
  • Ride-request response window
  • Role-based Rider, Driver, and Admin access
  • Driver verification and approval
  • Ride lifecycle and trip history
  • Rider and driver ratings
  • Driver earnings, fares, and tips
  • Administrative analytics and settings
  • Authentication and protected routes
  • Event logging
  • Automated and cross-client testing

Mapping, location, payments, notifications, and real-time communication depend on local configuration or third-party test services; the prototype does not claim production reliability for those integrations.

Architecture

Role-Specific Clients, Shared Platform Logic

Rider Flutter App

Pickup and destination planning, ride preferences, driver browsing, requests, trip progress, history, and feedback.

Driver Flutter App

Availability, ride-request responses, lifecycle updates, rider communication, ratings, fares, tips, and income views.

Shared Python Services

REST-style APIs and Socket.IO events connect mobile clients to matching, trip, payment, and communication logic.

MySQL Database

Shared relational data for accounts, verification, preferences, rides, ratings, payments, and administrative activity.

Flask Admin Portal

Protected browser interface for driver review, accounts, analytics, platform settings, and oversight.

Engineering process

Iterating from Low-Fidelity Designs to a Connected Prototype

01 · Two-week Agile sprints
02 · Recurring team meetings
03 · GitHub branches, pull requests, issues, and task tracking
04 · Low-fidelity UI designs
05 · Learning Flutter during development
06 · Iterative mobile, API, and database integration
07 · Manual tests and cross-client scenarios
08 · pytest and Flutter widget testing
09 · Refinement based on constraints and feedback

Product screens

Rider and Driver Workflows

RideMatch Rider dashboard
The rider dashboard provides quick access to the rider experience.
RideMatch ride request screen
The ride request flow lets riders enter trip details and request a driver.
RideMatch swipe-based driver selection screen
Riders browse and compare available drivers through the swipe-based matching experience.
RideMatch driver dispatch screen
Drivers receive trip details and respond to incoming ride requests.
RideMatch chat between a rider and driver
In-app chat helps riders and drivers communicate during a trip.
RideMatch payment screen
The payment screen completes the rider workflow after the trip.

Challenges and learning

Building Across Mobile, Web, API, and Data Layers

Learning Flutter While Building

The team learned mobile development and Flutter while delivering functional Rider and Driver experiences, requiring focused research, experimentation, and iteration.

Coordinating Shared State

Rider, Driver, Admin, API, and database components needed consistent rules for matching, requests, ride progression, ratings, payments, and account state.

Scoping a Production-Scale Idea

The team balanced the original concept with the time, cost, privacy, security, third-party service, and deployment constraints of a senior-design prototype.

The project strengthened my full-stack integration, mobile development, relational-data, testing, technical-leadership, project-coordination, and role-based system-design skills.

Limitations and future work

From Successful Prototype to Production Service

RideMatch met its senior-design goal as a completed working prototype. We are currently working on deploying it as a real rideshare service which would require:

  • Cloud hosting and production database infrastructure
  • Secure secret and environment management
  • More extensive privacy and security review
  • Production-grade mapping and real-time location services
  • Hardened payment workflows
  • Broader device and platform testing
  • iOS and Android app-store deployment
  • Monitoring, scalability, and operational support

Completed senior-design prototype

Explore the RideMatch code