Logistics
FleetSetu
The question was 'how do we optimise the fleet report'. The answer was a product.
- 2 daysfrom one question to a working proof of concept
- 30–40 s → under 1 sper update after the move to Firebase
- ~50 ha month of report-making the app now does itself
The question was “how do we optimise the fleet report”. The answer turned out to be a product.
Chapter 1 · The question
One question in a meeting.
Every day the own-fleet team met to review which vehicles were down, which were free for a load, and which were about to unload. The meeting ran on reports, and the reports ran on people.
The company had a transport management system. It was built for fleet hired from the market, where the crucial data is rates and vendors. The company's own vehicles were an afterthought in it. So the own-fleet team did what every team does with a system that was not built for them: they used it as a formality.
Daily fleet review
- Non-operational vehicles
- Free for a load
- Reaching an unloading point
Chapter 2 · Sitting in the room
Everyone used the TMS. Nobody used only the TMS.
I joined the daily meetings as a silent member for a while, then ran process interviews with each team: how do you do this today, and how would you want it to be easier?
- The real work lived in spreadsheets saved locally. The TMS was updated afterwards, for monitoring and a few automations.
- Almost every report came from one file, the Daily Shipment Report. Each was built by hand. Some took an hour and a half to two hours a day.
- Tracking was reactive by design. Today's statuses were discussed tomorrow.
The tracking sheet itself was the hidden cost.
One workbook, one tab per day. By month end: 27 tabs, one person who knows where everything is.
What people said
“[quote] What the tracking team said about the sheet in the first interview.”
“[quote] What the planning team said about finding out a day late.”
“[quote] What accounts said about the client snapshot.”
Quotes are paraphrased from the interviews; real lines to follow.
Chapter 3 · One thing first
Daily tracking, before anything else.
If the tracking lived in a system, every report downstream could be generated. If it did not, nothing else would matter.
The first version ran on Google Apps Script with Google Sheets as the database. Free to host, quick to deploy, a database the team already understood, email automation built in, sign-in restricted to the company domain with no setup. It also had a ceiling: however much you optimise the script and the sheet, every interaction carries a 30 to 40 second lag, and retrieval slows as the data grows.
Apps Script and Sheets
0.0s
every read, write or update
Firebase
0.0s
same action, after the rebuild
Chapter 4 · What fixing it was worth
Three things, written down before building further.
- Report-making, automated~50 h / month
An hour and a half to two hours a day of hand-built reports, now generated by the app and emailed on their own.
- Time per update30–40 s → under 1 s
The move to Firebase. Shown live in chapter three.
- Consolidated viewson demand
Any cross-team view the team needs later is a query, not an afternoon in a spreadsheet.
Because the tracking data was now live, the planning team could see which vehicles needed a plan as it happened, rather than the next morning. And since planning creates the trips that tracking then follows, I built the trip module and the tracking module together.
Chapter 5 · What the product does
A sheet goes in. A board comes out.
Drag the handle. The left is how the data lived. The right is how it lives now.
Then the rebuild: the same product on Firebase Hosting, Auth and Firestore, with role and fleet access enforced in database rules and a deploy pipeline through GitHub Actions because the client laptop allows nothing to be installed. The whole fleet was on it within a week.
Chapter 6 · The part nobody puts in a case study
The team resisted. Then we measured it.
First instinct: it takes more time. After it clearly worked: it still takes more time.
Entering tracking and trip details in the app took the same time as filling the local spreadsheet, and the trip details were supposed to be entered by a different team anyway.
Take feedback from the doers, but do not rely on it blindly. Every team resists change, and the way work is reviewed has to change along with the tool. If the review still accepts the offline spreadsheet, the offline spreadsheet wins.
Why the name
Setu means bridge. The app bridges the information gap between the teams and leadership, and over time the adoption gap between the own-fleet teams and the company-wide TMS they were meant to use all along.
What I did
- Sat in the meetings, ran the interviews, designed the flow.
- Built the application single-handedly with Claude Code, Google Workspace and Firebase.
- Shipped a running proof of concept in two days, on nothing more than the question.
- Tested every feature with the users and kept the version they actually used.
- Ran QA on every release and turned user error reports into the next build.
Roadmap, each phase behind a gate