
Building Racker: A Multi-Tenant CRM Application
How I built Racker, a Laravel + React multi-tenant CRM with role management, ticketing, contact and calendar systems, real-time notifications, and analytics for resolution times.
Building Racker: A Multi-Tenant CRM Application
One of my biggest projects so far has been Racker, a CRM application I designed and developed using Laravel and React. The goal was to build a system that could handle multiple tenants, give me a management layer as the product owner, and provide businesses with all the tools they need to manage their operations efficiently.
Multi-tenancy and management control
At the core of Racker is a multi-tenant architecture. Each business operates in its own isolated tenant space, while I, as the product owner, have a management panel to create, manage, and oversee tenants.
- Tenant Creation: Spin up new tenants with dedicated configurations
- Navigation Builder: Custom menus for each tenant so they can shape the UI to their needs
- Roles & Permissions: Fine-grained access control across tenants
This means each customer gets a tailored experience without losing the efficiency of a shared platform.
Support ticketing system with email integration
I wanted to make Racker more than just a contact manager, so I built in a support ticketing system.
- SMTP & IMAP Integration: The app can both send and receive emails, automatically scanning mailboxes for incoming support requests
- Ticket Dashboard: Centralised management of tickets with statuses, assignees, and SLA tracking
- Email-to-Ticket Conversion: Customer emails automatically become tickets, keeping everything in one workflow
Contact management system
Every CRM needs robust contact management, and Racker delivers this with:
- Customer Profiles: Store names, companies, numbers, and key details
- Linked Records: Connect contacts with tickets, calendar events, and notes
- Search & Filters: Quickly find the right person across tenants
Calendar and scheduling system
Keeping track of activities is just as important as managing contacts, so I included a calendar system.
- Events & Appointments: Log customer meetings, calls, and internal reminders
- Team View: Shared visibility across a tenant's team
- Integration Ready: Designed with external calendar sync in mind
Resolution time analytics
To measure performance, I added a dedicated analytics module for ticket resolution times.
- Average Resolution Time: Track how quickly issues are being resolved
- Trend Analysis: Spot improvements or bottlenecks over time
- Tenant-Level Reporting: Each business gets their own analytics view
Employee profiles with a social twist
To give teams more personality inside Racker, I built employee profiles styled like a social media feed.
- Profile Pages: Show roles, tickets handled, posts, and updates
- Activity Feeds: Updates and milestones logged like social posts
- Team Presence: Encourages collaboration and visibility
Real-time notifications with Socketi
I wanted notifications to feel instant, so I integrated a Socketi-powered notification system.
- Real-Time Alerts: Tickets, mentions, assignments, and calendar updates appear instantly
- Tenant-Specific: Notifications respect tenant boundaries
- Scalable Infrastructure: Designed for high concurrency
The stack
- Backend: Laravel for multi-tenancy, queues, mail handling, and API
- Frontend: React for dashboards, ticketing UIs, and calendar interactions
- Email Integration: SMTP/IMAP for two-way email communication
- Notifications: Socketi for real-time push updates
- Database: Isolated tenant databases for data integrity and security
Final thoughts
Racker has been one of my most ambitious builds, combining multi-tenancy, ticketing, contact management, calendars, analytics, and real-time features into one cohesive CRM platform.
The idea was simple: give businesses an all-in-one system that can adapt to their workflows, while giving me as the product owner a clear management layer to onboard and support multiple tenants at scale.
It's a project I'm really proud of, and it continues to evolve with new features as I refine how tenants and teams use the platform.