AI agent + management system
Sales agent and management system for a car battery store
It serves customers on WhatsApp, finds the right battery from the car's model, year, transmission and start-stop, and hands over to a person when it doesn't know. Behind it, the store's catalog dashboard.
- Proposed and built end to end, on my own
- 2025–2026 · Hunt Sales
- shipped
- GPT-4o mini · WhatsApp · Supabase · PostgreSQL · Supabase Auth · JavaScript · Tailwind CSS
30-second summary
- Problem
- A car battery store served customers on WhatsApp, and every order depended on a salesperson figuring out which battery fit which car. The store, a Hunt Sales client, was at risk of cancelling.
- Solution
- An AI agent that collects the vehicle details, queries a fitment database and presents the options, plus the management system that feeds that database. An unknown car becomes a task in the dashboard, not a guess.
- Outcome
- It reversed the client's churn and opened a new kind of product at the company, later replicated for other clients. There was no formal measurement of metrics.
Context and problem
A car battery store, with delivery and installation, served its customers on WhatsApp. Finding the right battery means matching the vehicle's model, year, transmission and start-stop system against amperage, type (standard or EFB) and case size. That knowledge lived in the salespeople's heads, and every order depended on one of them stopping to work it out.
At the same time, the store was an unhappy Hunt Sales client at risk of cancelling.
My role
I proposed the project and ran it on my own. I built the system end to end: the agent flow (starting from a standard company flow, shaped for this case), the database model, the management dashboard, login and authentication, and the deployment on the company's domain.
The dashboard runs embedded in Hunt Sales' customer service platform (CRM), so salespeople use everything in one place. It was the first project of its kind at the company; after it, I became responsible for automations and similar systems for other clients.
How it works
The agent turns the conversation into a database query. First it asks whether the customer already knows the amperage; if not, it collects model, year, transmission and start-stop, which are exactly the keys of the fitment table. In the real conversation it asks for one detail at a time; the demo below packs everything into a single message.
Customer message
do you have a battery for a 2010 corsa maxx, manual, no start-stop?
Tool call
buscar_bateria({modelo: "Corsa Maxx",ano: 2010,cambio: "manual",start_stop: false})
Execution
- supabase · aplicacoes60 Ah · standard
- supabase · baterias (active)3 options
For your 2010 Corsa Maxx (60 Ah), I have 3 options, with 12 to 24 months of warranty. Want to see the prices?
Illustrative example: a customer asks for a battery for their car; the agent extracts model, year, transmission and start-stop, queries the fitment table and the active batteries, and replies with the options. If the vehicle is not on file, it adds the car to the suggestions queue in the dashboard and hands the conversation over to the team.
Two conversations
Reconstructed from real tests of the agent on WhatsApp, with names and prices changed. The agent talks in Portuguese; these are translations.
- Customer:Good evening, I need a battery. Which models do you have?
- Agent:Hi! This is the store's virtual assistant. To help you, what's your name?
- Customer:Leonardo
- Agent:Thanks, Leonardo! Which city are you in?
- Customer:Jacareí
- Agent:Do you already know the battery's amperage, or would you like me to check it from your vehicle's model and year?
- Customer:I think it's 60, but better check. 2010 Corsa Maxx.
- Agent:Let's check! Does your 2010 Corsa Maxx have a manual or automatic transmission?
- Customer:Manual
- Agent:And does it have a start-stop system? (yes or no)
- Customer:No
- Agent:
Here are the options for your 2010 Corsa Maxx (60 Ah):
- Brand A 60 Ah · 24-month warranty · upfront R$ 4XX.00 · in installments R$ 4XX.00
- Brand B 60 Ah · 18-month warranty · upfront R$ 4XX.00 · in installments R$ 4XX.00
- Brand C 60 Ah · 12-month warranty · upfront R$ 3XX.00 · in installments R$ 3XX.00
Delivery is today, with free installation and eco-friendly disposal of the old battery. Would you like to confirm one?
- Customer:Brand A, please.
- Customer:Hi! I need a battery. Kombi 1.4 Flex, how much is it?
- Agent:To help you, I just need to know your Kombi's year and whether it has a manual or automatic transmission.
- Customer:Manual. 2007.
- Agent:One last thing: does it have a start-stop system?
- Customer:No
- Agent:I couldn't find a battery on file for your 2007 Kombi. I'm handing you over to our team, who can help you better. I've passed on all the details and they'll get in touch.
- The 2007 manual Kombi without start-stop joins the “IA Sugere” queue in the dashboard, with a link to this conversation.
Solution and architecture
The key point is that the agent and the dashboard close a loop. Every car the agent doesn't know becomes a task for a salesperson, and every task solved teaches the agent. The knowledge base grows with use.
- Customer on WhatsAppAsks for a battery
- AI agentCollects name, city, model, year, transmission and start-stop
- Supabase queryaplicacoes → active baterias
- Options and orderBrand, warranty, upfront and installment price
- Unknown carLogs it in veiculos_sugeridos and hands over to the team
- “IA Sugere” queueCars the agent couldn't find, with a link to the conversation
- “+ Cadastrar”Form already filled in with what the AI collected
- Salesperson completes itAmperage, type and case size
- Fitment savedThe suggestion leaves the queue and the agent now knows the car
Data model
Table names are in Portuguese, as in the code.
baterias(batteries): brand, amperage, type (standard or EFB), case size, warranty in months, upfront and installment price, active or paused status.aplicacoes(fitments): vehicle model, year range, transmission, start-stop, recommended amperage and battery type, required case size.veiculos_sugeridos(suggested vehicles): model, year, transmission and start-stop collected by the agent, contact name and a link to the conversation.
Management dashboard
- Battery catalog grouped by amperage, with search, brand and amperage filters, pagination, and actions to edit, pause or activate (takes out-of-stock items offline without deleting them) and delete with confirmation.
- Vehicle fitments: the compatibility table, with transmission, recommended amperage, case size and a start-stop highlight.
- IA Sugere (AI suggests): the queue of cars the agent couldn't find during conversations. Each card has “Ver chat”, which opens the original conversation, and “+ Cadastrar” (add).
- Prefilled form: it opens with model, year, transmission and start-stop from the AI. The salesperson only completes the battery spec and saves; the suggestion is resolved automatically.
- Login with Supabase Auth (email and password), a session limited to the browser tab and every page protected.




Stack
- Agent: GPT-4o mini (OpenAI), on Hunt Sales' customer service platform, over WhatsApp.
- Database and authentication: Supabase (PostgreSQL and Auth, with RLS).
- Dashboard: HTML and JavaScript with Tailwind CSS, static, no server of its own. Deployed on the company's domain and embedded in the CRM.
Decisions and trade-offs
A human in the loop for anything uncertain
The agent never guesses a battery for an unknown car: it hands over to the team and creates a pending task in the dashboard. The wrong battery means a lost delivery and a frustrated customer.
For unknown cars, the customer waits for the team instead of getting an instant answer.
The AI collects, the human confirms
The technical part (amperage, type and case) stays with whoever knows the product. The AI saves the typing for the rest: the form arrives filled in with what was said in the conversation.
Every new car still needs someone who knows the product to complete the entry.
Questions in the right order
First, the agent asks whether the customer already knows the amperage. If not, it collects model, year, transmission and start-stop, which are exactly the keys of the fitment table. Each answer becomes a filter in the query.
Pause instead of delete
Every battery has an active or paused status, and the agent only offers active ones. That way the store takes out-of-stock items offline without losing the entry.
A simple, static front-end
HTML and JavaScript on top of Supabase, with no server of its own, so it stays light and easy to deploy on the company's domain.
With no server of its own, data protection relies on authentication and Supabase's access rules.
Outcome
- The client was at risk of cancelling, and the solution reversed the churn.
- Customer service now answers known cases on its own and turns unknown ones into catalog entries.
- It opened a new kind of product at the company: an AI agent integrated with a database and a management interface. With that, the AI actually knows the client's business and is far more useful than a generic chatbot.
There was no formal measurement of metrics, so there are no numbers here.
The same pattern was replicated for an electric vehicle charger company: see the dashboard for electric vehicle chargers.
What I learned
- In applied AI, the value is as much in the system around the model (data, dashboard, handoff) as in the prompt.
- Design for "I don't know" first: the unknown-vehicle path is what made the system reliable.
- The "agent + database + dashboard for humans" pattern is reusable: it worked for batteries and then for EV chargers.

