You Don't Have to Be Amazon to Have Logistics Tech
We built route planning software for a non-profit cat shop doing 40 deliveries a day. Here's how it works, and why small operations shouldn't settle for manual routing.
Adoptamiu is a non-profit cat shop in Peru, specialized entirely in cats. They do 20-40 deliveries a day, use a mix of bikes and cars, and pay their delivery partners per kilometer.
Before we got involved, their routing process looked like this:
- Manually check each order and grab client info
- Look up addresses, verify they’re correct
- Try to figure out a decent route (without actually optimizing total distance)
- Realize last minute that a bike can’t carry that much weight
- Scramble to reorganize
It worked. But it was slow, error-prone, and left money on the table every single day.
So we built them a small web app that handles the whole thing. Here’s how it works now.
The Workflow
Step 1: Select Orders and Vehicles
Users pull in the day’s orders and specify what vehicles are available. Maybe two bikes and a car. Maybe just bikes today.
The system runs in “smart mode” by default. It uses the minimum number of vehicles needed to get everything delivered within the time window, while respecting constraints. No point paying for a car route if two bike runs handle it.
Step 2: Review and Adjust Routes
The system generates optimized routes per vehicle. But here’s the key: it’s not a black box.
Users can:
-
Move stops between routes - Maybe you have three bike routes at 24kg, 24kg, and 5kg. But realistically, bikes can handle a bit over 25kg. So you override it to 26.5kg and 26.5kg across two routes instead of three. That’s real savings.
-
Prioritize specific stops - Refrigerated products? Priority customer? Drag that stop to the front of the queue. Human judgment matters.
-
See everything clearly - Each route shows total KM, estimated cost, all stops in order, and the constraints being applied.
Step 3: Generate and Send
One click generates:
- Google Maps URL with the full route, ready to open
- WhatsApp message with client names, phone numbers, addresses, and districts, formatted and ready to paste for delivery partner
The delivery person gets everything they need without anyone typing it out manually.
The Technical Bits
A few things that made this work.
Client Data Syncs from Bsale
All clients get pulled via API with pagination, stored in Google Sheets as the central database. A background script keeps it updated while preserving verified addresses.
We could’ve used Postgres or another proper database. But Google Sheets means they can see and interpret the data easily if they need an address for another use case. Right tool for the job.
Address Verification
Peruvian addresses are inconsistent. There are at least 4 streets with the same name in Lima (thanks to the genius city planners).
The system auto-geocodes addresses using the Google Maps Geocoding API, but marks the coordinates as unverified initially. When users select a client for the first time, they see the currently set coordinates on a map. If it looks correct, they hit verify. If it needs adjustment, they move the pin and save.
Progressively, more and more addresses got verified until the verification step became rare. Around 4,000 unique addresses handled so far.
Handling Google Maps Limits
Google Maps has a 10-waypoint limit. So we split longer routes into “Part 1” and “Part 2” when necessary. The system handles this automatically.
Weight Constraints
Bikes can carry ~25kg. Cars handle 300kg easily. The routing algorithm respects these limits and factors in order weights pulled directly from Bsale.
Before vs. After
• Routes "optimized" by gut feel
• Weight issues caught last minute
• Copy-pasting client info by hand
• ~45 min daily on routing alone
• Actual distance optimization (per-km savings)
• Weight constraints built into route generation
• One-click WhatsApp messages
• ~10 min daily, including review
The Point
This is a non-profit cat shop. Not a logistics company. Not a startup with funding. Just a small operation trying to get cat food to people efficiently.
They didn’t need a massive enterprise system. They needed something that:
- Pulled their existing data automatically
- Optimized routes with real constraints
- Let humans override when needed
- Made the output immediately usable
That’s it. And it’s running on Google Sheets, a simple web frontend, and a few API integrations.
This isn’t a project that takes weeks. It can be done in under 72 hours, with a few days of trial and error to add extra features.
You don’t need to be big to have good logistics. You just need the right tool for your scale. No machine learning, no AI—just software that does exactly what’s needed.
Written by
Eduardo Chavez
Director, Costanera