Back to Projects
Live Project
2024
Solo Project
Full-Stack

LeadCheck - Multi-Tenant Lead Management System

A comprehensive multi-tenant lead management application with database-per-tenant architecture, enabling organizations to efficiently manage leads with complete data isolation and client-specific customization.

LeadCheck - Multi-Tenant Lead Management System

Project Gallery

LeadCheck - Multi-Tenant Lead Management System screenshot 1
LeadCheck - Multi-Tenant Lead Management System screenshot 2
LeadCheck - Multi-Tenant Lead Management System screenshot 3

About the Project

LeadCheck is a comprehensive multi-tenant lead management application designed to serve multiple clients (tenants) from a single application instance while maintaining complete data isolation and security. The system enables organizations to efficiently manage leads, track status workflows, and customize form configurations per client. It implements a database-per-tenant architecture with dynamic connection switching, explicit menu-based access control, and client-specific customization capabilities.

Problem Statement

Modern businesses require a scalable solution to manage leads across multiple client organizations. The challenge lies in providing complete data isolation between different clients, ensuring scalability as the number of clients grows, allowing customization (forms, workflows) per client without code duplication, maintaining security and access control across tenants, and simplifying deployment and maintenance overhead.

My Solution

I implemented a database-per-tenant multi-tenancy architecture with a hybrid database model: a central main database manages global configuration, clients, users, roles, and menus, while each client has a dedicated, isolated database for operational data. The NewDbConnection middleware automatically switches database connections based on the logged-in user's client_id. Permission system uses direct user_menu_mappings with RouteGard middleware enforcement. Form configurations are assigned per client via client_configs, and each client maintains their own status definitions and workflow transitions.

Challenges & Learnings

Data Isolation

Implementing strict tenant isolation while maintaining code simplicity required careful middleware design with the NewDbConnection middleware that automatically switches database connections based on user context.

Scalability

Database-per-tenant architecture allows independent scaling and management of client databases, with job-based database provisioning for new tenants and custom migration commands across multiple databases.

Access Control Complexity

Designed explicit menu-based permissions using user_menu_mappings relationships, providing fine-grained control enforced by the RouteGard middleware at every route.

Configuration Management

Balanced flexibility with maintainability through a hybrid approach: per-client form customization via client_configs while keeping forms as static, maintainable Blade templates.

Technology Stack

Laravel

Provided robust framework with excellent support for multi-database connections, middleware architecture, and queue-based background processing essential for tenant database provisioning.

PHP

Enabled rapid development of the complex multi-tenancy logic with excellent Laravel integration and mature ecosystem support for enterprise applications.

MySQL

Supported the multi-database architecture with database-per-tenant isolation, allowing independent scaling and management of client databases.

Alpine.js

Provided lightweight reactive JavaScript for dynamic UI interactions without the overhead of a full SPA framework, perfect for Blade template enhancement.

DataTables

Enabled server-side processing for lead management tables with efficient pagination, sorting, and filtering across large datasets.

Technologies Used

LaravelPHPMySQLAlpine.jsMulti-Tenancy