Skip to content
Back to projects

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.

My role
Proposed and built end to end, on my own
Period
2025–2026 · Hunt Sales
Status
shipped
Stack
GPT-4o mini · WhatsApp · Supabase · PostgreSQL · Supabase Auth · JavaScript · Tailwind CSS
The full flow in 32 s, no sound, on-screen text in Portuguese. Illustrative example with real dashboard screens; client names blurred.

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.

agent · in-store sales assistantillustrative example

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

  1. supabase · aplicacoes60 Ah · standard
  2. 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.

Hover a highlighted term to see the field it fills.

Two conversations

Reconstructed from real tests of the agent on WhatsApp, with names and prices changed. The agent talks in Portuguese; these are translations.

Scenario 1 · vehicle foundillustrative example
  1. Customer:Good evening, I need a battery. Which models do you have?
  2. Agent:Hi! This is the store's virtual assistant. To help you, what's your name?
  3. Customer:Leonardo
  4. Agent:Thanks, Leonardo! Which city are you in?
  5. Customer:Jacareí
  6. Agent:Do you already know the battery's amperage, or would you like me to check it from your vehicle's model and year?
  7. Customer:I think it's 60, but better check. 2010 Corsa Maxx.
  8. Agent:Let's check! Does your 2010 Corsa Maxx have a manual or automatic transmission?
  9. Customer:Manual
  10. Agent:And does it have a start-stop system? (yes or no)
  11. Customer:No
  12. Agent:

    Here are the options for your 2010 Corsa Maxx (60 Ah):

    1. Brand A 60 Ah · 24-month warranty · upfront R$ 4XX.00 · in installments R$ 4XX.00
    2. Brand B 60 Ah · 18-month warranty · upfront R$ 4XX.00 · in installments R$ 4XX.00
    3. 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?

  13. Customer:Brand A, please.
Scenario 2 · unknown vehicleillustrative example
  1. Customer:Hi! I need a battery. Kombi 1.4 Flex, how much is it?
  2. Agent:To help you, I just need to know your Kombi's year and whether it has a manual or automatic transmission.
  3. Customer:Manual. 2007.
  4. Agent:One last thing: does it have a start-stop system?
  5. Customer:No
  6. 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.
  7. behind the scenes
    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.

  1. 01Customer on WhatsAppAsks for a battery
  2. 02AI agentCollects name, city, model, year, transmission and start-stop
  3. 03Supabase queryaplicacoes → active baterias
  4. 04Options and orderBrand, warranty, upfront and installment price
    or
  5. 05Unknown carLogs it in veiculos_sugeridos and hands over to the team
Customer service: from message to answer.
  1. 01“IA Sugere” queueCars the agent couldn't find, with a link to the conversation
  2. 02“+ Cadastrar”Form already filled in with what the AI collected
  3. 03Salesperson completes itAmperage, type and case size
  4. 04Fitment savedThe suggestion leaves the queue and the agent now knows the car
Dashboard: the unknown car becomes a catalog entry.

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

The dashboard in 11 s, no sound: catalog → fitments → IA Sugere → prefilled form. Interface in Portuguese.
  • 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.
Batteries tab of the dashboard: batteries grouped by amperage, with search, brand and amperage filters and Edit, Pause and Delete buttons.
Catalog grouped by amperage (prices blurred).
Fitments tab: one card per vehicle with year range, transmission, recommended amperage and type, case size and a start-stop tag.
Compatibility table by vehicle.
IA Sugere tab: pending cards for vehicles identified by the agent, with year, transmission and the See chat and Add buttons.
The “IA Sugere” queue (client names blurred).
New fitment form with model, transmission, year and start-stop already filled in and the battery spec fields still empty.
Form prefilled by the AI; the salesperson completes the battery.

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.

trade-offFor 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.

trade-offEvery 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.

trade-offWith 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.