The problem
The way most Indian logistics companies find a truck for a shipment hasn't changed in 30 years: you call your vendors, one by one.
That's how the road freight operator was running their business. A new shipment would come in. The office team would start dialling truck owners they knew. They'd negotiate the price over the phone, often three or four times with three or four vendors, until somebody said yes. The "winning" vendor wasn't necessarily the cheapest, or the fastest, or the best — it was usually whoever picked up first.
The pain points were everywhere:
- Time wasted on phone calls. A single shipment could eat 30–60 minutes of back-and-forth before a truck was confirmed.
- No price discovery. The owner had no idea if he was getting a fair rate. Maybe a vendor an hour away would have done the job for ₹3,000 less, but he never knew that vendor existed.
- Lost shipments. Sometimes nobody could be reached in time. The shipment got delayed or cancelled.
- Vendor frustration. Truck owners who wanted the work weren't seeing it. They were waiting for a phone call that didn't come.
- Payment confusion. Once a trip was done, "where's my money?" calls flooded the office for days. Was the advance paid? Was the balance done? What was the bank reference?
- No accountability trail. Who took which shipment, at what price, and when? Mostly in someone's head.
The owner wanted a marketplace. Post a shipment once. Let qualified vendors bid for it. Pick the best one. Track it from pickup to delivery to payment — all in one place. And let the truck owners actually see what's happening with their money.
He also had one non-negotiable: it had to talk to the office system (TMS). No double-entry. No reconciling two databases at the end of the month.
The approach
We designed the vendor bidding app as three surfaces, one source of truth:
- A mobile app for truck owners — installable on Android and iPhone, simple enough that a driver who's never used a smartphone app for work can figure it out
- A mobile app for the admin team — for the people who post shipments, watch bids, pick winners, and pay vendors. Built for in-the-field use because the admin team isn't always at a desk
- A back-end brain — running in the cloud, doing all the matching, notifying, scheduling, and money-tracking, and sharing its data directly with the office system (TMS) so the two never disagree
The key design insight: instant. Every action had to update everyone, immediately. If a vendor places a bid, the admin sees it. If the admin picks a winner, the winning vendor knows within a second. If a shipment gets posted, every matching vendor gets a notification on their phone. If a trip status changes, every screen showing that trip refreshes itself.
We also built automatic deadlines into the bidding. A shipment doesn't sit open forever — every bid has a closing time, and when it hits, the system automatically moves the bid into the next stage. Nothing relies on someone remembering to "close it manually."
What we built
Vendor onboarding done right
- Sign up by phone number → OTP verification (no passwords to forget)
- Upload 10 different document types: Aadhaar, PAN, office photo, cancelled cheque, visiting card, driving license, vehicle RC, insurance, pollution certificate, business license
- Each document gets reviewed by the admin team — accept or reject with a reason
- Vendors can re-submit rejected documents (we tracked the full rejection history so the conversation is never lost)
- Terms and conditions versioning — when the legal terms change, vendors are asked to accept the new version before they can bid again
- Approval workflow — until a vendor is approved, they can browse but not bid
The bidding flow
- Admin creates a shipment with all the details: pickup, drop (with map coordinates), cargo, weight, vehicle type, number of vehicles, base price, payment type (advance or to-pay), bidding deadline, and a timer
- The shipment can be saved as a draft and published later
- Once published, every approved vendor matching the criteria gets a push notification on their phone
- Vendors see the shipment, can place a bid (with their price, vehicle, comments)
- Admin sees all bids in real time, sorted by price, with each vendor's rating and trip history visible
- Admin picks a winner with one tap
- Winning vendor gets notified instantly — losing vendors also get notified that the bid is closed
- Bids can be cancelled with a reason if circumstances change — or completed early if a great offer comes in before the deadline
Smart status logic
We built in clear, visual status indicators so nobody is ever confused about where a bid stands:
- Draft — being prepared, not visible to vendors
- Upcoming — published but not yet open for bidding (scheduled to start later)
- Live — open for bidding right now
- Closing soon — final minutes
- Completed — bidding is done, ready to assign
- Assigned — winner picked, trip created
- Cancelled — bid was pulled
The system handles all the transitions automatically — admins don't have to manually open and close anything.
The trip workflow (after the bid is won)
The trip moves through clear stages:
- Open — trip just created, vendor needs to send vehicle details
- Pending — vendor has entered vehicle and driver info, waiting for admin to approve
- Approved — admin has reviewed and approved the vehicle
- Complete (at source) — truck has arrived at the pickup point
- In transit — goods loaded, on the road
- Delivered — arrived at destination
- Completed — final payment done, trip closed
Every status change is logged with a timestamp and the user who made it — full accountability trail.
The vendor wallet
This is the part vendors love. Every vendor gets a wallet inside the app showing:
- Current balance
- Every credit and debit, in chronological order
- For each transaction: which shipment, which trip, the type (advance or balance), the amount, and the bank transaction reference (UTR)
- The same UTR appears in both the admin's view and the vendor's view, so there's no confusion about whether a payment went through
Vendors stopped calling the office to ask about payments. The information is just there.
Real-time everything
We built the system so that every important event — a new bid posted, a bid placed, a winner selected, a payment made, a trip status change — pushes updates to every connected user instantly. No refreshing the screen. No waiting. The admin app and vendor app feel alive.
Notifications that actually work
Push notifications for:
- New shipment available (sent to matching vendors)
- Your bid was selected as the winner
- Your bid was rejected
- Vehicle information needs approval
- Trip status changed
- Payment received
- Document approved or rejected
- New version of terms and conditions
Notifications work even when the app is closed or the phone is in someone's pocket.
Documents and compliance
- Vendor KYC document storage with full status tracking
- Terms and conditions versioning with acceptance history
- Trip-level proof of delivery uploads
- Audit log of every status change on every trip
Built to be resilient
- Background jobs that automatically close bids when the deadline hits
- Automatic distance calculations between pickup and drop points
- Crash-safe handling of network drops on mobile (the app remembers where you were and recovers)
- Graceful handling of common edge cases: what if two vendors bid the same amount? What if a vendor's documents expire mid-trip? What if the admin loses signal while approving a vehicle?
The hard part — and how we solved it
The really interesting engineering on this project wasn't building one mobile app, or even two. It was making three completely separate surfaces — vendor mobile, admin mobile, office system — all feel like one product.
Here's the trap most teams fall into when building a marketplace: each surface ends up with its own copy of the data. The vendor app has a vendor list. The admin app has a vendor list. The office system has a vendor list. They all kind of match, but every few days something drifts. A vendor's bank account changes in one place, not the others. A trip price gets updated on one side, not the other. The owner ends up not trusting any of them.
We made one decision early that prevented all of this: the data lives in one place, and every surface looks at that same place.
In practice that means:
- A vendor's profile, documents, and bank details are stored once. Both the vendor's own app and the admin app read from the same record. If anything updates, everyone sees the new version immediately.
- Locations (cities, addresses, lat/long coordinates) live in one shared catalogue. Both the vendor bidding app and the office system use them.
- Admin login credentials are shared between the office system and the admin mobile app — same username, same password, no separate accounts to manage.
- Trip prices flow exactly once: vendor bids ₹23,000 → admin selects them → ₹23,000 becomes the trip's official price → that same number flows into the office system's Lorry Receipt → that same number flows into the payment voucher. Nobody types it twice. Nobody can mistype it.
- Bank transaction references (UTRs) entered when paying an advance flow into the vendor's wallet, into the trip record, and into the office system's payment voucher — all from one entry.
The result: three different apps, used by three different groups of people, that never disagree with each other. A truck owner in his cab, an admin in the field, and the office team back at HQ are all looking at the same truth.
The other hard part was making all of it feel instant. A real marketplace feels alive. A bid posted now is visible now. A winner picked now is communicated now. We built the system so every important event pushes updates to every connected user immediately. No refreshing. No waiting. No "let me check if there's a new bid." This is what makes vendors actually open the app every day.
The outcome
- Live in production — running real shipments, real bids, real vendor payments
- Three surfaces working as one product — vendor mobile app, admin mobile app, and the office system all share one source of truth
- From phone calls to a marketplace — the operator stopped finding trucks one phone call at a time. They post a shipment, vendors bid, the best offer wins.
- Vendors stopped calling the office to ask "where's my money?" — every payment, with bank reference, is visible to them in their wallet
- Real-time everything — no refreshing, no waiting, no asking around
- Full audit trail — every bid, every status change, every payment is logged with who, what, when
- Zero double-entry between the vendor bidding app and the office system — vendors, locations, trip prices, and payments all flow automatically
The big-picture outcome: a logistics business that used to depend on a handful of people remembering things now runs on a system that doesn't forget. The owner can step away for a week and the operation keeps going — vendors keep bidding, trips keep happening, payments keep flowing.
Finish reading — and take the PDF.
Drop your details to unlock the rest of Road Freight Vendor-Bidding App (Coimbatore) on this page and download the full write-up as a PDF.