Back to Writing
Build·5 min read·April 10, 2026

How I Built a Lightweight CRM Platform

Replacing opinionated SaaS with a configurable pipeline engine — data model, UX decisions and what non-linear B2B sales actually needs.

Off-the-shelf CRM systems are built around assumptions about how selling works: a lead becomes an opportunity, an opportunity moves through fixed stages, and a deal either closes or is lost. For most B2B sales motions involving long relationships, multiple stakeholders, and decisions that are rarely linear, these assumptions are wrong. The standard CRM becomes a reporting tool that salespeople hate updating, which means the data is wrong, which means the reporting is worthless.

This CRM was built for a specific B2B sales context where the buying process was relationship-driven and non-linear. Relationships mattered as much as pipeline stage. Multiple decision-makers were involved across long cycles. The system needed to support how the team actually sold, not impose a structure that made sense to a CRM vendor.

Architecture

The backend is a Node.js API with a Postgres database. The data model was designed around three core entities: accounts (companies), contacts (people), and opportunities (potential deals). The relationship layer tracks connections between contacts — who knows whom, who influences whom — in a way that standard CRMs do not. Activities (calls, meetings, emails) are logged against any entity combination rather than being forced into an opportunity-only context.

The pipeline engine is the differentiating component. Rather than a fixed set of stages, the system supports configurable pipeline definitions: an admin can define any number of stages with custom names, entry criteria, and exit conditions. Different opportunity types can use different pipeline configurations. This flexibility addressed the core user complaint about standard CRMs: the stages did not match the actual buying process, so the stage data was always inaccurate.

The Configurable Pipeline Decision

The decision to build a configurable pipeline engine rather than hardcoding stages added roughly two weeks of development time and significant complexity to the data model. It was the right decision. Within the first month of deployment, the team had created three different pipeline configurations for three different opportunity types — none of which matched the generic five-stage model that comes out of the box with standard CRMs. That flexibility is what drove adoption: people use systems that reflect how they work.

Capabilities and Outcomes

The platform supports contact relationship mapping, configurable pipeline stages per opportunity type, activity logging with full entity association, and pipeline reporting with conversion rates by stage and opportunity type. The React frontend was built with Tailwind for speed and uses a kanban view for pipeline management alongside a table view for bulk operations. Adoption was significantly higher than the previous off-the-shelf CRM, and the data quality improved enough that pipeline reporting became a reliable input to quarterly revenue forecasting — the outcome the business needed, not the one the vendor promised.