Morning dispatch board for your local delivery runs
Open one board each morning, drop today's orders onto the right drivers, and send out every route with the stops already in the fastest order.
Build me a morning dispatch board for our local delivery runs. Whoever is dispatching opens it at the start of the day, sees every order that needs delivering on a map, assigns them across our drivers, and sends each driver a route. Today that person rebuilds the same spreadsheet every morning, so the whole point is that the board holds the roster, the assignments and the routes itself.
The main screen is a map on one side and a driver roster on the other. Load today's open, unfulfilled Shopify orders with List Orders (filter to open status and unfulfilled fulfillment status, and scope to today), and use Get Order when someone opens a single stop and needs the full line items, customer name, phone and delivery notes. Turn each order's shipping address into coordinates with Mapbox Batch Geocode (v6), which takes up to 1000 queries in one request, so the whole morning's orders geocode in a single call. Send the addresses as structured input (address line, city, region, postcode, country) rather than one free text blob, since that geocodes far more reliably. Remember that Mapbox returns and expects coordinates as longitude then latitude, not the other way round. Store each order's resolved coordinates in the app so a re-open of the board does not re-geocode the same addresses, and surface anything that failed to geocode in an Unmapped list the dispatcher can fix by hand rather than letting it vanish.
The app stores the driver roster itself, since this does not live in Shopify. Each driver has a name, a start address, a maximum number of stops per run, and the Slack user to message. Geocode each driver's start address once when it is saved and keep the coordinates. Let the dispatcher add, edit and deactivate drivers, and let them mark a driver as out today so the board skips them without deleting them.
An Assign button builds the day. Call Mapbox Get Distance Matrix with the active drivers' start points as sources and the geocoded orders as destinations, then give each order to the driver with the shortest driving time to it. Respect each driver's stop cap: once a driver is full, the next nearest driver takes the order, and anything that fits nowhere goes into a Tomorrow column on the board rather than being silently dropped. The dispatcher must always be able to see what did not fit. Where orders carry a requested delivery window, keep stops with tighter windows ahead of open-ended ones and flag any run where the windows look impossible to hit.
Once orders are clustered onto drivers, work out the order of stops within each run using Mapbox Get Optimization (V1), starting from the driver's start point. Optimization V1 only accepts 2 to 12 waypoints, so a run longer than that has to be split into consecutive legs of 12 or fewer and optimized leg by leg, with each leg starting where the previous one ended. Then call Get Directions across the ordered stops for the total drive time, the route geometry and the turn by turn steps. Directions accepts up to 25 waypoints, so where a longer run only needs the total time and the shape of the route, it can cover the run in one call. Make it a setting whether drivers return to the depot at the end or simply finish at their last stop, since that changes how the route is built.
Each driver gets a printable manifest card: the driver's name, the ordered list of stops with customer name, address, phone, order number and any delivery notes, the total drive time and distance, the turn by turn directions, and a Mapbox Get Static Map Image showing the route line with numbered markers on each stop. The card needs to print cleanly on one page per driver, because these get handed over on paper.
The dispatcher can drag an order from one driver to another. When they do, only the two affected runs rebuild: re-run the optimization and directions for the driver who lost the stop and the driver who gained it, refresh their drive times and manifest maps, and leave every other run untouched. Warn, but do not block, if a drop pushes a driver past their stop cap.
A Send runs button posts each driver their own ordered stop list through Slack Bot Send a Message, opening a direct message with Open a Conversation where needed. The message lists the stops in order with addresses and any delivery notes, plus the total drive time. Show on the board which runs have been sent and when, so nobody sends the same run twice.
Marking a stop delivered closes the loop in Shopify. Call List Fulfillment Orders for that order, then Create Fulfillment against the merchant managed fulfillment order with customer notification turned on, so the buyer gets their shipping notification without anyone opening the Shopify admin. Update the stop on the board to delivered with a timestamp, show each run's progress as stops are completed, and if the fulfillment call fails, keep the stop in an errored state with the reason visible and let the dispatcher retry rather than losing the delivery.
Keep the board readable at a glance: unassigned orders in one column, a column per driver, the Tomorrow column for overflow, and colour coded pins on the map matching each driver. A refresh control should re-pull orders during the day and add any new ones as unassigned without disturbing runs that have already been sent.
What does this prompt do?
- Pulls today's unshipped orders out of your store and puts every delivery address on a live map, so you stop rebuilding the same dispatch spreadsheet every morning.
- Keeps your own driver list inside the app: name, where each driver starts the day, and how many stops they can realistically handle.
- Assigns every order to the closest driver by real driving time, then puts each driver's stops in the fastest order and works out the total time behind the wheel.
- Gives each driver a printable manifest card with a map of their route, sends them their stop list in Slack, and marks the customer's order as shipped the moment a stop is delivered.
What do I need to use this?
- A Shopify store login, with permission to read orders and create shipments
- A Mapbox account for the maps, addresses, and driving times
- A Slack workspace where your drivers can be messaged
- Your driver list: each person's name, the address they start their day from, and their maximum stops per run
How can I customize it?
- Change the stop cap per driver, or set a different cap per person for vans versus bikes
- Decide whether drivers finish back at the depot or simply end at their last stop
- Adjust how the board picks a driver, for example weighting the closest driver against who has the lightest load
- Choose whether the customer gets an automatic shipping notification when a stop is marked delivered
FAQs
Do I have to assign every order by hand?
What happens if we get more orders than the drivers can handle?
Can I move an order to a different driver after the board is built?
Does the customer still get their shipping email?
What if a driver has a very long run?
Can drivers get their stops on their phone?
Related templates
Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.
Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.
One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.
Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.
Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.
See the exact hours your chat queue backs up and customers give up waiting, then plan next week's shifts before it happens again.
Stop rebuilding the same dispatch spreadsheet every morning.
Build the day's delivery runs on one board, then send every driver a route that is already in the fastest order.