I shot the cars, so I had the photos, so I became the index. Nobody decided that, it just happened. A salesman would be standing in front of a customer, need the shots of one specific car, and the fastest route to those shots was to text me and wait.
So: "send me the red Roma shots." "You have pics of the black Urus?" "Customer waiting, need the Wraith shots now." I'd stop whatever I was editing, work out which car was meant, find the chassis number, dig the folder out of storage, and forward twenty images one at a time. Twenty minutes later somebody else would ask for the same car.
It never stopped. It didn't keep office hours. And it meant the marketing team's actual job happened in the gaps between other people's requests. Two minutes each, thirty times a day, chopped into pieces too small to do anything else with. The context-switch tax was worse than the task.
The matching against live inventory runs in code, not in the model - so the photos are always the right car and never a confident guess.
The obvious fix is a shared drive, and we tried versions of it. It never holds. Salesmen are selling, not filing, and nobody is going to scroll four hundred folders named by chassis number while a customer is watching them do it. The interface for finding a car was a person, because a person could take "the white GT, low km one" and turn it into an exact car. A folder can't.
So the problem was never storage. It was translation. And translation is a thing you can hand to software, as long as you're careful about which half you hand over.
Where the model is allowed to think
The bot lives on a WhatsApp number and does nothing else. It listens only to whitelisted sales contacts and ignores everyone else, including me.
Claude reads the request in whatever form it arrives - "the white GT, low km one", "black on black Urus", "the base Cayenne we got last week" - and pulls out what the person is actually after: make, model, trim, colour, interior, a rough sense of year and mileage. That is the fuzzy, human part, and a language model is genuinely good at it.
Then it stops. The model doesn't get to remember what's in stock, and it doesn't get to decide a car exists. The matching runs in plain code against live inventory, pulled from a secret-gated endpoint on the dealership's own site, so the bot is reading exactly the same rows the public listings render from. Even the loose words resolve to numbers: under about 100km is delivery mileage, so the car is genuinely new, and anything above it is used. Nothing stays fuzzy once the intent is out.
One match and the photos go. Several matches and it sends a numbered list rather than picking. A mix of live and sold cars and it asks which you meant. Nothing at all and it says so, instead of inventing something plausible. Every set of images that leaves is tied to a real chassis number on a real car.
The small things that decide whether people use it
It greets people by name, and not with the same sentence every time. It remembers the thread, so "what's the price?" and "how many kilometres?" mean something without repeating the car. When a car belongs to another salesman it says so, with a bit of a dig about it, which is roughly how that conversation goes in person anyway.
Photos arrive behind a caption: title, exterior colour, interior, regional spec, and the last five of the chassis. Then a three-second gap, then the images. The chassis digits are in there because that's the thing a salesman checks to be certain he's about to send a customer the right car.
The images themselves go out paced a second apart. Send them in a burst and WhatsApp delivers the last few with corrupt tails - which doesn't read as a rate limit to anyone, it reads as a broken bot.
The bug that cost the most time was the dullest one. WhatsApp hands you two identifiers for the same person, and the one that carries their phone number isn't the one you reply to. Match the whitelist against the wrong field and the bot silently ignores the entire sales team while working perfectly in every test.
Tested before it met anybody
There are 43 tests behind it, and it was built and tested before it ever touched the sales team - because the failure that matters here isn't the bot being slow, it's the bot being confidently wrong while a customer waits on the other side of the conversation.
It was also built to move. It started on my laptop and was architected to run on always-on hardware without a rewrite, which it now does, under a process manager that restarts it if it ever falls over.
It handles ten to twenty of these a day now. The marketing team handles none.
The part I didn't expect is that its answers are more correct than mine were. I'd occasionally send shots of a car that had sold that morning, because I didn't have the floor in my head in real time. The bot reads inventory on every request. It can't send you a car that isn't there. And a customer asking "do you have it in white" now gets the answer and the proof before the conversation cools off, which is the actual point - not that I got an hour back, but that the showroom got quicker at the moment quickness pays.
