
Every enquiry, one inbox
Leads, site enquiries and subscribers in a single list, sorted hot, warm and cold. The team knows who to call first before the first coffee.
- Unified inbox
- Hot / warm / cold pipeline
- Stats from one aggregation query
A Mumbai developer had a website people read once and forgot. Now buyers walk through the tower before it is built, every enquiry lands where the team can act on it, and the numbers are on one screen every morning.
Bhatia Builders sells homes in a tower that does not exist yet. Their site showed flat renders, buyers closed the tab, and the enquiries that did arrive went to three different inboxes. Nobody could say which ad brought which buyer, and changing a price on the site meant calling a developer.
So we did not redesign the site. We replaced what was underneath it.
This is the real Esspee Square tower from the project, drawn live in your browser as you scroll, not a video. It is the moment a buyer stops scrolling, and it runs on the phones they actually carry.

Two screens, one truth. Sales reads the CRM: every enquiry that exists right now. Marketing reads the analytics: how visitors behaved. Both are counted from the same rows, so the numbers never disagree.

Leads, site enquiries and subscribers in a single list, sorted hot, warm and cold. The team knows who to call first before the first coffee.

Traffic, sources, devices and the full visitor-to-closed funnel, reconciled against the real enquiries in the CRM, so a click that never became a lead cannot flatter the report.

Three apps share one database and one set of conventions. The decision that ties them together: the public site never fetches content at runtime. An edit becomes a build, and the live site ships static data.
An edit is written to the database, baked into version-controlled seed files, and committed, which triggers a fresh build. Zero network latency on the public site, nothing to break mid-scroll, and every change in git history.
One rule shaped the path from the form to the dashboard: never lose an enquiry, never create a duplicate. Eight stages enforce it, from the browser to the database.
Written to a local queue with an idempotency key before the request leaves the browser: it survives a tab crash or a dropped network.
A GA4 generate_lead event fires: the capture stage of the tracked journey.
POSTed with the idempotency key. Exponential backoff; 4xx is terminal, 5xx and network errors retry.
CORS whitelist, Helmet headers, global plus per-IP rate limits, and a clean 503 if the database is down.
A Zod schema checks name, email, phone, project, date and time. A failure is a terminal 400.
A replayed key returns the existing lead; a duplicate on email or phone for a project returns 409, backed by a partial unique index.
Stored as source mvp-web, status new, auto-promoted to hot when the visitor leaves a real message.
It lands in the CRM inbox and the analytics funnel at the same time.
The guards behind that pipeline, and the rest of the platform.
Tell us what your site is failing to do. If it deserves the same (the craft on top and the system underneath), we would like to build it.