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.