From 1a96346200d1e11db18881384884c5078c7f961b Mon Sep 17 00:00:00 2001 From: Satyam Rastogi Date: Fri, 29 May 2026 17:19:39 +0530 Subject: [PATCH] feat(data): add lifecycleStage + stageHistory to all projects --- src/data/mockStore.jsx | 250 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 238 insertions(+), 12 deletions(-) diff --git a/src/data/mockStore.jsx b/src/data/mockStore.jsx index 4b1bf6b..a798d16 100644 --- a/src/data/mockStore.jsx +++ b/src/data/mockStore.jsx @@ -2201,7 +2201,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_001_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_001_4', userId: 'e1', name: 'Cody Tatum', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_001_5', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'pending', commissionEnabled: true, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-01-05', by: 'Justin Johnson', note: 'Storm damage lead identified — 2604 Dunwick Dr.' }, + { stage: 'Damage Verified', date: '2026-01-10', by: 'Justin Johnson', note: 'Adjuster confirmed hail damage; claim approved.' }, + { stage: 'Scope Approved', date: '2026-01-15', by: 'Justin Johnson', note: 'Full roof replacement scope signed off.' }, + { stage: 'Contract Signed', date: '2026-01-20', by: 'Justin Johnson', note: 'Contract executed; mobilization deposit collected.' }, + { stage: 'Work In Progress', date: '2026-01-27', by: 'Justin Johnson', note: 'Shingle install underway; dry-in inspection passed.' }, + ], }, // Project 2: Completed, zero variance (perfectly on budget) @@ -2255,7 +2263,14 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_002_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_002_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Project Completed', + stageHistory: [ + { stage: 'Lead', date: '2025-11-01', by: 'Justin Johnson', note: 'Gutter replacement lead — 2617 Rothland Ln.' }, + { stage: 'Contract Signed', date: '2025-11-15', by: 'Justin Johnson', note: 'Contract executed; work scheduled.' }, + { stage: 'Work In Progress', date: '2025-11-18', by: 'Justin Johnson', note: 'Old gutter removal started.' }, + { stage: 'Project Completed', date: '2025-12-10', by: 'Justin Johnson', note: 'Final walkthrough complete; pending final invoice.' }, + ], }, // Project 3: Delayed with missed milestone @@ -2336,7 +2351,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_003_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 2000 } }, { id: 'jtm_003_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_003_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2025-12-20', by: 'Justin Johnson', note: 'HVAC replacement needed — 6613 Phoenix Pl.' }, + { stage: 'Scope Approved', date: '2025-12-28', by: 'Justin Johnson', note: 'HVAC design plans approved.' }, + { stage: 'Contract Signed', date: '2026-01-06', by: 'Justin Johnson', note: 'Contract executed.' }, + { stage: 'Work In Progress', date: '2026-01-10', by: 'Justin Johnson', note: 'Site prep complete; ductwork rough-in started. Delayed due to equipment backorder.' }, + ], }, // Project 4: Active, on track, under budget @@ -2427,7 +2449,16 @@ const MOCK_PROJECTS = [ { id: 'jtm_004_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: true, jobCommission: { type: 'percent_net', rate: 8 } }, { id: 'jtm_004_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_004_3', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work Complete — Awaiting Inspection', + completionPercentage: 80, + stageHistory: [ + { stage: 'Lead', date: '2025-11-15', by: 'Justin Johnson', note: 'Interior renovation lead — 2612 Dunwick Dr.' }, + { stage: 'Scope Approved', date: '2025-11-22', by: 'Justin Johnson', note: 'Renovation scope approved with kitchen expansion.' }, + { stage: 'Contract Signed', date: '2025-12-01', by: 'Justin Johnson', note: 'Contract executed; demo crew scheduled.' }, + { stage: 'Work In Progress', date: '2025-12-10', by: 'Justin Johnson', note: 'Demo started. Framing and MEP phases completed through Jan.' }, + { stage: 'Work Complete — Awaiting Inspection', date: '2026-02-16', by: 'Justin Johnson', note: 'Flooring and trim in progress; final punch list pending city inspection.' }, + ], }, // Project 5: On Hold with pending dispute @@ -2504,7 +2535,13 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_005_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_005_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2025-12-20', by: 'Justin Johnson', note: 'Siding replacement lead — 2608 Dunwick Dr.' }, + { stage: 'Contract Signed', date: '2026-01-06', by: 'Justin Johnson', note: 'Contract executed; scaffolding crew scheduled.' }, + { stage: 'Work In Progress', date: '2026-01-08', by: 'Justin Johnson', note: 'Scaffolding and old siding removal complete; project paused due to defective panel dispute.' }, + ], }, // Project 6: Active, on track, early stage @@ -2562,7 +2599,14 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_006_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_006_2', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Contract Signed', + completionPercentage: 22, + stageHistory: [ + { stage: 'Lead', date: '2026-01-20', by: 'Justin Johnson', note: 'Electrical upgrade needed — 3913 Arizona Pl.' }, + { stage: 'Scope Approved', date: '2026-01-28', by: 'Justin Johnson', note: 'Load calc and panel spec approved.' }, + { stage: 'Contract Signed', date: '2026-02-03', by: 'Justin Johnson', note: 'Contract executed; permit application filed.' }, + ], }, // ===================================================================== @@ -2668,7 +2712,16 @@ const MOCK_PROJECTS = [ { id: 'jtm_007_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_007_3', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_007_4', userId: 'e4', name: 'Shelby Greer', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + completionPercentage: 32, + stageHistory: [ + { stage: 'Lead', date: '2026-01-10', by: 'Diana Reeves', note: 'Commercial roof replacement — 6909 Custer Rd.' }, + { stage: 'Damage Verified', date: '2026-01-18', by: 'Diana Reeves', note: 'Roof survey confirmed TPO membrane failure; insulation saturated.' }, + { stage: 'Scope Approved', date: '2026-01-22', by: 'Diana Reeves', note: 'Full TPO replacement scope + drainage scuppers approved.' }, + { stage: 'Contract Signed', date: '2026-01-27', by: 'Diana Reeves', note: 'Contract executed; mobilization payment released.' }, + { stage: 'Work In Progress', date: '2026-02-03', by: 'Diana Reeves', note: 'Material procurement complete; Section A tear-off underway.' }, + ], }, // Project 8: Active, on track, under budget @@ -2736,7 +2789,17 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_008_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_008_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work Complete — Awaiting Inspection', + completionPercentage: 88, + stageHistory: [ + { stage: 'Lead', date: '2025-11-05', by: 'Diana Reeves', note: 'Foundation settlement identified — 2112 Winslow Dr.' }, + { stage: 'Damage Verified', date: '2025-11-12', by: 'Diana Reeves', note: 'Structural engineer confirmed 18 piers required.' }, + { stage: 'Scope Approved', date: '2025-11-15', by: 'Diana Reeves', note: 'Full pier + plumbing re-test scope approved.' }, + { stage: 'Contract Signed', date: '2025-11-18', by: 'Diana Reeves', note: 'Contract executed; pier installation crews mobilized.' }, + { stage: 'Work In Progress', date: '2025-11-22', by: 'Diana Reeves', note: 'Pier installation east and west sides complete; slab lifting done.' }, + { stage: 'Work Complete — Awaiting Inspection', date: '2026-02-10', by: 'Diana Reeves', note: 'Final grade and drainage in progress; re-certification pending.' }, + ], }, // Project 9: Delayed with missed milestone @@ -2796,7 +2859,14 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_009_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_009_2', userId: 'e2', name: 'Hannah Reyes', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-01-03', by: 'Diana Reeves', note: 'Window replacement — 7224 Independence Pkwy.' }, + { stage: 'Scope Approved', date: '2026-01-08', by: 'Diana Reeves', note: 'Custom window specs approved; energy audit included.' }, + { stage: 'Contract Signed', date: '2026-01-13', by: 'Diana Reeves', note: 'Contract executed; window fabrication ordered.' }, + { stage: 'Work In Progress', date: '2026-02-07', by: 'Diana Reeves', note: 'Floor 1 installation complete; Floor 2 underway.' }, + ], }, // Project 10: Completed, zero variance @@ -2857,7 +2927,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_010_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: { type: 'flat', rate: 1500 } }, { id: 'jtm_010_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_010_3', userId: 'e5', name: 'Dalton Pruitt', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'pending', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Project Completed', + stageHistory: [ + { stage: 'Lead', date: '2025-09-01', by: 'Diana Reeves', note: 'Parking lot resurface — 2100 Legacy Dr.' }, + { stage: 'Contract Signed', date: '2025-09-15', by: 'Diana Reeves', note: 'Contract executed; milling crew scheduled.' }, + { stage: 'Work In Progress', date: '2025-09-20', by: 'Diana Reeves', note: 'Surface milling and paving underway.' }, + { stage: 'Project Completed', date: '2025-10-28', by: 'Diana Reeves', note: 'Striping and ADA signage done; final invoice pending.' }, + ], }, // Project 11: Disputed with open change orders and unresolved issues @@ -2942,7 +3019,14 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_011_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null }, { id: 'jtm_011_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2025-11-20', by: 'Diana Reeves', note: 'Facade restoration — Legacy Town Center.' }, + { stage: 'Scope Approved', date: '2025-11-28', by: 'Diana Reeves', note: 'Masonry and waterproofing scope approved.' }, + { stage: 'Contract Signed', date: '2025-12-08', by: 'Diana Reeves', note: 'Contract executed; scaffolding crew mobilized.' }, + { stage: 'Work In Progress', date: '2025-12-12', by: 'Diana Reeves', note: 'Scaffolding up; masonry Phase 1 & 2 complete. Disputed scope on CO #2/#3 — project effectively paused at 62%.' }, + ], }, // Project 12: On Hold @@ -3004,7 +3088,14 @@ const MOCK_PROJECTS = [ teamMembers: [ { id: 'jtm_012_1', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_012_2', userId: 'e3', name: 'Travis Boone', email: 'agent3@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: false, jobCommission: null } - ] + ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-01-03', by: 'Diana Reeves', note: 'Plumbing overhaul — Dallas/Plano Marriott.' }, + { stage: 'Scope Approved', date: '2026-01-08', by: 'Diana Reeves', note: 'Full main-line replacement scope approved.' }, + { stage: 'Contract Signed', date: '2026-01-13', by: 'Diana Reeves', note: 'Contract executed.' }, + { stage: 'Work In Progress', date: '2026-01-17', by: 'Diana Reeves', note: 'Assessment and material procurement complete; main line replaced. On hold pending permit review.' }, + ], }, // ===================================================================== @@ -3083,6 +3174,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_013_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_013_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 25, + stageHistory: [ + { stage: 'Lead', date: '2026-03-10', by: 'Justin Johnson', note: 'Storm damage roof lead — Charlotte Norris, 2908 Roundabout Ln.' }, + { stage: 'Damage Verified', date: '2026-03-14', by: 'Justin Johnson', note: 'Hail damage confirmed by adjuster; claim approved.' }, + { stage: 'Scope Approved', date: '2026-03-18', by: 'Justin Johnson', note: 'Full roof replacement scope approved by insurance.' }, + { stage: 'Contract Signed', date: '2026-03-22', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Permits in progress.' }, + ], }, // PRJ-2026-014 — Henry Castaneda (kl_024, kc_signed) @@ -3160,6 +3259,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_014_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_014_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 20, + stageHistory: [ + { stage: 'Lead', date: '2026-03-08', by: 'Justin Johnson', note: 'Insurance siding replacement lead — Henry Castaneda, 5614 Ridgewood Dr.' }, + { stage: 'Damage Verified', date: '2026-03-12', by: 'Justin Johnson', note: 'Storm damage verified; full siding scope approved by carrier.' }, + { stage: 'Scope Approved', date: '2026-03-16', by: 'Justin Johnson', note: 'HOA color approval pending; scope otherwise complete.' }, + { stage: 'Contract Signed', date: '2026-03-20', by: 'Justin Johnson', note: 'Contract executed; 25% deposit collected.' }, + ], }, // PRJ-2026-015 — Yvonne Blackwell (kl_025, kc_signed) @@ -3233,6 +3340,13 @@ const MOCK_PROJECTS = [ { id: 'jtm_015_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_015_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 28, + stageHistory: [ + { stage: 'Lead', date: '2026-03-01', by: 'Justin Johnson', note: 'Cash client roof replacement — Yvonne Blackwell, 3401 Parker Rd.' }, + { stage: 'Scope Approved', date: '2026-03-07', by: 'Justin Johnson', note: 'Scope set; 28 squares OC TruDefinition Duration.' }, + { stage: 'Contract Signed', date: '2026-03-11', by: 'Justin Johnson', note: 'Contract executed; 50% deposit collected. Permit approved 3/20.' }, + ], }, // PRJ-2026-016 — Emmanuel Okafor (kl_026, kc_signed) @@ -3307,6 +3421,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_016_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_016_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 22, + stageHistory: [ + { stage: 'Lead', date: '2026-03-15', by: 'Justin Johnson', note: 'Insurance roof + gutter lead — Emmanuel Okafor, 4812 Mapleshade Ln.' }, + { stage: 'Damage Verified', date: '2026-03-18', by: 'Justin Johnson', note: 'Hail damage verified; full roof + gutter scope approved.' }, + { stage: 'Scope Approved', date: '2026-03-21', by: 'Justin Johnson', note: 'GAF shingles + K-style gutters scope finalized.' }, + { stage: 'Contract Signed', date: '2026-03-25', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected.' }, + ], }, // PRJ-2026-017 — Adriana Voss (kl_027, kc_signed) @@ -3383,6 +3505,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_017_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_017_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 24, + stageHistory: [ + { stage: 'Lead', date: '2026-03-10', by: 'Justin Johnson', note: 'Insurance roof lead — Adriana Voss, 1820 Custer Rd. 6-week supplement negotiation.' }, + { stage: 'Damage Verified', date: '2026-03-15', by: 'Justin Johnson', note: 'Adjuster approved full replacement + ice/water barrier supplement.' }, + { stage: 'Scope Approved', date: '2026-03-22', by: 'Justin Johnson', note: 'Supplemental scope finalized.' }, + { stage: 'Contract Signed', date: '2026-03-28', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Materials ordered.' }, + ], }, // PRJ-2026-018 — Marvin Delgado (kl_028, kc_progress) @@ -3465,6 +3595,13 @@ const MOCK_PROJECTS = [ { id: 'jtm_018_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_018_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-02-15', by: 'Justin Johnson', note: 'Insurance roof replacement — Marvin Delgado, 6820 Windhaven Pkwy.' }, + { stage: 'Damage Verified', date: '2026-02-18', by: 'Justin Johnson', note: 'Storm damage confirmed; adjuster approved scope.' }, + { stage: 'Contract Signed', date: '2026-02-28', by: 'Justin Johnson', note: 'Contract executed; deposit and progress payments on schedule.' }, + { stage: 'Work In Progress', date: '2026-03-18', by: 'Justin Johnson', note: 'Tear-off complete; roofing install underway. 2 rotted deck boards replaced via CO.' }, + ], }, // PRJ-2026-019 — Sandra Tran (kl_029, kc_progress) @@ -3548,6 +3685,13 @@ const MOCK_PROJECTS = [ { id: 'jtm_019_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_019_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-02-10', by: 'Justin Johnson', note: 'Insurance siding replacement — Sandra Tran, 2506 Springpark Dr.' }, + { stage: 'Damage Verified', date: '2026-02-14', by: 'Justin Johnson', note: 'Storm damage confirmed; full siding scope approved.' }, + { stage: 'Contract Signed', date: '2026-02-25', by: 'Justin Johnson', note: 'Contract executed; deposit collected.' }, + { stage: 'Work In Progress', date: '2026-03-25', by: 'Justin Johnson', note: 'Siding install underway; hidden rot discovered, CO raised for sheathing replacement.' }, + ], }, // PRJ-2026-020 — Reginald Hopper (kl_030, kc_progress) @@ -3630,6 +3774,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_020_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_020_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work Complete — Awaiting Inspection', + completionPercentage: 80, + stageHistory: [ + { stage: 'Lead', date: '2026-02-10', by: 'Justin Johnson', note: 'Insurance roof + gutter — Reginald Hopper, 1504 Estates Dr.' }, + { stage: 'Damage Verified', date: '2026-02-15', by: 'Justin Johnson', note: 'Hail damage verified; full scope approved.' }, + { stage: 'Contract Signed', date: '2026-02-24', by: 'Justin Johnson', note: 'Contract executed; production scheduled.' }, + { stage: 'Work In Progress', date: '2026-03-20', by: 'Justin Johnson', note: 'Roofing complete; gutter install started.' }, + { stage: 'Work Complete — Awaiting Inspection', date: '2026-04-08', by: 'Justin Johnson', note: 'Gutter install complete; final inspection scheduled.' }, + ], }, // ===================================================================== @@ -3712,6 +3865,13 @@ const MOCK_PROJECTS = [ { id: 'jtm_021_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_021_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-02-20', by: 'Diana Reeves', note: 'Cash premium roof — Nadia Thornton, 5150 Preston Rd.' }, + { stage: 'Scope Approved', date: '2026-02-26', by: 'Diana Reeves', note: 'Premium Owens Corning HDZ spec approved.' }, + { stage: 'Contract Signed', date: '2026-03-03', by: 'Diana Reeves', note: 'Contract executed; full upfront payment received.' }, + { stage: 'Work In Progress', date: '2026-03-28', by: 'Diana Reeves', note: 'Materials arrived; premium install started. Warranty registration RFI open.' }, + ], }, // PRJ-2026-022 — Clifford Aguilar (kl_032, kc_progress) @@ -3789,6 +3949,12 @@ const MOCK_PROJECTS = [ { id: 'jtm_022_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_022_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-02-25', by: 'Diana Reeves', note: 'Siding repair — Clifford Aguilar, 3822 Haverwood Ln.' }, + { stage: 'Contract Signed', date: '2026-03-07', by: 'Diana Reeves', note: 'Partial repair scope (south + west faces). Contract executed.' }, + { stage: 'Work In Progress', date: '2026-04-01', by: 'Diana Reeves', note: 'South face complete; west face install in progress.' }, + ], }, // PRJ-2026-023 — Tamara Owens (kl_033, kc_progress) @@ -3869,6 +4035,14 @@ const MOCK_PROJECTS = [ { id: 'jtm_023_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_023_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Work In Progress', + stageHistory: [ + { stage: 'Lead', date: '2026-02-05', by: 'Diana Reeves', note: 'Large roof replacement lead — Tamara Owens, 2010 Oak Creek Blvd. $42K job.' }, + { stage: 'Damage Verified', date: '2026-02-08', by: 'Diana Reeves', note: 'Adjuster confirmed hail damage on 3,600 sq ft roof.' }, + { stage: 'Scope Approved', date: '2026-02-11', by: 'Diana Reeves', note: 'Full replacement scope approved by insurance.' }, + { stage: 'Contract Signed', date: '2026-02-15', by: 'Diana Reeves', note: 'Contract executed; 25% deposit collected.' }, + { stage: 'Work In Progress', date: '2026-04-05', by: 'Diana Reeves', note: 'Two crews on site; chimney flashing RFI opened — architect sign-off needed.' }, + ], }, // PRJ-2026-024 — Craig Singleton (kl_034, kc_complete) @@ -3949,6 +4123,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_024_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_024_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Final Payment Received — Closed', + stageHistory: [ + { stage: 'Lead', date: '2026-01-22', by: 'Diana Reeves', note: 'Insurance roof replacement — Craig Singleton, 4110 Lorimar Dr.' }, + { stage: 'Damage Verified', date: '2026-01-26', by: 'Diana Reeves', note: 'Adjuster confirmed hail damage; scope approved.' }, + { stage: 'Contract Signed', date: '2026-02-01', by: 'Diana Reeves', note: 'Contract executed; deposit collected at signing.' }, + { stage: 'Work In Progress', date: '2026-02-20', by: 'Diana Reeves', note: 'Tear-off and install completed in 1 day.' }, + { stage: 'Project Completed', date: '2026-02-28', by: 'Diana Reeves', note: 'Final inspection passed. 5-star review.' }, + { stage: 'Final Payment Received — Closed', date: '2026-03-01', by: 'Diana Reeves', note: 'Final payment received; file closed.' }, + ], }, // PRJ-2026-025 — Bertha Fleming (kl_035, kc_complete) @@ -4028,6 +4211,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_025_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_025_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Final Payment Received — Closed', + stageHistory: [ + { stage: 'Lead', date: '2026-01-15', by: 'Diana Reeves', note: 'Insurance siding replacement — Bertha Fleming, 6230 West Parker Rd.' }, + { stage: 'Damage Verified', date: '2026-01-20', by: 'Diana Reeves', note: 'Storm damage verified; full siding scope approved.' }, + { stage: 'Contract Signed', date: '2026-01-28', by: 'Diana Reeves', note: 'Contract executed; 25% deposit collected.' }, + { stage: 'Work In Progress', date: '2026-02-15', by: 'Diana Reeves', note: 'Demo and install same day.' }, + { stage: 'Project Completed', date: '2026-02-21', by: 'Diana Reeves', note: 'Final inspection passed; trim and caulk complete.' }, + { stage: 'Final Payment Received — Closed', date: '2026-02-22', by: 'Diana Reeves', note: 'Insurance check received and deposited. File closed.' }, + ], }, // PRJ-2026-026 — Oliver Stanton (kl_036, kc_complete) @@ -4105,6 +4297,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_026_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_026_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Final Payment Received — Closed', + stageHistory: [ + { stage: 'Lead', date: '2026-01-20', by: 'Diana Reeves', note: 'Cash roof replacement — Oliver Stanton, 3750 Legacy Dr.' }, + { stage: 'Scope Approved', date: '2026-01-26', by: 'Diana Reeves', note: 'GAF materials spec finalized.' }, + { stage: 'Contract Signed', date: '2026-01-30', by: 'Diana Reeves', note: 'Cash client. Full payment upfront at signing.' }, + { stage: 'Work In Progress', date: '2026-02-18', by: 'Diana Reeves', note: 'Tear-off started.' }, + { stage: 'Project Completed', date: '2026-02-20', by: 'Diana Reeves', note: 'Outstanding quality. Referral bonus owed.' }, + { stage: 'Final Payment Received — Closed', date: '2026-02-20', by: 'Diana Reeves', note: 'Upfront payment confirmed; project closed.' }, + ], }, // PRJ-2026-027 — Daphne Garrett (kl_037, kc_complete) @@ -4183,6 +4384,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_027_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_027_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Final Payment Received — Closed', + stageHistory: [ + { stage: 'Lead', date: '2026-02-02', by: 'Diana Reeves', note: 'Insurance gutters + fascia — Daphne Garrett, 1912 Mira Vista Dr.' }, + { stage: 'Damage Verified', date: '2026-02-05', by: 'Diana Reeves', note: 'Storm damage confirmed; scope approved by carrier.' }, + { stage: 'Contract Signed', date: '2026-02-10', by: 'Diana Reeves', note: 'Contract executed; 50% deposit collected.' }, + { stage: 'Work In Progress', date: '2026-02-28', by: 'Diana Reeves', note: 'Fascia repair and gutter install complete.' }, + { stage: 'Project Completed', date: '2026-03-02', by: 'Diana Reeves', note: 'Customer gave referral cards to 3 neighbors.' }, + { stage: 'Final Payment Received — Closed', date: '2026-03-02', by: 'Diana Reeves', note: 'Final payment received; file closed.' }, + ], }, // PRJ-2026-028 — Nathaniel Cruz (kl_038, kc_complete) @@ -4264,6 +4474,15 @@ const MOCK_PROJECTS = [ { id: 'jtm_028_2', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_028_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Final Payment Received — Closed', + stageHistory: [ + { stage: 'Lead', date: '2026-01-25', by: 'Diana Reeves', note: 'Insurance roof replacement — Nathaniel Cruz, 5808 Tennyson Pkwy.' }, + { stage: 'Damage Verified', date: '2026-01-28', by: 'Diana Reeves', note: 'Complex insurance supplemental negotiation complete.' }, + { stage: 'Contract Signed', date: '2026-02-04', by: 'Diana Reeves', note: 'Contract executed; 30% deposit collected.' }, + { stage: 'Work In Progress', date: '2026-03-10', by: 'Diana Reeves', note: 'Tear-off found 3 rotted deck sheets; CO raised and approved.' }, + { stage: 'Project Completed', date: '2026-03-18', by: 'Diana Reeves', note: 'Final inspection passed.' }, + { stage: 'Final Payment Received — Closed', date: '2026-03-20', by: 'Diana Reeves', note: 'Final payment received. Longest close — 7 weeks. File closed.' }, + ], }, // Converted from won kanban lead kl_044 (signed, awaiting HOA approval before start) @@ -4335,6 +4554,13 @@ const MOCK_PROJECTS = [ { id: 'jtm_029_2', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, { id: 'jtm_029_3', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, ], + lifecycleStage: 'Contract Signed', + completionPercentage: 8, + stageHistory: [ + { stage: 'Lead', date: '2026-03-18', by: 'Justin Johnson', note: 'Gutter replacement — Jerome Watkins, 3908 Plano Pkwy.' }, + { stage: 'Scope Approved', date: '2026-03-22', by: 'Justin Johnson', note: 'LeafGuard DFW gutter spec finalized.' }, + { stage: 'Contract Signed', date: '2026-03-25', by: 'Justin Johnson', note: 'Contract executed; 30% deposit collected. Awaiting HOA approval before production start.' }, + ], }, ];