Custom Operations CRM for DVG Operations by Vincent PasiliCustom Operations CRM for DVG Operations by Vincent Pasili
Built with Replit

Custom Operations CRM for DVG Operations

Vincent Pasili

Vincent Pasili

Verified

The Problem

DVG Operations coordinates teams across multiple properties, each with its own inspection schedules, maintenance workflows, and notification needs. Before the CRM, their day-to-day ran on a patchwork of disconnected tools:
Team assignments lived in spreadsheets that went stale by lunchtime. Inspection reports were filled out on paper or in standalone form apps, then manually re-entered. Notifications to clients and team members were sent manually — or forgotten entirely. And team communication happened across scattered email threads and group chats where context got buried fast.
The result: duplicated work, missed inspections, delayed client updates, and no single view of operations. As DVG grew and took on more properties, the friction compounded. They needed a system that matched how their operations actually worked — not a generic project management tool bolted onto their workflow.

The Solution

A custom-built operations CRM designed around DVG’s actual workflows — property-centric, team-driven, and inspection-aware. Every feature maps directly to a daily operational need rather than forcing DVG to adapt their processes to off-the-shelf software.
The platform gives managers a single dashboard to assign teams, schedule and track inspections, communicate in real time, and keep clients informed with automated notifications — all tied to the properties they manage.

What I Built

Secure Authentication + Two-Factor Authentication

Operations platforms handle sensitive property and financial data, so security couldn’t be an afterthought. I implemented a full authentication system with email/password login, TOTP-based two-factor authentication, bcrypt password hashing, and PostgreSQL-backed sessions with secure HTTP-only cookies. Session management includes automatic expiry and revocation support, ensuring that team members who leave the organization lose access immediately.

SendGrid Transactional Email

An operations platform is only useful if the right people get the right information at the right time. I integrated SendGrid for all transactional email — inspection assignment notifications, completion confirmations, overdue inspection alerts, team invitation emails, 2FA verification codes, and client-facing property reports. Email templates are managed through SendGrid’s dynamic templates with variables populated from the CRM, keeping content consistent and branded. Delivery status is tracked via SendGrid webhooks so the system knows when a notification bounces or goes undelivered — critical when an inspection alert is time-sensitive.

Team Management

The CRM provides role-based access control across three levels: administrators, managers, and field crew. Admins configure the platform and manage organization settings. Managers assign team members to properties, schedule work, and review completed inspections. Field crew access their assignments, submit inspection reports, and communicate with their team — and nothing more. Each role sees exactly the interface they need with no unnecessary complexity.

Property Management + Inspections

Properties are the central organizing unit. Each property record holds its address, client details, assigned teams, inspection history, maintenance notes, and notification preferences. The inspection workflow lets managers create inspection templates with customizable checklists, assign them to team members, and track completion in real time. Completed inspections are timestamped and attributed to the team member who performed them, creating an auditable history per property.

Real-Time Team Chat

Field operations fall apart when communication is slow. I built real-time messaging using WebSockets so teams can coordinate without leaving the platform. Conversations are organized by property, keeping context attached to the work. Messages support read receipts and persist in the database so nothing gets lost between shifts. Managers can monitor active conversations across their properties without joining every thread.

UI/UX Streamlining

The original workflows involved jumping between 4–5 different screens to complete a single task. I redesigned the interface around DVG’s most common operations — assigning a team, scheduling an inspection, reviewing results, and sending client updates — reducing each to 1–2 steps. The dashboard surfaces what matters: overdue inspections, unassigned properties, undelivered notifications, and active team conversations. Mobile responsiveness was a priority since field crew access the platform from phones and tablets on-site.

Application Refactoring

The project didn’t start from a blank slate. DVG had an existing codebase that had grown organically without consistent patterns. I refactored the application architecture — extracting shared business logic into reusable services, standardizing the API layer with consistent error handling and validation (Zod schemas), normalizing the database schema to eliminate redundant data, and introducing TypeScript across the stack to catch bugs at compile time rather than in production. The refactor reduced the codebase by roughly 30% while adding the new features listed above.

Technology Stack

Frontend — React, TypeScript, TailwindCSSshadcn/uiReact Hook FormZodTanStack Query
Backend — Node.jsExpress, WebSockets, Passport.jsSendGrid API
Database — PostgreSQLDrizzle ORM
Security — TOTP 2FA, bcrypt, HTTP-only session cookies, role-based access control

Design Decisions

Property-centric data model — Every record in the system (inspection, team assignment, notification, chat thread) is linked to a property. This mirrors how DVG actually thinks about their work and makes the dashboard immediately useful without requiring managers to mentally map between unrelated lists.
WebSockets over polling for chat — Field teams need instant communication. Polling adds latency and unnecessary server load. WebSocket connections give sub-second message delivery and make read receipts practical.
Refactor alongside new features — Rather than a full rewrite (which would have stalled feature delivery), I refactored incrementally — extracting services and introducing TypeScript module by module while shipping new functionality. DVG never had a week without forward progress.
Role-based UI, not just role-based access — It’s not enough to gate API endpoints by role. Each role gets a purpose-built interface. Field crew see their assignments and chat. Managers see dashboards and inspection queues. Admins see configuration and notification logs. Less clutter means fewer mistakes.

What I Shipped & What I Learned

End-to-end operations workflow — From property onboarding to team assignment to inspection completion to client notification, every step happens in one system. No more spreadsheet hand-offs or re-keying data between tools.
Security-first architecture — 2FA, hashed credentials, session management, and role-based access built from the ground up. Operations platforms handle sensitive client and financial data — security can’t be retrofitted.
Real-time coordination — WebSocket-based team chat organized by property context. Field teams communicate faster, managers maintain visibility, and nothing gets lost in personal text threads.
Incremental refactoring — Proved that you can modernize a legacy codebase and ship new features simultaneously. The key: extract small services, add types gradually, and keep the test surface stable.
Automated notifications tied to operations — SendGrid integration that triggers contextual emails at every key moment — inspection assigned, completed, overdue, or bounced. Managers and clients stay informed without anyone sending a manual email.
Like this project

Posted Mar 19, 2026

Built a custom operations CRM with 2FA auth, SendGrid notifications, property inspections, real-time team chat, role-based dashboards, and full app refactoring.