People keep asking me what tools I use. Not in the vague "what AI do you like" way. They want the actual stack. What logs in. What clicks what. What happens at 6:30 AM before I'm out of bed.
Fair enough. I've written about automating my morning report and clearing 790 CRM tasks with AI, but I haven't laid out the full system in one place. The whole thing. Every layer, every tool, how they connect.
This is the production stack running right now at a Kia store doing 200+ units a month in San Antonio. Not a proof of concept. Not a demo. This runs every single day.
The Architecture (Simple Version)
A Mac Mini sits at my house running 24/7. That's the server. It runs an AI assistant I built called AIDEN that connects to VinSolutions, vAuto, kDealer, Google Sheets, and a few other systems through browser automation.
No APIs. VinSolutions doesn't give you an API unless you're a vendor partner paying six figures. So the system opens a real Chrome browser, logs in with real credentials, and navigates the same screens I would. Clicks the same buttons. Reads the same dashboards. Exports the same CSVs.
If that sounds hacky, I get it. But it works. And it works because dealership software wasn't built for automation. It was built for humans clicking through screens. So that's what my system does. It just does it at 6:15 AM while I'm asleep.
Layer 1: Browser Automation (Playwright)
Playwright is an open-source tool from Microsoft that controls a web browser programmatically. Same thing Selenium does, but faster and more reliable. It's what QA engineers use to test web apps. I use it to log into VinSolutions.
The browser stays open in a persistent session. Same Chrome profile every time, so cookies persist, sessions stay alive longer, and I'm not re-authenticating every single run. When a session does expire (kDealer loves to do this at random), the system handles re-login automatically.
What Playwright does in my stack:
- Logs into VinSolutions and navigates to the activity dashboard, task list, and showroom visit log
- Exports CSV data from vAuto (inventory aging, stock counts, pricing)
- Pulls NPS scores and survey counts from kDealer's BoostCX portal
- Reads the Google Sheets desk log for deal data
- Clicks through individual CRM tasks to read customer context before deciding what to do with them
Each of those is a separate automation script. They share the same browser instance but run independently. If the vAuto pull fails, the morning report still generates with what it has. Nothing blocks everything else.
Layer 2: The AI Brain (Claude)
Playwright collects raw data. Claude makes sense of it.
The AI layer reads the scraped data, cross-references it, and decides what matters. It's not just formatting numbers into a PDF. It's reasoning about them.
Example from last Tuesday. The morning report showed 6 ups on Monday, 2 sold. Normally that's a 33% close rate, which is fine. But the AI flagged that 3 of the 4 unsold customers had no T/O logged. That's not a close rate problem. That's a process problem. Three customers walked without seeing a manager.
I wouldn't have caught that scanning a spreadsheet at 7 AM. The AI caught it because I told it to look for exactly that pattern.
The same reasoning applies to CRM tasks. When the system reads a task, it doesn't just check the task type. It checks the customer's last activity date, whether they responded to the last outreach, whether the assigned rep still works here, and whether there's a duplicate task for the same customer. Then it decides: auto-clear, re-engage, or flag for me.
That decision tree didn't come from a textbook. I built it from watching myself sort through tasks for months. Every rule maps to something I was already doing manually. The AI just does it without getting bored or skipping one because it's 8:47 AM and the first customer just walked in.
Layer 3: Data Storage (Supabase)
Every morning's numbers go into a database. Units sold, gross, close rate, showroom traffic, NPS, aged inventory count. Every single day.
This matters more than people think. When Brian asks me "how's March pacing?" I don't pull up a spreadsheet. I query the database. "We're at 89 new through the 14th, pacing to 191. Need 11 more than pace to hit 200. Gross is pacing to $580K, which is $20K short of target."
I can answer that in 10 seconds because the data is structured and stored, not scattered across five browser tabs.
Supabase is free for this use case. It's an open-source Postgres database with a simple API. I'm storing maybe 50 rows a month. It'll be free forever at this volume.
Layer 4: Notifications (Telegram)
Everything surfaces through Telegram. Morning report PDF. Task summary. Deal alerts. Calendar reminders. If something needs my attention, it shows up in one place.
Why Telegram and not text messages or email? Two reasons. First, it's free and has a bot API that takes 5 minutes to set up. Second, it keeps work notifications separate from my actual text messages. When I see a Telegram notification, I know it's AIDEN. I can check it when I'm ready instead of having it mixed in with everything else.
The task manager sends a summary like this every morning:
"10 tasks auto-cleared. 7 re-engagement texts sent. 2 need your attention: Joel has a finance callback pending on the Gonzalez deal, and Blanca's customer from Saturday never got a follow-up."
Two items. That's my to-do list from a system that had 50+ open tasks. I can act on both before the morning meeting starts.
Layer 5: Scheduling (Cron Jobs)
Everything runs on a schedule. The morning report fires at 6:15 AM. Task manager runs at 6:30. Save-a-deal prep builds at 7:00. An end-of-day summary runs at 6 PM.
These are cron jobs. Timed triggers that say "run this script at this time." Nothing fancy. The Mac Mini is always on, always connected, and the jobs fire whether I'm awake or not.
On Mondays, an extra job runs: content batch generation for social media. On Fridays, it checks content metrics. The system adapts to the day of the week because different days need different things.
If a job fails (VinSolutions is down, Chrome crashes, session expired), I get a Telegram alert about that too. Most of the time it self-recovers. When it doesn't, I SSH into the Mini from my phone and restart whatever broke. Takes 30 seconds.
What a Typical Day Looks Like
6:15 AM. Morning report runs. Playwright opens VinSolutions, vAuto, kDealer. Pulls yesterday's metrics. Claude reads everything, writes the report, generates the PDF. Stores numbers in Supabase. Sends PDF to my phone via Telegram. I haven't woken up yet.
6:30 AM. Task manager runs. Reads every open CRM task. Auto-clears the noise. Sends re-engagement texts to stale leads. Flags the real ones. Summary hits Telegram.
7:00 AM. Save-a-deal prep runs. Pulls yesterday's showroom visits, categorizes unsold customers, flags missing T/Os. PDF ready for the 9 AM meeting.
7:30 AM. My alarm goes off. I check Telegram while making coffee. Read the morning report. Glance at the 2-3 flagged tasks. Know exactly what to cover in the meeting. I haven't opened a laptop yet.
8:30 AM. I walk in with more context about yesterday's business than anyone else in the building. Not because I worked harder. Because the system worked while I slept.
The Cost
I'm going to be honest about this because every vendor tool for dealerships starts at $1,000/month and goes up from there.
- Claude (AI) $20/month
- Mac Mini already owned (any old Mac or Linux box works)
- Playwright free, open source
- Supabase free tier
- Telegram bot free
- GitHub Pages (site hosting) free
Total: $20/month. Call it $240 a year.
I recovered $9,800 in gross from re-engagement texts alone last month. The math isn't even close.
What I'd Tell You Before You Build This
This didn't happen overnight. The first version of the morning report was ugly. The task manager miscategorized things for the first week until I tuned the rules. Playwright scripts break when VinSolutions changes their UI, which happens more than you'd think.
But each piece I built freed up time to build the next piece. Morning report saved 30 minutes. I used those 30 minutes to build the task manager. That saved another 25 minutes. Used that time to build the save-a-deal prep. Compound effect.
You don't need to build all of this at once. Start with the morning report framework. Get your numbers automated. Then tackle CRM tasks. Then the meeting prep. Each one stands on its own.
And you don't need to be a programmer. I'm a car guy who learned enough Python to be dangerous. The AI writes most of the code. I just tell it what I need and fix what breaks.
That's the whole stack. No vendor contracts. No $50K platform. A Mac Mini, some open-source tools, and an AI that costs less than a car wash membership.