← Back

Modernizing a Legacy CRM Contact Experience

High-use legacy contact pages in a CRM serving thousands of real estate agents had grown complex and difficult to maintain. The challenge was modernizing the UI and architecture without breaking the dense layer of permissions, communication opt-outs, privacy rules, and workflow states that agents relied on daily.

My Role

Led frontend engineering for the redesign, partnering with product and design from discovery through delivery. Drove a Vue 2 to Composition API migration aligned with a broader Vue 3 upgrade path, while contributing to the refactor of contact filtering, action systems, and legacy permission logic.

Problem

Legacy contact pages were cluttered, difficult to maintain, and increasingly hard to extend. Business rules around masked contacts, communication opt-outs, CASL compliance, and pond contacts made modernization high-risk — any change could break workflows agents depended on.

Approach

Mapped existing business rules and permission logic before touching the UI. Modernized components incrementally using Vue Composition API, preserving legacy behavior at each step. Worked closely with product and design to reduce cognitive load in the redesign without removing functionality that supported real agent workflows.

Outcome

Delivered a cleaner, more maintainable contact experience used by thousands of agents daily. Established a safer migration path toward Vue 3 and reduced the surface area of tightly coupled legacy logic.

Stack

Vue 2, Vue Composition API, PHP, Laravel, SQL

Private internal project
This work was built for internal production use, so source code and detailed implementation materials are not public.