Alexandra Vozár

Leeway

Leeway is a mobile app that takes the guesswork out of paratransit. It predicts whether a ride will arrive in time for an appointment, and when it won’t, it calls ahead to reschedule on the rider’s behalf.

The idea came from a teammate’s former boss, who lives with primary progressive multiple sclerosis and uses a specialized wheelchair. Paratransit is essential for getting him to appointments, but its unpredictability means building in hours of buffer or paying far more for a less accessible Uber, a burden shared by him and his caretaker.

TypeHackathon, Cal Hacks 13.0 DisciplineProduct design TeamDarian T, L-T-B Bischof, Jonas B LinksDevpost, GitHub
Problem

The Americans with Disabilities Act requires transit agencies to offer paratransit to people who can’t use fixed-route transit. The service exists, but it is hard to rely on. East Bay Paratransit can only be booked by phone, and a ride counts as on time as long as the van arrives within 30 minutes of the booking window. Even so, 5% arrive later than that, and drivers wait only five minutes before leaving.

For someone riding to and from work each day, that means a wait of more than half an hour roughly every other week.

Solution

Leeway recommends booking windows based on historical ride data and books the ride by phone using Cartesia’s voice agent. During the trip, it predicts live how likely the rider is to arrive on time. If the ride falls behind, it calls the appointment to ask about rescheduling, so the rider waiting at the curb doesn’t have to.

Time of day, location and trip history predict whether the rider will make the appointment.
The prediction updates live, here after a detour to pick up another rider.
If the ride is running too late, Leeway offers to move the appointment.
A Cartesia voice agent calls to move the appointment.
Leeway reports back on the result of the call.
Arrival.
Research

We read forums and public discussions and ran street interviews. Two priorities came out of them:

—Less waiting and fewer phone calls. Leeway suggests how early to book, and calls ahead when a van runs late.—Control stays with the rider. People worried about AI acting on its own and handling their personal data, so Leeway asks before every consequential step.

We wireframed in Claude Design, starting broad and narrowing to the key screens of a single user flow. After several rounds of feedback from street interviews, the design files went to Claude Code to build the front-end prototype.

Design

The design aimed to reduce cognitive load, take action proactively and preserve the rider’s agency.

—Minimal graphics and a clear hierarchy centred on the likelihood of arriving on time and the options available if a delay occurs.—Proactive help that anticipates problems and acts on the rider’s behalf, asking for consent before consequential decisions.—Continuous, transparent updates on what Leeway did, the outcome and what happens next.—Visible AI actions, call transcripts and a conversational assistant with chat history.—When the chance of arriving on time drops below a set threshold, Leeway explores alternatives and asks for approval before booking another ride.

We aimed for WCAG 2.2 AAA conformance where feasible. Next steps include adjustable text size, voice input and control, colour-vision preferences and stronger screen-reader support, validated with real riders and caregivers.

Prediction

Leeway estimates arrival as the start of the booking window plus two uncertain parts: how late the van picks the rider up, and how long the ride takes.

arrival = booking_start + pickup_delay + travel_time
Pickup delay, with no previous rides

For a new rider, the best estimate is how trips behave in general. East Bay Paratransit publishes how many pickups fall within or past the booking window:

MetricJul ’25–Apr ’26On time94.7%1–20 minutes past window4.42%21–59 minutes past window0.79%60+ minutes past window0.06%

We model the delay as a shifted log-normal distribution and fit its parameters to those shares, fixing the shift at −5 minutes to allow for early pickups.

Delay curve fitted to the on-time and late shares.

Time of day makes a big difference, since a van caught in rush hour is more likely to be late. East Bay doesn’t publish delays by hour, but New York’s transit authority does. Our hypothesis: when New York’s system runs later than usual, East Bay’s does too. We shift the mean delay by New York’s hourly lateness, then refit so the overall shares still match East Bay’s figures.

Pickups at 5 pm run later than the all-day average.

New York reports one value per hour, but riders book at any minute, so the points need a smooth curve through them. A polynomial swung wildly between them (Runge’s phenomenon), so we settled on a cubic spline. We didn’t smooth the points further, since each hourly value already rests on 30,000 to 2 million trips.

A polynomial swinging between the hourly points.
Pickup delay, with previous trips

Once a rider has taken a few trips, their actual pickup times sharpen the estimate. We add two personal offsets: one that follows the rider everywhere (perhaps their building is hard to find) and one per recurring trip (perhaps the Tuesday dialysis ride is always rough). Both start at zero, and a trip only counts by how much it surprised us. Fifteen minutes late is normal at 5 pm, but not at 10 am.

—Older trips count less. Each trip loses 10% of its weight per week.—Same-route trips count more. They move both offsets; other trips only move the rider offset.—More trips, more trust. The general estimate acts as a prior, so one late pickup barely moves the offsets, but ten do.

Under the hood this is a Bayesian linear regression, with older trips treated as noisier measurements.

Travel time

Google Maps accounts for traffic, so we use the Google Routes API to estimate drive time. Shared vans pick up and drop off other riders along the way, though, so we scale Google’s estimate by about 2.2. The average East Bay trip is 11.43 miles and takes 48.9 minutes. We sampled 120 trips between BART stations across the service area, weighted them to match that length and got an average Google drive time of 22 minutes: 48.9 ÷ 22 ≈ 2.2.

That covers the average case, but the slow tail matters most, since that is when a rider may need to reschedule. We used New York data again to set the spread.

Example trip from Hayward to Highland Hospital, Oakland (14 mi), at 8 am. It runs toward Oakland with the morning commute, so it is most affected by morning traffic.
Calculating the arrival

The rider is on time if pickup delay plus travel time fits between the start of the booking window and the appointment. There is no closed formula for the sum of the two distributions, so we work one pickup delay at a time: if the van is 15 minutes late, how likely is the ride to fit in the time left? Averaging over 2,000 evenly spaced quantiles is deterministic and takes about a millisecond, so it reruns whenever something changes.

—Still waiting. Delays that are no longer possible drop out, so the probability falls the longer the van doesn’t show.—On board. The pickup delay is known, and only the ride is uncertain.
Future: Waze for paratransit

Every Leeway trip records when the van came and how long the ride took, without saving the exact GPS path. Pooled across riders, anonymised and with consent, that becomes live East Bay data. If vans in Hayward are running late right now, riders waiting there could reschedule before their own van is late.

Simulation

East Bay Paratransit publishes on-time rates per month, not individual rides. To test the predictions, we simulated a full day of service and tuned it until its punctuality matched the published numbers.

—Trips. 7,000 synthetic riders, each with a home in one of 18 neighbourhoods from Richmond to Fremont, a reason to travel (dialysis, medical appointments, senior programmes or errands), a nearby destination and a mobility type that sets how long boarding takes. That comes to about 2,400 one-way trips per weekday, close to what East Bay reports.—Vans. Each request joins the van route it delays least, within a 30-minute pickup window, ride-time limits and driver shifts. Driving times come from real road distances (OSRM).—Delays. Each leg gets log-normal traffic noise, wider at rush hour, plus incidents, hard-to-find addresses, riders who aren’t ready, breakdowns and late shift starts. Each stop starts when the previous one ends, so delays carry down the route. 96% of late pickups came from vans already 15 or more minutes behind: lateness is mostly inherited.
Fleet dashboard replaying a simulated day.

We tuned only one thing, how optimistic the van scheduler is about travel times, using a bisection search until the on-time rate matched. The other figures were left untuned:

MetricSimulation (14 days)EBP (published)On-time pickups94.2%94.7%More than 60 min late0.06%0.06%Rider no-shows2.2%2.6%Van minutes per passenger49.842.0Miles per passenger7.89.8
Voice agents

East Bay Paratransit only takes bookings by phone, and clinics are reached by phone too. When a ride runs late, someone has to call the appointment, usually the rider waiting at the curb. In Leeway, a Cartesia phone agent makes that call, and riders can talk to Leeway instead of typing.

Three phone agents

Built on Cartesia’s Agents API, with Claude Haiku as the language model and one shared voice.

—Policy inquiry. Before booking, asks the appointment how late the rider can arrive and still be seen. That grace period moves the deadline the model predicts against, so Leeway books only as early as needed.—Late notice. When the chance of arriving on time drops below 50%, calls with the estimated arrival and asks whether the rider can still be seen.—Rider message. Passes on a message the rider dictated and brings back the reply.
How a call works
—Dynamic variables fill in the rider, the appointment and the delay, so one agent covers every rider.—Webhook tools return typed results, such as grace minutes or whether the appointment is held, that the app acts on. If the agent hangs up without reporting, Claude Haiku reads the transcript instead.—Live transcripts show the call in the app as it happens.

In the app, riders hold the mic and say what they need. Ink-Whisper transcribes it, and Sonic 3.6 reads Leeway’s reply aloud in the phone agents’ voice.

Responsible calling

Leeway only calls within each trip’s permissions and asks before calling about a delay. The agents say they are automated and share only the rider’s name, the appointment time and the delay. The server dials only approved US and Canada numbers, never real agency lines, and at most four times an hour per number. The East Bay Paratransit booking call is a mock.

← Index Next: API Ambient Display / Moiré