One place for leads, deals, calls and the map.
AHA’s first data platform: the CRM in Postgres, deals on a map, and instant answers to number questions.
- Role
- Lead developer (13 of 16 commits). Built with Claude Code
- When
- Apr – Sep 2026
- Built with
- Node.js · Supabase / Postgres · Zoho CRM API · Claude API · Google Maps · GitHub Actions
- Where
- AHA Smart Homes
How it helped AHA
- An honest ROASReturn on ad spend was being read from an abandoned spend table. It now comes from Meta’s own figures.
- What buyers really askQuestions mined from every sales call became a video shot-list for marketing and the starting prompts for AHA’s AI-search tracking.
- The base for what came nextThe showroom deals map was forked from it, and the marketing warehouse began as a copy of its BI layer.
The problem
- The CRM had no coordinates and no clean building names.
- Nobody knew what buyers asked on sales calls, or whether AI assistants mentioned AHA.
- Asking an LLM every number question was slow, cost money every time, and was sometimes wrong.
What I did
- A nightly sync: 25 chained steps, 16 of which can fail without stopping the run, and 28 quality checks after each one. Read →
- A security pass before rollout: row-level security, four roles and expiring links to call recordings.
- CRM to map: recovered 633 of 711 missing addresses, plus 93 more from plan PDFs.
- Listening to every call: Claude pulls buyer questions out of sales calls and flags weak answers. Read →
- AI-search tracking: 31 buyer questions asked with AHA’s name removed, and content briefs where AHA is missing. Read →
- An ads agent: weekly recommendations that grade last week’s advice, with a person approving each one. Read →
- A BI router: SQL answers number questions instantly; Claude only explains the “why”. Read →
- A screen for each team: a 24-panel growth dashboard, demo intelligence, loss analysis, ROAS by ad creative and a company-wide CRM calendar.
Results
Answers in under 1 s, advisor warnings cut from 25 to 4 before rollout, and 93% of quality checks passing across 30 logged runs.