Courier AI

Inspiration

Delivery couriers make rapid decisions all day: accept an order, skip it, take a break, reroute after rain, or avoid an unsafe destination. Most delivery platforms optimize for assigning orders, but the courier still needs to understand whether a specific order is safe, feasible, and worth accepting.

We wanted to build an assistant that looks beyond the immediate payout. Courier AI considers the courier’s current workload, vehicle, time remaining in the shift, route feasibility, safety constraints, and the expected value of the destination zone.

Our goal was to answer a simple but important question:

Is this order actually a good decision for the courier right now?

What it does

Courier AI is a decision-support simulator for last-mile delivery couriers in Monterrey, Mexico.

For every incoming order, the system returns either ACCEPT or SKIP, along with:

  • A human-readable reason.
  • The binding safety constraint when one applies.
  • Estimated economics.
  • Decision latency.
  • A complete audit record that can be replayed later.

The system supports three vehicle profiles:

  • Moto
  • Car
  • Bike

Each vehicle changes travel estimates, operating costs, weight limits, and volume limits.

How we built it

We built the backend with Python, FastAPI, Pydantic, and Uvicorn. The frontend uses React, TypeScript, and Vite.

The system consumes a deterministic order stream generated from a seed. This means the same seed reproduces the same delivery shift, making Smart and the baseline comparable under identical conditions.

The decision pipeline is:

Order + courier state
        ↓
Route and ETA estimation
        ↓
Hard safety constraints
        ↓
Economics and opportunity cost
        ↓
Future destination value
        ↓
ACCEPT or SKIP
        ↓
Decision log, explanation, and replay

Built With

Share this project:

Updates

Submission history