## CRM Automation Suite — A sales pipeline that follows up on its own. - URL: https://www.naveentehrpariya.dev/projects/crm-automation - Industry: B2B SaaS - Client type: Agency - Country: Australia - Role: Full Stack Product Engineer - Duration: 8 months - Status: Live - Year: 2024 A CRM built around one idea: the follow-up should happen whether or not a salesperson remembers. Leads arrive from every channel, get scored, and move through sequences that pause the moment a human replies. ### Problem The agency's leads landed in four places: a web form, an inbox, a phone log and a spreadsheet. Reps worked whichever list was in front of them, follow-ups depended on memory, and management had no view of the pipeline until the month closed. ### Objectives - Bring every lead source into one queue - Automate follow-up sequences without spamming replying leads - Score leads so reps work the right ones first - Give management live pipeline visibility ### Solution Laravel handles the domain and background queues; a Next.js dashboard handles the interface. Every lead source normalises into one lead record, and automation runs as queued jobs against a state machine, so a reply, a booking or a manual note immediately halts the sequence. Reporting reads from pre-aggregated tables instead of scanning the activity log. ### Features - Unified lead inbox across web, email and phone - Visual pipeline with drag-to-stage - Email and WhatsApp sequences that stop on reply - Rule-based lead scoring - Role-based access for reps, managers and admins - Live pipeline and conversion reporting ### Stack - Frontend: Next.js, React, Tailwind CSS - Backend: Laravel, PHP, Horizon - Database: MySQL, Redis - Cloud: AWS, Docker - Integrations: Twilio, SendGrid, Google Calendar, Zapier ### Engineering challenges ### Automation that kept emailing people who had already replied Problem: Sequence steps were scheduled up front, so a reply on day two did not stop the email queued for day three. Approach: Each step re-checks lead state at execution time rather than at scheduling time, so any human touch cancels everything downstream. ### Reports that got slower every month Problem: Dashboards aggregated over the full activity table, which grew with every interaction the system recorded. Approach: Aggregates are rolled up on write into summary tables, so dashboard queries stay flat regardless of history size. ### Outcome - Four lead sources consolidated into a single queue with no manual re-entry - Follow-up stopped depending on individual memory - Management moved from month-end reporting to live pipeline visibility ### What it taught Schedule the intent, not the action. Re-evaluating state at execution time is what separates automation people trust from automation people switch off. Case study: https://www.naveentehrpariya.dev/projects/crm-automation More work: https://www.naveentehrpariya.dev/llms.txt