Leads everywhere
Enquiries arrived from Facebook Lead Ads, Google Ads, IndiaMART, the website and chat apps. Each lived in a different inbox or spreadsheet — and some were never called back.
A custom sales CRM for a Bengaluru manufacturer of PUF panels, purlins and roofing sheets. It takes an enquiry from the first ad click all the way to a dispatched order and a received payment — in one app the whole team uses every day.

All screenshots use demo data. Customer names, numbers and bank details are not real.
Enquiries arrived from Facebook Lead Ads, Google Ads, IndiaMART, the website and chat apps. Each lived in a different inbox or spreadsheet — and some were never called back.
Every quotation for sandwich panels, purlins or roofing sheets was calculated and typed manually. Weights, areas, GST and numbering were easy to get wrong.
Management couldn't see who was handling which customer, which leads had gone cold, or what had been promised. Two agents sometimes chased the same buyer.
Agents ask Alex about their leads, follow-ups and quotations in plain language. It runs on the Claude API, called from the CRM's own server so the API key never reaches the browser.
Source, auto-detected city and product, assigned agent, chat shortcuts and read-only lead status.

Editable details, one-tap call / chat / meet, assignment, follow-up and the full notes timeline.

Product specs on the right, a print-ready estimate with GST and amount in words on the left — updating as you type.

Conversion rate, 14-day lead trend and per-agent performance, with CSV and Excel export.

The whole front end ships as a single HTML file. The team deploys an update by uploading one file to shared hosting — no build tools, no servers to manage.
The app computes a delta of what each user changed and sends just that. A server-side lock keeps simultaneous saves from overwriting each other.
Follow-up notes are append-only and de-duplicated by key, so two agents writing at the same moment can never erase each other's history.
With thousands of leads the first sync grew to about 11 MB. Gzipping cut it to roughly 1.85 MB, so the CRM opens quickly even on mobile data.
Agents kept seeing “Changes not saved yet”, even when idle. Server space and plan limits looked fine.
The browser network log showed saves returning 403 from the host's CDN firewall, which treated rapid saves as an attack. Turning the CDN off for the CRM domain fixed it for every agent.
Adding a lead that already belonged to a colleague showed the existing customer in the new agent's list.
The duplicate check now stops the save and names the customer and the agent already handling them. Admins still see everything.
Switching a quote between the two companies changed its ID prefix, and the update was rejected.
Edits keep the original quote number and swap only the company prefix — and the linked job card follows the change.
Every enquiry lands in one place, is checked for duplicates and reaches an agent automatically.
Over 6,000 leads and 27,000 follow-up notes live in a single MySQL database instead of scattered sheets. Quotations, job cards and payments are connected to the lead that started them — management can follow any order from the first call to dispatch.