Home/Work/Metro CRM
Case study · Web application

Metro CRM.

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.

ClientMetro Puf Industries & Delta Infrastructures
IndustryBuilding materials manufacturing
Our roleProduct design, development & deployment
StackJavaScript SPA, PHP, MySQL, Hostinger
Metro CRM · Dashboard
Metro CRM dashboard with lead stage funnel, team filters and today's follow-ups

Dashboard — lead stage funnel, team filters and today's follow-ups at a glance. All screenshots use demo data.

6,000+
Leads managed
27,000+
Follow-up notes stored
20
Modules in one app
83%
Smaller sync payload
The problem

Leads everywhere. Control nowhere.

01

Leads everywhere

Enquiries came from Facebook Lead Ads, Google Ads, IndiaMART, the website and WhatsApp. Each lived in a different inbox or spreadsheet — and some were never called back.

02

Quotes built by hand

Every quotation for sandwich panels, purlins or roofing sheets was calculated and typed manually. Weights, areas, GST and numbering were easy to get wrong.

03

No shared picture

Management couldn't see who handled which customer, which leads had gone cold, or what had been promised. Two agents sometimes chased the same buyer.

The solution

One path from enquiry to payment.

Step 1EnquiryAd, marketplace, website or call
Step 2LeadDe-duplicated and assigned
Step 3Follow-upNotes, reminders, stages
Step 4QuotationCalculated, approved, sent
Step 5Job cardProduction and dispatch
Step 6PaymentReceived and reconciled

Capture

Facebook Lead Ads, Google Ads and IndiaMART pulled in automatically. WordPress forms post straight into the right list. Duplicate check by phone number before saving. Auto-assignment to agents.

Sell

Leads & customers with stages, remarks and full note history. Follow-up reminders and a Stagnant Leads view. Click-to-call, WhatsApp and product photo sharing from any lead.

Quote & build

Quotation builder for PUF panels, purlins and sheets with live preview, area & weight per row, GST and round-off. Approval links, versions, PDFs, job cards, dispatch and payments.

Run the team

Face-recognition attendance and login tracking. Daily reports, dashboards and per-agent performance. Product library for both companies. Role-based access.

Built in

Meet Alex, the AI sales assistant.

Agents ask Alex questions 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.

"Which of my leads haven't been called in 7 days?"
Alex: You have 4 stagnant leads. Two asked for PUF panel quotes last week — want me to list them?
"Yes, and draft a follow-up."
Inside the app

Designed for a team that sells all day.

Key decisions

Engineered to be fast & safe.

One file, zero build step

The whole front end ships as a single HTML file. The client's team deploys an update by uploading one file to shared hosting — no build tools, no servers to manage.

Save only what changed

The app computes a delta of what each user changed and sends just that. A server-side lock stops simultaneous saves overwriting each other.

Notes are never overwritten

Follow-up notes are append-only and de-duplicated by key, so two agents writing at once can never erase each other's history.

Compress the big download

With thousands of leads the initial sync grew to ~11 MB. Gzipping cut it to ~1.85 MB, so the CRM opens quickly even on mobile data.

Hard problems, solved

Bugs that real teams actually hit.

Problem

The banner that wouldn't go away

Agents kept seeing "Changes not saved yet", even when idle. Server space and plan limits looked fine.

The fix

The network log showed save requests returning 403 from the host's CDN, not the app — its firewall treated rapid saves as an attack. Turning the CDN off for the CRM domain fixed it for every agent.

Problem

Duplicate leads leaked customers

When an agent added a lead that already belonged to a colleague, the existing customer appeared in their list.

The fix

The duplicate check now stops the save and shows a clear message naming the customer and the agent already handling them. Admins still see everything.

Problem

A quotation that couldn't be updated

Switching a quote between the two companies changed its ID prefix, and the update was rejected.

The fix

Edits now keep the original quote number and swap only the company prefix — and the linked job card follows the change.

Outcome

Every enquiry, one place.

Every enquiry now 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, so management can follow any order from the first call to dispatch.

What's next
01

Incremental sync — each device downloads only records changed since its last visit

02

Deeper reporting on lead source quality and conversion by product

03

More automation around follow-up reminders and quotation approvals

Custom software

Need a tool built around how your team works?

CRMs, quotation builders, dashboards, portals — we design, build and deploy software that your team will actually use.

Next case study

KIO Organics →

Read it