← Back to projects
Product & SaaSAI & Automation

Carnier Studio

An AI sales platform for car dealerships: a multi-tenant dashboard on top of the store’s inventory system, a public storefront fed by it and a Python worker for research, blog automation and 360° photos. It answers buyers 24/7 without making things up, turns stock into content and flags the cars that are standing still.

Carnier Studio
Type
Product & SaaS · AI & Automation
Stack
SaaSNext.jsSupabasePythonOpenAI

The result in one sentence

A premium used-car dealership that relied on listing portals, an agency and a salesperson awake at 11 pm now has a website that answers buyers on its own, a blog that writes itself for every new car and a dashboard that shows how much money is sitting on the lot.

  • Client: Garage 665, a premium and armored used-car dealership, now the first customer of a product built for many stores
    • My role: product, UX, frontend, backend, AI, infrastructure and deployment of all three systems
      • Timeline: storefront live in March 2026; the Studio started in May and has kept evolving since
        • Key result: a single vehicle record feeds the website, the AI chat, the blog, the social posts and the inventory analysis

        The context

        Premium car dealerships live on trust and turnover. A R$ 400k armored SUV sitting 30 extra days is expensive, and a wrong answer about accident history or armor level is even more expensive. Garage 665 sold well, but everything that happened after a car was registered depended on someone remembering to do it.

        The problem

        The inventory lived in the store's management system (AutoCerto), and only there. The website showed "Armored: Y" and a generic options list that did not fit high-end cars. Buyers asked questions on WhatsApp at night and nobody answered. Instagram depended on whoever had time. And nobody could say, without a spreadsheet, how many cars were past 90 days or whether a price was above market (the official FIPE table ignores armoring).

        A generic chatbot was not an option: at a car dealership, an AI that makes something up becomes a legal problem. An agency was not either: it does not know today's stock.

        The approach

        • Discovery: I started from the owner's brief and the questions buyers actually asked on WhatsApp. They became the data model: a store layer (trade-ins, financing, inspection policy), a per-vehicle layer (history, services, armor, condition) and a model layer that the AI researches on its own and reuses across identical cars.
          • Do not replace the store's system: the Studio sits on top of AutoCerto. A car is entered once in the tool the team already uses and shows up on the site and in the dashboard. No double entry, no new routine.
            • An AI that does not invent, by architecture: the chat answers only from the car's data, the salesperson's form and the model research. When it does not know, it says a consultant will confirm and the question lands in a queue in the dashboard. Form suggestions always show the excerpt from the listing that supports them; anything not written is discarded.
              • Multi-tenant from day one: the owner already planned to sell the product to other stores, so tenants, per-store settings and white-label went into the foundation, not into a later rewrite.

              The solution

              Three systems that talk to each other.

              The store website. A Next.js storefront with live stock from the AutoCerto API, vehicle pages with 360° interior photos, a full armor section, comparison, a financing simulator and an AI chat for each car. Banners, colors, contacts and the simulator are controlled from the dashboard and update the site instantly. Carnier Studio login screen Carnier Studio. The store's dashboard. A 7-step vehicle profile pre-filled from the store's system, chat conversations with search and filters, an "unanswered questions" list that turns into stored answers (so the assistant gets better every week), a blog that drafts a post for every new car in stock, a social art generator for Instagram and Facebook in the store's brand, and inventory analysis with capital tied up per age bracket and prices compared against FIPE and similar listings found by AI, including the same armor level. Carnier Studio dashboard with Google performance metrics The Python worker. A FastAPI service with its own scheduler that scans the inventory every hour, drafts blog posts, reruns market research every week, syncs ads and converts fisheye shots from 360° cameras into equirectangular panoramas with FFmpeg. Carnier architecture: public website, Studio, Python API and AI workflows

              Under the hood

              Next.js 16 (App Router, Server Components) and React 19 on both fronts, Tailwind v4 with a custom design system in the dashboard, Supabase (Postgres, Auth, Storage) with per-store data isolation, and a containerized Python/FastAPI worker. Model research runs in two steps: a web search with citations, then extraction into a strict JSON schema with no tools, so the final data cannot be hallucinated. The chat goes through moderation and per-visitor and per-IP rate limits. AutoCerto stock is cached with tag-based revalidation; Studio enrichment is joined by license plate and fails silently, so if the Studio goes down the site loses the extras, never the inventory. When the store's system reissued every vehicle ID, I mapped the old codes and the site answers 308 to the new URL, keeping the SEO. Observability with PostHog, including AI costs and responses.

              Results

              • One record, entered once, powers the website, chat, blog, social art and inventory health checks
                • 24/7 answers with each car's real data and a safe path when the AI does not know
                  • An automatic blog draft for every car that enters the stock, linked to live inventory
                    • The owner sees in seconds how much capital is tied up and which cars are above market
                      • The product measures its own impact: the Results tab compares cars worked in the Studio against the rest

                      What I take from this project

                      "The AI does not make things up" is not guaranteed by a prompt, it is guaranteed by architecture: separate facts from generation, cite the source of every suggestion and turn "I don't know" into useful data for the store. That is what let a dealership owner trust a bot with their customers.

Facing a similar challenge?

Tell me what you need to build, whether it is a product, an automation, or an AI system, and I will show you the shortest path to production.

More projects