CRM · 6 weeks · 2025
Building a Full CRM from Scratch
A custom CRM that replaced three spreadsheets and two WhatsApp groups.
3→1
Systems consolidated
40%
Faster lead response
0
Monthly licensing cost
20+
Agents onboarded
The challenge.
NGSSOM managed insurance leads across fragmented spreadsheets, WhatsApp groups, and email threads. Agents had no visibility into each other's pipelines, leads fell through the cracks, and management couldn't see real-time performance metrics. They needed a unified system — but couldn't afford enterprise CRM licensing for 20+ agents.
The solution.
I built a custom CRM from scratch using Node.js, React, and SQLite, designed to run on their own on-premise server. The system features agent dashboards with real-time lead tracking, campaign management with bulk SMS/WhatsApp integration, a simulation mode for training new agents, and an admin panel with KPI dashboards. Everything deploys via a single installer script.
How it was delivered.
- 01✓ Complete
Discovery & Schema Design
Mapped existing workflow across spreadsheets, identified 12 entity types, designed normalized schema.
- 02✓ Complete
Core API & Auth
Built REST API with JWT auth, role-based access (admin/supervisor/agent), rate limiting.
- 03✓ Complete
Agent Dashboard
React frontend with lead pipeline, activity timeline, WhatsApp quick-send, and notification center.
- 04✓ Complete
Admin & Reporting
KPI dashboards, campaign manager, bulk import/export, agent performance metrics.
- 05✓ Complete
Deployment & Training
On-prem installer, simulation mode for agent training, documentation, and handover.
Behind the build.
The project started with a two-day discovery sprint where I sat with the sales team and mapped every step of their lead lifecycle — from first contact to policy issuance. What emerged was a surprisingly complex workflow hidden behind simple-looking spreadsheets.
The key insight was that their process wasn't broken — it was invisible. Agents were doing great work, but nobody could see it. The CRM didn't need to change how they worked; it needed to make their work visible and trackable.
I chose SQLite deliberately. For an on-premise deployment serving 20-30 concurrent users, it eliminates the ops burden of running a separate database server. The entire application — API, frontend, and database — runs as a single process behind Nginx.
The simulation mode was an unexpected hit. New agents can practice the entire lead-to-close workflow with fake data before touching real leads. It cut onboarding time from two weeks to three days.
Built with
- Node.js
- Express
- React
- SQLite
- JWT Auth
- WhatsApp API
- Linux Server
Next case study
A Bilingual Online Store for Omani Kumma & Mussar
Let’s build it.
Tell me what you need built. You’ll hear back in under 24 hours.