From 890072a0519bbaab291848649698409431a781ae Mon Sep 17 00:00:00 2001 From: Satyam Rastogi Date: Fri, 29 May 2026 03:41:18 +0530 Subject: [PATCH] =?UTF-8?q?feat(data):=20canonical=20roster=20=E2=80=94=20?= =?UTF-8?q?real=20Texan=20names=20+=20unified=20LUP=20employee=20ids?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/mockStore.jsx | 795 +++++++++++++------------ src/pages/LeadProjectPage.jsx | 6 +- src/pages/owner/OwnerProjectDetail.jsx | 12 +- 3 files changed, 412 insertions(+), 401 deletions(-) diff --git a/src/data/mockStore.jsx b/src/data/mockStore.jsx index ea010f4..1b307c5 100644 --- a/src/data/mockStore.jsx +++ b/src/data/mockStore.jsx @@ -142,7 +142,7 @@ const COMMERCIAL_VARIANTS = [ const REAL_NAMES = [ "James Beauford", "Sarah Miller", "Robert Henderson", "Karen Smith", "Michael Chang", "Patricia O'Neil", "Dr. Anish Patel", "Marcus Johnson", "Elena Rodriguez", "Greg Alston", - "Linda Grey", "Bill Thompson", "Jennifer Wu", "David Kowalski", "Omar Farooq", + "Linda Grey", "Bill Thompson", "Jennifer Castillo", "David Kowalski", "Omar Farooq", "Lisa Chen", "Tom Baker", "Rachel Green", "Steve Martin", "Angela White" ]; @@ -656,16 +656,16 @@ const MOCK_USERS = [ { id: 'c3', type: 'customer', username: 'charlie', email: 'charlie@example.com', password: 'password', name: 'Charlie Client' }, // Field Agents (5 Agents) - { id: 'e1', type: 'employee', empId: 'FA001', email: 'agent1@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Frank Agent', xp: 12450, doorsKnocked: 342, leadsGained: 45, appointmentsSet: 18, streakDays: 5, achievements: ['Hot Spot Hunter', 'Storm Chaser'] }, - { id: 'e2', type: 'employee', empId: 'FA002', email: 'agent2@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Fiona Field', xp: 8200, doorsKnocked: 215, leadsGained: 30, appointmentsSet: 12, streakDays: 2, achievements: ['Star Closer'] }, - { id: 'e3', type: 'employee', empId: 'FA003', email: 'agent3@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Fred Flyer', xp: 2100, doorsKnocked: 85, leadsGained: 5, appointmentsSet: 2, streakDays: 0, achievements: [] }, - { id: 'e4', type: 'employee', empId: 'FA004', email: 'agent4@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Felicity Fast', xp: 15600, doorsKnocked: 410, leadsGained: 65, appointmentsSet: 24, streakDays: 8, achievements: ['Map Master', 'Hot Spot Hunter', 'Storm Chaser'] }, - { id: 'e5', type: 'employee', empId: 'FA005', email: 'agent5@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Felix Fixer', xp: 5400, doorsKnocked: 156, leadsGained: 20, appointmentsSet: 8, streakDays: 1, achievements: ['First Knock'] }, + { id: 'e1', type: 'employee', empId: 'LUP-1040', email: 'agent1@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Cody Tatum', xp: 12450, doorsKnocked: 342, leadsGained: 45, appointmentsSet: 18, streakDays: 5, achievements: ['Hot Spot Hunter', 'Storm Chaser'] }, + { id: 'e2', type: 'employee', empId: 'LUP-1041', email: 'agent2@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Hannah Reyes', xp: 8200, doorsKnocked: 215, leadsGained: 30, appointmentsSet: 12, streakDays: 2, achievements: ['Star Closer'] }, + { id: 'e3', type: 'employee', empId: 'LUP-1042', email: 'agent3@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Travis Boone', xp: 2100, doorsKnocked: 85, leadsGained: 5, appointmentsSet: 2, streakDays: 0, achievements: [] }, + { id: 'e4', type: 'employee', empId: 'LUP-1043', email: 'agent4@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Shelby Greer', xp: 15600, doorsKnocked: 410, leadsGained: 65, appointmentsSet: 24, streakDays: 8, achievements: ['Map Master', 'Hot Spot Hunter', 'Storm Chaser'] }, + { id: 'e5', type: 'employee', empId: 'LUP-1044', email: 'agent5@plano.com', password: 'password', role: 'FIELD_AGENT', name: 'Dalton Pruitt', xp: 5400, doorsKnocked: 156, leadsGained: 20, appointmentsSet: 8, streakDays: 1, achievements: ['First Knock'] }, // Admins (3 Admins) - { id: 'a1', type: 'employee', empId: 'ADM01', email: 'admin@plano.com', password: 'password', role: 'ADMIN', name: 'Adam Admin' }, - { id: 'a2', type: 'employee', empId: 'ADM02', email: 'admin2@plano.com', password: 'password', role: 'ADMIN', name: 'Amanda Manager' }, - { id: 'a3', type: 'employee', empId: 'ADM03', email: 'admin3@plano.com', password: 'password', role: 'ADMIN', name: 'Arthur Director' }, + { id: 'a1', type: 'employee', empId: 'LUP-1010', email: 'admin@plano.com', password: 'password', role: 'ADMIN', name: 'Wade Hollis' }, + { id: 'a2', type: 'employee', empId: 'LUP-1011', email: 'admin2@plano.com', password: 'password', role: 'ADMIN', name: 'Darlene Brooks' }, + { id: 'a3', type: 'employee', empId: 'LUP-1012', email: 'admin3@plano.com', password: 'password', role: 'ADMIN', name: 'Roy Schaefer' }, // --- NEW ROLES (Owners Box) --- // Owner 1 — Active, strong financials, one project under dispute @@ -673,9 +673,10 @@ const MOCK_USERS = [ id: 'own_001', type: 'owner', username: 'justin', - email: 'justin@johnsondev.com', + email: 'justin@lynkeduppro.com', password: 'password', role: 'OWNER', + empId: 'LUP-1001', name: 'Justin Johnson', companyName: 'Johnson Development Group', phone: '972-555-1234' @@ -688,6 +689,7 @@ const MOCK_USERS = [ email: 'diana@reevesconstruction.com', password: 'password', role: 'OWNER', + empId: 'LUP-1002', name: 'Diana Reeves', companyName: 'Reeves Construction Partners', phone: '214-555-5678' @@ -700,7 +702,8 @@ const MOCK_USERS = [ email: 'mike@texasbuilders.com', password: 'password', role: 'CONTRACTOR', - name: 'Mike Contractor', + empId: 'LUP-3001', + name: 'Mike Brennan', companyName: 'Texas Builders LLC', licenseNumber: 'TX-GC-123456', phone: '214-555-4567' @@ -713,7 +716,8 @@ const MOCK_USERS = [ email: 'carlos@electricpro.com', password: 'password', role: 'SUBCONTRACTOR', - name: 'Carlos Subcontractor', + empId: 'LUP-2001', + name: 'Carlos Mendoza', companyName: 'Electric Pro Services', tradeType: 'electrical', phone: '469-555-9012' @@ -738,13 +742,13 @@ const MOCK_USERS = [ // A subset also falls in the current week (Mar 15-21) for the "This Week" filter. // Amounts reflect residential storm-damage roofing jobs ($12K–$42K per deal). const MOCK_SALES_HISTORY = [ - // Frank Agent (High Revenue, Low Volume - "The Sniper") — fewer deals, bigger jobs + // Cody Tatum (High Revenue, Low Volume - "The Sniper") — fewer deals, bigger jobs { id: 'tx_1', agentId: 'e1', date: '2026-05-14', amount: 38500, status: 'closed_won' }, // this week { id: 'tx_2', agentId: 'e1', date: '2026-05-12', amount: 42000, status: 'closed_won' }, // this week { id: 'tx_3', agentId: 'e1', date: '2026-05-06', amount: 31800, status: 'closed_won' }, { id: 'tx_4', agentId: 'e1', date: '2026-05-03', amount: 0, status: 'closed_lost' }, - // Fiona Field (High Volume, Mid Revenue - "The Grinder") — more deals, consistent value + // Hannah Reyes (High Volume, Mid Revenue - "The Grinder") — more deals, consistent value { id: 'tx_5', agentId: 'e2', date: '2026-05-13', amount: 18200, status: 'closed_won' }, // this week { id: 'tx_6', agentId: 'e2', date: '2026-05-11', amount: 16800, status: 'closed_won' }, // this week { id: 'tx_7', agentId: 'e2', date: '2026-05-08', amount: 21400, status: 'closed_won' }, @@ -753,17 +757,17 @@ const MOCK_SALES_HISTORY = [ { id: 'tx_10', agentId: 'e2', date: '2026-05-02', amount: 0, status: 'closed_lost' }, { id: 'tx_11', agentId: 'e2', date: '2026-05-01', amount: 0, status: 'closed_lost' }, - // Fred Flyer (New/Low Performance) — one close this month, struggling + // Travis Boone (New/Low Performance) — one close this month, struggling { id: 'tx_12', agentId: 'e3', date: '2026-05-13', amount: 12400, status: 'closed_won' }, // this week { id: 'tx_13', agentId: 'e3', date: '2026-05-07', amount: 0, status: 'closed_lost' }, { id: 'tx_14', agentId: 'e3', date: '2026-05-04', amount: 0, status: 'closed_lost' }, - // Felicity Fast (Consistent) — reliable mid-tier producer + // Shelby Greer (Consistent) — reliable mid-tier producer { id: 'tx_15', agentId: 'e4', date: '2026-05-12', amount: 24800, status: 'closed_won' }, // this week { id: 'tx_16', agentId: 'e4', date: '2026-05-08', amount: 23200, status: 'closed_won' }, { id: 'tx_17', agentId: 'e4', date: '2026-05-05', amount: 26500, status: 'closed_won' }, - // Felix Fixer (Closer - High Win Rate) — doesn't lose, picks his battles + // Dalton Pruitt (Closer - High Win Rate) — doesn't lose, picks his battles { id: 'tx_18', agentId: 'e5', date: '2026-05-14', amount: 29500, status: 'closed_won' }, // this week { id: 'tx_19', agentId: 'e5', date: '2026-05-08', amount: 34800, status: 'closed_won' }, ]; @@ -776,7 +780,7 @@ const MOCK_SALES_HISTORY = [ // converted = verified lead that became a paying client // Dates in May 2026 — days 11-14 fall in current week, all in current month. const MOCK_CANVASSER_HISTORY = [ - // Frank Agent (e1) — solid verifier, good conversion + // Cody Tatum (e1) — solid verifier, good conversion { id: 'ck_001', agentId: 'e1', date: '2026-05-14', status: 'verified', address: '2612 Dunwick Dr' }, { id: 'ck_002', agentId: 'e1', date: '2026-05-14', status: 'converted', address: '2608 Dunwick Dr' }, { id: 'ck_003', agentId: 'e1', date: '2026-05-13', status: 'verified', address: '2604 Dunwick Dr' }, @@ -788,7 +792,7 @@ const MOCK_CANVASSER_HISTORY = [ { id: 'ck_009', agentId: 'e1', date: '2026-05-04', status: 'verified', address: '6613 Phoenix Pl' }, { id: 'ck_010', agentId: 'e1', date: '2026-05-02', status: 'converted', address: '6609 Phoenix Pl' }, - // Fiona Field (e2) — high volume, moderate verification rate + // Hannah Reyes (e2) — high volume, moderate verification rate { id: 'ck_011', agentId: 'e2', date: '2026-05-14', status: 'verified', address: '6605 Phoenix Pl' }, { id: 'ck_012', agentId: 'e2', date: '2026-05-14', status: 'unverified', address: '6601 Phoenix Pl' }, { id: 'ck_013', agentId: 'e2', date: '2026-05-13', status: 'converted', address: '6617 Phoenix Pl' }, @@ -802,14 +806,14 @@ const MOCK_CANVASSER_HISTORY = [ { id: 'ck_021', agentId: 'e2', date: '2026-05-03', status: 'verified', address: '3904 Arizona Pl' }, { id: 'ck_022', agentId: 'e2', date: '2026-05-01', status: 'unverified', address: '3900 Arizona Pl' }, - // Fred Flyer (e3) — low volume, mostly unverified (new canvasser) + // Travis Boone (e3) — low volume, mostly unverified (new canvasser) { id: 'ck_023', agentId: 'e3', date: '2026-05-14', status: 'unverified', address: '3917 Sailmaker Ln' }, { id: 'ck_024', agentId: 'e3', date: '2026-05-12', status: 'verified', address: '3913 Sailmaker Ln' }, { id: 'ck_025', agentId: 'e3', date: '2026-05-07', status: 'unverified', address: '3909 Sailmaker Ln' }, { id: 'ck_026', agentId: 'e3', date: '2026-05-05', status: 'unverified', address: '3905 Sailmaker Ln' }, { id: 'ck_027', agentId: 'e3', date: '2026-05-03', status: 'converted', address: '3901 Sailmaker Ln' }, - // Felicity Fast (e4) — top performer, best verified count + conversion + // Shelby Greer (e4) — top performer, best verified count + conversion { id: 'ck_028', agentId: 'e4', date: '2026-05-14', status: 'converted', address: '2612 Dunwick Dr' }, { id: 'ck_029', agentId: 'e4', date: '2026-05-14', status: 'verified', address: '2608 Dunwick Dr' }, { id: 'ck_030', agentId: 'e4', date: '2026-05-13', status: 'converted', address: '2604 Dunwick Dr' }, @@ -825,7 +829,7 @@ const MOCK_CANVASSER_HISTORY = [ { id: 'ck_040', agentId: 'e4', date: '2026-05-01', status: 'converted', address: '3920 Arizona Pl' }, { id: 'ck_041', agentId: 'e4', date: '2026-05-01', status: 'verified', address: '3916 Arizona Pl' }, - // Felix Fixer (e5) — selective, fewer knocks, decent conversion rate + // Dalton Pruitt (e5) — selective, fewer knocks, decent conversion rate { id: 'ck_042', agentId: 'e5', date: '2026-05-14', status: 'converted', address: '3912 Arizona Pl' }, { id: 'ck_043', agentId: 'e5', date: '2026-05-13', status: 'verified', address: '3908 Arizona Pl' }, { id: 'ck_044', agentId: 'e5', date: '2026-05-11', status: 'unverified', address: '3904 Arizona Pl' }, @@ -911,7 +915,7 @@ function generateMockMeetings() { date: new Date(Date.now() + 86400000 * 2).toISOString().split('T')[0], // 2 days from now time: '14:00', status: 'Scheduled', - agentName: 'Frank Agent', + agentName: 'Cody Tatum', notes: 'Initial Roof Inspection', issueDescription: 'Noticed missing shingles after last storm.', customerComments: 'Gate code is 1234.', @@ -927,7 +931,7 @@ function generateMockMeetings() { date: new Date(Date.now() - 86400000 * 15).toISOString().split('T')[0], // 15 days ago time: '10:00', status: 'Completed', - agentName: 'Fiona Field', + agentName: 'Hannah Reyes', dealValue: 1500, notes: 'Minor repairs completed. Payment received.', issueDescription: 'Leak in garage.', @@ -943,7 +947,7 @@ function generateMockMeetings() { date: new Date(Date.now() - 86400000 * 45).toISOString().split('T')[0], // 45 days ago time: '11:00', status: 'Completed', - agentName: 'Frank Agent', + agentName: 'Cody Tatum', dealValue: 0, notes: 'Consultation - Quote provided.', issueDescription: 'General inspection.', @@ -966,7 +970,7 @@ const MOCK_OWNERS = [ id: 'own_001', companyName: 'Johnson Development Group', primaryContact: 'Justin Johnson', - email: 'justin@johnsondev.com', + email: 'justin@lynkeduppro.com', phone: '972-555-1234', companyType: 'Real Estate Developer', portfolioSize: 6, @@ -1081,6 +1085,7 @@ const MOCK_OWNERS = [ const MOCK_PERSONNEL = [ { id: 'p1', + empId: 'LUP-1030', name: 'Jesus Gonzales', role: 'W2_EMPLOYEE', email: 'jesus@lynkeduppro.com', @@ -1104,7 +1109,8 @@ const MOCK_PERSONNEL = [ }, { id: 'p2', - name: 'Sarah Sales', + empId: 'LUP-1031', + name: 'Sarah Calloway', role: '1099_SALES_REP', email: 'sarah@lynkeduppro.com', phone: '214-555-0102', @@ -1913,15 +1919,15 @@ const MOCK_DOCUMENTS = [ }, { id: 'd3', - name: 'Sarah Sales - Pay Plan Agreement', + name: 'Sarah Calloway - Pay Plan Agreement', entityId: 'p2', entityType: 'personnel', - entityName: 'Sarah Sales', + entityName: 'Sarah Calloway', vendorId: 'v1', documentType: 'PAY_PLAN', fileName: 'Sarah_PayPlan_Signed.pdf', fileUrl: '#', - uploadedBy: 'Sarah Sales', + uploadedBy: 'Sarah Calloway', uploadedAt: '2026-02-14', expirationDate: '2027-02-14', status: 'pending_review', @@ -2139,10 +2145,10 @@ const MOCK_PROJECTS = [ ], teamMembers: [ { id: 'jtm_001_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: { type: 'percent_gross', rate: 12 } }, - { id: 'jtm_001_2', userId: 'con_001', name: 'Mike Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_001_3', userId: 'sub_001', name: 'Carlos Subcontractor', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_001_4', userId: 'e1', name: 'Frank Agent', email: 'agent1@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null }, - { id: 'jtm_001_5', userId: 'p2', name: 'Sarah Sales', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Estimator', status: 'pending', commissionEnabled: true, jobCommission: null } + { id: 'jtm_001_2', userId: 'con_001', name: 'Mike Brennan', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, + { 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 } ] }, @@ -2195,7 +2201,7 @@ 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, 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 } ] }, @@ -2273,9 +2279,9 @@ const MOCK_PROJECTS = [ { name: 'Equipment Spec Sheets', url: '#', type: 'specification' } ], teamMembers: [ - { id: 'jtm_003_1', userId: 'p2', name: 'Sarah Sales', 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Project Manager', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_003_3', userId: 'sub_001', name: 'Carlos Subcontractor', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null } + { 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 } ] }, @@ -2365,8 +2371,8 @@ const MOCK_PROJECTS = [ ], teamMembers: [ { 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_004_3', userId: 'e2', name: 'Fiona Field', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, jobCommission: null } + { 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 } ] }, @@ -2442,8 +2448,8 @@ const MOCK_PROJECTS = [ { name: 'Site Photos - Defective Panels', url: '#', type: 'photos' } ], teamMembers: [ - { id: 'jtm_005_1', userId: 'p2', name: 'Sarah Sales', 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } + { 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 } ] }, @@ -2494,7 +2500,7 @@ 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 Subcontractor', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, 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 } ] }, @@ -2597,9 +2603,9 @@ const MOCK_PROJECTS = [ ], teamMembers: [ { id: 'jtm_007_1', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', orgRole: 'W2_EMPLOYEE', jobRole: 'Project Manager', status: 'active', commissionEnabled: true, jobCommission: { type: 'percent_gross', rate: 5 } }, - { id: 'jtm_007_2', userId: 'con_001', name: 'Mike Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_007_3', userId: 'sub_001', name: 'Carlos Subcontractor', email: 'carlos@electricpro.com', orgRole: 'SUBCONTRACTOR', jobRole: 'Subcontractor', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_007_4', userId: 'e4', name: 'Felicity Fast', email: 'agent4@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: true, jobCommission: null } + { 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 } ] }, @@ -2657,8 +2663,8 @@ const MOCK_PROJECTS = [ { name: 'Soil Analysis Report', url: '#', type: 'report' } ], teamMembers: [ - { id: 'jtm_008_1', userId: 'p2', name: 'Sarah Sales', 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null } + { 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 } ] }, @@ -2710,7 +2716,7 @@ 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: 'Fiona Field', email: 'agent2@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Inspector', status: 'active', commissionEnabled: false, 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 } ] }, @@ -2761,9 +2767,9 @@ const MOCK_PROJECTS = [ { name: 'Final Payment Release', url: '#', type: 'invoice' } ], teamMembers: [ - { id: 'jtm_010_1', userId: 'p2', name: 'Sarah Sales', 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', status: 'active', commissionEnabled: false, jobCommission: null }, - { id: 'jtm_010_3', userId: 'e5', name: 'Felix Fixer', email: 'agent5@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'pending', commissionEnabled: false, jobCommission: null } + { 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 } ] }, @@ -2823,7 +2829,7 @@ 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 Contractor', email: 'mike@texasbuilders.com', orgRole: 'CONTRACTOR', jobRole: 'Lead Installer', 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 } ] }, @@ -2876,8 +2882,8 @@ const MOCK_PROJECTS = [ { name: 'Material Delivery Receipt', url: '#', type: 'receipt' } ], teamMembers: [ - { id: 'jtm_012_1', userId: 'p2', name: 'Sarah Sales', email: 'sarah@lynkeduppro.com', orgRole: '1099_SALES_REP', jobRole: 'Sales Rep', status: 'active', commissionEnabled: true, jobCommission: null }, - { id: 'jtm_012_2', userId: 'e3', name: 'Fred Flyer', email: 'agent3@plano.com', orgRole: 'FIELD_AGENT', jobRole: 'Canvasser', status: 'active', commissionEnabled: false, jobCommission: null } + { 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 } ] } ]; @@ -3854,12 +3860,12 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_001', name: 'Derek Holloway', address: '2814 Ravenswood Dr, Plano TX 75023', phone: '(972) 555-0101', email: 'derek.holloway@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_new', bucketId: null, notes: 'Hail damage from March storm. Insurance adjuster coming next week.', createdDate: '2026-03-31', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-31', note: 'Lead created via door knock — visible hail damage on ridge line.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-31', note: 'Lead created via door knock — visible hail damage on ridge line.' }, ], }, { @@ -3878,24 +3884,24 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_003', name: 'Antonio Reyes', address: '1122 Custer Rd, Plano TX 75075', phone: '(972) 555-0103', email: 'a.reyes@outlook.com', jobType: 'Gutter Replacement', insuranceType: 'Retail', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_new', bucketId: null, notes: 'Referred by neighbor on Oak Creek Blvd. Wants full gutter system.', createdDate: '2026-04-02', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-04-02', note: 'Referral from existing client Tom Hargrove.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-04-02', note: 'Referral from existing client Tom Hargrove.' }, ], }, { id: 'kl_004', name: 'Sylvia Nguyen', address: '3308 Roundrock Trl, Plano TX 75023', phone: '(972) 555-0104', email: 'sylvia.nguyen@icloud.com', jobType: 'Siding Repair', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_new', bucketId: null, notes: 'Storm damage to siding on north face. Photos sent.', createdDate: '2026-04-03', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-04-03', note: 'Canvassing lead — storm damage clearly visible.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-04-03', note: 'Canvassing lead — storm damage clearly visible.' }, ], }, { @@ -3914,12 +3920,12 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_006', name: 'Carolyn Estrada', address: '6013 Ohio Dr, Plano TX 75093', phone: '(972) 555-0106', email: 'carolyn.e@gmail.com', jobType: 'Window Replacement', insuranceType: 'Retail', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_new', bucketId: null, notes: 'Wants 4 windows replaced. Budget is flexible.', createdDate: '2026-04-05', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-04-05', note: 'Door knock — homeowner interested in window upgrade.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-04-05', note: 'Door knock — homeowner interested in window upgrade.' }, ], }, @@ -3928,65 +3934,65 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_007', name: 'Marcus Tillman', address: '2201 Willow Bend Dr, Plano TX 75093', phone: '(972) 555-0107', email: 'mtillman@hotmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_contacted', bucketId: null, notes: 'Spoke on the phone. Wants appointment next Tuesday.', createdDate: '2026-03-25', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-25', note: 'Canvassing — hail dents visible on ridge cap.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-27', note: 'Spoke by phone, confirmed homeowner interest. Appointment TBD.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-25', note: 'Canvassing — hail dents visible on ridge cap.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-27', note: 'Spoke by phone, confirmed homeowner interest. Appointment TBD.' }, ], }, { id: 'kl_008', name: 'Diane Kowalski', address: '815 Independence Pkwy, Plano TX 75023', phone: '(972) 555-0108', email: 'diane.k@gmail.com', jobType: 'Roof Inspection', insuranceType: 'Retail', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_contacted', bucketId: null, notes: 'Older roof, no storm damage. Wants inspection for peace of mind.', createdDate: '2026-03-26', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-03-26', note: 'Website form submission.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-28', note: 'Left voicemail and sent email. Customer responded via email.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-03-26', note: 'Website form submission.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-28', note: 'Left voicemail and sent email. Customer responded via email.' }, ], }, { id: 'kl_009', name: 'Joel Fernandez', address: '3901 Legacy Dr, Plano TX 75023', phone: '(972) 555-0109', email: 'joel.f@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_contacted', bucketId: null, notes: 'Insurance claim in process. Wants estimate ASAP.', createdDate: '2026-03-24', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-24', note: 'Door knock — wind damage to siding panels.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-26', note: 'Phone call completed. Adjuster visit scheduled for Mar 30.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-24', note: 'Door knock — wind damage to siding panels.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-26', note: 'Phone call completed. Adjuster visit scheduled for Mar 30.' }, ], }, { id: 'kl_010', name: 'Patricia Yuen', address: '7742 Kings Rd, Plano TX 75024', phone: '(972) 555-0110', email: 'pyuen@outlook.com', jobType: 'Gutter Repair', insuranceType: 'Retail', - assignedAgentId: 'e3', assignedAgentName: 'Fred Flyer', + assignedAgentId: 'e3', assignedAgentName: 'Travis Boone', columnId: 'kc_contacted', bucketId: null, notes: 'Gutters pulling away from fascia. Straightforward repair job.', createdDate: '2026-03-27', activity: [ - { from: null, to: 'New Lead', by: 'Fred Flyer', date: '2026-03-27', note: 'Referral from neighborhood Facebook group.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fred Flyer', date: '2026-03-29', note: 'Quick call — confirmed issue and availability. Working on appointment.' }, + { from: null, to: 'New Lead', by: 'Travis Boone', date: '2026-03-27', note: 'Referral from neighborhood Facebook group.' }, + { from: 'New Lead', to: 'Contacted', by: 'Travis Boone', date: '2026-03-29', note: 'Quick call — confirmed issue and availability. Working on appointment.' }, ], }, { id: 'kl_011', name: 'Gerald Obi', address: '5220 Midway Rd, Plano TX 75093', phone: '(972) 555-0111', email: 'gerald.obi@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_contacted', bucketId: null, notes: 'Large home — 3,200 sq ft. Multiple storm claims history.', createdDate: '2026-03-22', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-22', note: 'Canvassing — prior storm claim visible in public records.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-25', note: 'Met in person at door. Very interested — asked for references.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-22', note: 'Canvassing — prior storm claim visible in public records.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-25', note: 'Met in person at door. Very interested — asked for references.' }, ], }, @@ -3995,86 +4001,86 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_012', name: 'Vanessa Obrien', address: '1450 Park Blvd, Plano TX 75074', phone: '(972) 555-0112', email: 'vanessa.ob@icloud.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_appt', bucketId: null, notes: 'Appointment Apr 9 at 10am. Adjuster already completed visit.', createdDate: '2026-03-18', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-18', note: 'Storm canvassing — visible hail damage.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-20', note: 'Phone call — very interested, adjuster already came out.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-03-22', note: 'Appointment confirmed for Apr 9 at 10am.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-18', note: 'Storm canvassing — visible hail damage.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-20', note: 'Phone call — very interested, adjuster already came out.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-03-22', note: 'Appointment confirmed for Apr 9 at 10am.' }, ], }, { id: 'kl_013', name: 'Thomas Greer', address: '892 Mapleshade Ln, Plano TX 75075', phone: '(972) 555-0113', email: 'thomas.g@yahoo.com', jobType: 'Roof Inspection', insuranceType: 'Retail', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_appt', bucketId: null, notes: 'Appointment Apr 8 at 2pm. Retired homeowner, very detail-oriented.', createdDate: '2026-03-20', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-03-20', note: 'Referral from existing client.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-22', note: 'Email exchange — wants full report after inspection.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-03-25', note: 'Confirmed Apr 8 at 2pm via email.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-03-20', note: 'Referral from existing client.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-22', note: 'Email exchange — wants full report after inspection.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-03-25', note: 'Confirmed Apr 8 at 2pm via email.' }, ], }, { id: 'kl_014', name: 'Lashonda Webb', address: '3015 Plano Pkwy, Plano TX 75074', phone: '(972) 555-0114', email: 'lashonda.w@gmail.com', jobType: 'Siding + Gutters', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_appt', bucketId: null, notes: 'Combo job — siding and gutters. Apr 10 morning slot.', createdDate: '2026-03-15', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-15', note: 'Door knock — wind damage to siding and gutters overflowing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-17', note: 'Called and texted. Customer confirmed she filed insurance.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-03-21', note: 'Apr 10 morning slot — customer will have spouse present.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-15', note: 'Door knock — wind damage to siding and gutters overflowing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-17', note: 'Called and texted. Customer confirmed she filed insurance.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-03-21', note: 'Apr 10 morning slot — customer will have spouse present.' }, ], }, { id: 'kl_015', name: 'Winston Park', address: '6601 Ohio Dr, Plano TX 75093', phone: '(972) 555-0115', email: 'wpark@outlook.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_appt', bucketId: null, notes: 'Large flat-roof section at the back. Appointment Apr 11.', createdDate: '2026-03-19', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-03-19', note: 'Website lead — searched storm damage repair.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-03-21', note: 'Spoke on phone. Mentioned flat roof section in addition to pitched.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-03-24', note: 'Confirmed Apr 11 at 9am. Will need extra time for flat section.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-03-19', note: 'Website lead — searched storm damage repair.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-03-21', note: 'Spoke on phone. Mentioned flat roof section in addition to pitched.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-03-24', note: 'Confirmed Apr 11 at 9am. Will need extra time for flat section.' }, ], }, { id: 'kl_016', name: 'Ingrid Solis', address: '2244 Aster Ct, Plano TX 75025', phone: '(972) 555-0116', email: 'ingrid.s@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_appt', bucketId: null, notes: 'Cash purchase — no insurance. Appointment Apr 12.', createdDate: '2026-03-23', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-23', note: 'Referral. Cash buyer — no insurance involved.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-25', note: 'Spoke briefly. She is very decisive — ready to move fast.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-03-27', note: 'Apr 12 at 11am confirmed.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-23', note: 'Referral. Cash buyer — no insurance involved.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-25', note: 'Spoke briefly. She is very decisive — ready to move fast.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-03-27', note: 'Apr 12 at 11am confirmed.' }, ], }, { id: 'kl_017', name: 'Darnell Brooks', address: '4408 Springbrook Dr, Plano TX 75024', phone: '(972) 555-0117', email: 'd.brooks@yahoo.com', jobType: 'Chimney + Roof Repair', insuranceType: 'Insurance', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_appt', bucketId: null, notes: 'Chimney flashing leaking badly. Appointment rescheduled twice — Apr 14 final.', createdDate: '2026-03-10', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-03-10', note: 'Inbound call — chimney leak causing interior ceiling damage.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-12', note: 'Full conversation — insurance claim open. Adjuster not yet assigned.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-03-14', note: 'Apr 1 appointment set.' }, - { from: 'Appt Scheduled', to: 'Contacted', by: 'Fiona Field', date: '2026-03-30', note: 'Customer rescheduled — work conflict. Moved back to Contacted.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-04-01', note: 'Rescheduled again — Apr 14 this time. Confirmed via text.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-03-10', note: 'Inbound call — chimney leak causing interior ceiling damage.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-12', note: 'Full conversation — insurance claim open. Adjuster not yet assigned.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-03-14', note: 'Apr 1 appointment set.' }, + { from: 'Appt Scheduled', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-30', note: 'Customer rescheduled — work conflict. Moved back to Contacted.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-04-01', note: 'Rescheduled again — Apr 14 this time. Confirmed via text.' }, ], }, @@ -4083,75 +4089,75 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_018', name: 'Gloria Hutchins', address: '1738 Roundrock Trl, Plano TX 75023', phone: '(972) 555-0118', email: 'gloria.h@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_estimate', bucketId: null, notes: 'Estimate sent Mar 28. Waiting on her to review with husband.', createdDate: '2026-03-05', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-05', note: 'Canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-07', note: 'Phone call — confirmed hail damage.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-03-10', note: 'Appointment set for Mar 15.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-03-28', note: 'Inspection completed. Estimate emailed + printed copy left.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-05', note: 'Canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-07', note: 'Phone call — confirmed hail damage.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-03-10', note: 'Appointment set for Mar 15.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-03-28', note: 'Inspection completed. Estimate emailed + printed copy left.' }, ], }, { id: 'kl_019', name: 'Devon Mathis', address: '5902 Braewood Dr, Plano TX 75093', phone: '(972) 555-0119', email: 'devon.m@hotmail.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_estimate', bucketId: null, notes: 'Estimate under review. Customer comparing quotes.', createdDate: '2026-03-08', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-08', note: 'Storm canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-10', note: 'Met at door — comparing two companies.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-03-13', note: 'Appointment Mar 18.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-03-25', note: 'Estimate sent via email. Mentioned competitor quote is $1,200 less.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-08', note: 'Storm canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-10', note: 'Met at door — comparing two companies.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-03-13', note: 'Appointment Mar 18.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-03-25', note: 'Estimate sent via email. Mentioned competitor quote is $1,200 less.' }, ], }, { id: 'kl_020', name: 'Karen Blankenship', address: '3127 Arbor Creek Dr, Plano TX 75025', phone: '(972) 555-0120', email: 'karen.b@yahoo.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_estimate', bucketId: null, notes: 'Cash deal. Estimate $24K. Very interested — just reviewing financing options.', createdDate: '2026-03-12', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-03-12', note: 'Referral from sister who is an existing client.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-14', note: 'Long first call — very motivated buyer.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-03-16', note: 'Inspection Mar 20 at 9am.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fiona Field', date: '2026-03-22', note: 'Detailed estimate sent. Customer asked about payment plans.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-03-12', note: 'Referral from sister who is an existing client.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-14', note: 'Long first call — very motivated buyer.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-03-16', note: 'Inspection Mar 20 at 9am.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Hannah Reyes', date: '2026-03-22', note: 'Detailed estimate sent. Customer asked about payment plans.' }, ], }, { id: 'kl_021', name: 'Lionel Chambers', address: '720 Coit Rd, Plano TX 75075', phone: '(972) 555-0121', email: 'lionel.c@gmail.com', jobType: 'Gutters + Fascia', insuranceType: 'Insurance', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_estimate', bucketId: null, notes: 'Adjuster approved full replacement. Estimate matches scope perfectly.', createdDate: '2026-03-01', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-03-01', note: 'Referral — gutters completely detached on one side.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-03-03', note: 'Spoke on phone — insurance claim already filed.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-03-05', note: 'Mar 10 appointment.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felix Fixer', date: '2026-03-18', note: 'Estimate emailed. Adjuster scope matches ours exactly — good sign.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-03-01', note: 'Referral — gutters completely detached on one side.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-03-03', note: 'Spoke on phone — insurance claim already filed.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-03-05', note: 'Mar 10 appointment.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Dalton Pruitt', date: '2026-03-18', note: 'Estimate emailed. Adjuster scope matches ours exactly — good sign.' }, ], }, { id: 'kl_022', name: 'Ruthanne Patel', address: '4321 Hedgcoxe Rd, Plano TX 75024', phone: '(972) 555-0122', email: 'rpatel@outlook.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_estimate', bucketId: null, notes: 'Estimate sent 3 weeks ago. Not responding to follow-ups.', createdDate: '2026-02-20', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-02-20', note: 'Canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-02-22', note: 'Brief call — seemed interested.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-02-25', note: 'Mar 1 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-03-10', note: 'Estimate sent. No response to 3 follow-up texts since.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-02-20', note: 'Canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-02-22', note: 'Brief call — seemed interested.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-02-25', note: 'Mar 1 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-03-10', note: 'Estimate sent. No response to 3 follow-up texts since.' }, ], }, @@ -4160,82 +4166,82 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_023', name: 'Charlotte Norris', address: '2908 Roundabout Ln, Plano TX 75023', phone: '(972) 555-0123', email: 'charlotte.n@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_signed', bucketId: null, notes: 'Signed Mar 22. Install scheduled for Apr 14.', createdDate: '2026-03-01', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-01', note: 'Storm canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-03', note: 'Phone call — eager to move quickly.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-03-05', note: 'Inspection Mar 8.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-03-10', note: 'Estimate sent — $18,200.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felicity Fast', date: '2026-03-22', note: 'Contract signed! Install Apr 14. Deposit received.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-01', note: 'Storm canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-03', note: 'Phone call — eager to move quickly.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-03-05', note: 'Inspection Mar 8.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-03-10', note: 'Estimate sent — $18,200.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Shelby Greer', date: '2026-03-22', note: 'Contract signed! Install Apr 14. Deposit received.' }, ], }, { id: 'kl_024', name: 'Henry Castaneda', address: '5614 Ridgewood Dr, Plano TX 75093', phone: '(972) 555-0124', email: 'hcastaneda@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_signed', bucketId: null, notes: 'Signed. Full siding replacement — 2,400 sq ft. Production queue.', createdDate: '2026-02-28', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-02-28', note: 'Referral.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-02', note: 'Phone call and site visit same day.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-03-04', note: 'Mar 7 appointment.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fiona Field', date: '2026-03-12', note: 'Estimate $31,500 for full siding.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Fiona Field', date: '2026-03-20', note: 'Signed. Insurance approved full scope.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-02-28', note: 'Referral.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-02', note: 'Phone call and site visit same day.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-03-04', note: 'Mar 7 appointment.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Hannah Reyes', date: '2026-03-12', note: 'Estimate $31,500 for full siding.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Hannah Reyes', date: '2026-03-20', note: 'Signed. Insurance approved full scope.' }, ], }, { id: 'kl_025', name: 'Yvonne Blackwell', address: '3401 Parker Rd, Plano TX 75023', phone: '(972) 555-0125', email: 'yblackwell@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_signed', bucketId: null, notes: 'Cash client. Signed fast — paid 50% deposit upfront.', createdDate: '2026-03-05', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-05', note: 'Referral — cash buyer, wants premium materials.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-06', note: 'Met same day — very decisive.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-03-07', note: 'Next-day inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-03-09', note: 'Same-day estimate — $27,800 for full replacement + ice/water barrier.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Frank Agent', date: '2026-03-11', note: 'Signed within 48 hrs. 50% deposit paid.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-05', note: 'Referral — cash buyer, wants premium materials.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-06', note: 'Met same day — very decisive.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-03-07', note: 'Next-day inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-03-09', note: 'Same-day estimate — $27,800 for full replacement + ice/water barrier.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Cody Tatum', date: '2026-03-11', note: 'Signed within 48 hrs. 50% deposit paid.' }, ], }, { id: 'kl_026', name: 'Emmanuel Okafor', address: '4812 Mapleshade Ln, Plano TX 75075', phone: '(972) 555-0126', email: 'e.okafor@outlook.com', jobType: 'Roof + Gutters', insuranceType: 'Insurance', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_signed', bucketId: null, notes: 'Combined roof and gutter job. Production scheduled Apr 18.', createdDate: '2026-03-03', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-03-03', note: 'Storm canvassing — gutters completely detached on west side.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-03-05', note: 'Called and texted. Confirmed both roof and gutter damage.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-03-08', note: 'Mar 12 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felix Fixer', date: '2026-03-15', note: 'Combined estimate $22,400 sent.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felix Fixer', date: '2026-03-25', note: 'Signed after adjuster confirmation. Install Apr 18.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-03-03', note: 'Storm canvassing — gutters completely detached on west side.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-03-05', note: 'Called and texted. Confirmed both roof and gutter damage.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-03-08', note: 'Mar 12 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Dalton Pruitt', date: '2026-03-15', note: 'Combined estimate $22,400 sent.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Dalton Pruitt', date: '2026-03-25', note: 'Signed after adjuster confirmation. Install Apr 18.' }, ], }, { id: 'kl_027', name: 'Adriana Voss', address: '1820 Custer Rd, Plano TX 75075', phone: '(972) 555-0127', email: 'adriana.v@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_signed', bucketId: null, notes: 'Signed after lengthy negotiation on supplemental items.', createdDate: '2026-02-15', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-02-15', note: 'Canvassing after January wind event.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-02-17', note: 'Called — open to inspection.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-02-19', note: 'Feb 22 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-02-25', note: 'Estimate sent $19,600.' }, - { from: 'Estimate Sent', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-05', note: 'Customer pushed back on supplement items — moved back to review.' }, - { from: 'Contacted', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-03-10', note: 'Revised estimate sent after supplement agreement with adjuster.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felicity Fast', date: '2026-03-28', note: 'Signed after adjuster approved supplemental items.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-02-15', note: 'Canvassing after January wind event.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-02-17', note: 'Called — open to inspection.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-02-19', note: 'Feb 22 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-02-25', note: 'Estimate sent $19,600.' }, + { from: 'Estimate Sent', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-05', note: 'Customer pushed back on supplement items — moved back to review.' }, + { from: 'Contacted', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-03-10', note: 'Revised estimate sent after supplement agreement with adjuster.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Shelby Greer', date: '2026-03-28', note: 'Signed after adjuster approved supplemental items.' }, ], }, @@ -4244,102 +4250,102 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_028', name: 'Marvin Delgado', address: '6820 Windhaven Pkwy, Plano TX 75024', phone: '(972) 555-0128', email: 'mdelgado@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_progress', bucketId: null, notes: 'Tear-off complete. New decking going on today.', createdDate: '2026-02-10', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-02-10', note: 'Storm canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-02-12', note: 'Call completed.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-02-14', note: 'Feb 17 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-02-20', note: 'Estimate sent $16,800.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Frank Agent', date: '2026-02-28', note: 'Signed. Production team notified.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-03-18', note: 'Production started — tear-off crew on site.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-02-10', note: 'Storm canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-02-12', note: 'Call completed.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-02-14', note: 'Feb 17 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-02-20', note: 'Estimate sent $16,800.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Cody Tatum', date: '2026-02-28', note: 'Signed. Production team notified.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-03-18', note: 'Production started — tear-off crew on site.' }, ], }, { id: 'kl_029', name: 'Sandra Tran', address: '2506 Springpark Dr, Plano TX 75023', phone: '(972) 555-0129', email: 's.tran@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_progress', bucketId: null, notes: 'Day 3 of install. On track for completion Friday.', createdDate: '2026-02-08', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-02-08', note: 'Referral.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-02-10', note: 'Initial call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-02-12', note: 'Feb 15 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fiona Field', date: '2026-02-18', note: 'Estimate $28,500 for full siding.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Fiona Field', date: '2026-02-25', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-03-25', note: 'Siding crew on site — Day 1.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-02-08', note: 'Referral.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-02-10', note: 'Initial call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-02-12', note: 'Feb 15 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Hannah Reyes', date: '2026-02-18', note: 'Estimate $28,500 for full siding.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Hannah Reyes', date: '2026-02-25', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-03-25', note: 'Siding crew on site — Day 1.' }, ], }, { id: 'kl_030', name: 'Reginald Hopper', address: '1504 Estates Dr, Plano TX 75093', phone: '(972) 555-0130', email: 'reg.hopper@icloud.com', jobType: 'Roof + Gutters', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_progress', bucketId: null, notes: 'Roofing done. Gutters crew arriving tomorrow.', createdDate: '2026-02-05', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-02-05', note: 'Door knock.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-02-07', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-02-10', note: 'Feb 14 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-02-17', note: 'Estimate sent $21,200.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felicity Fast', date: '2026-02-24', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Amanda Manager',date: '2026-03-20', note: 'Production underway — roofing crew Day 1.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-02-05', note: 'Door knock.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-02-07', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-02-10', note: 'Feb 14 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-02-17', note: 'Estimate sent $21,200.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Shelby Greer', date: '2026-02-24', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Darlene Brooks',date: '2026-03-20', note: 'Production underway — roofing crew Day 1.' }, ], }, { id: 'kl_031', name: 'Nadia Thornton', address: '5150 Preston Rd, Plano TX 75024', phone: '(972) 555-0131', email: 'nadia.t@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_progress', bucketId: null, notes: 'Premium GAF Timberline HDZ install. Custom color.', createdDate: '2026-02-12', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-02-12', note: 'Referral — high-end home.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-02-14', note: 'Met in person. Requested premium material options.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-02-17', note: 'Feb 20 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felix Fixer', date: '2026-02-24', note: 'Premium estimate $34,500 including ice/water and lifetime warranty.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felix Fixer', date: '2026-03-03', note: 'Signed — wants Barkwood color. Special order placed.' }, - { from: 'Signed', to: 'In Progress', by: 'Amanda Manager',date: '2026-03-28', note: 'Materials arrived. Install started today.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-02-12', note: 'Referral — high-end home.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-02-14', note: 'Met in person. Requested premium material options.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-02-17', note: 'Feb 20 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Dalton Pruitt', date: '2026-02-24', note: 'Premium estimate $34,500 including ice/water and lifetime warranty.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Dalton Pruitt', date: '2026-03-03', note: 'Signed — wants Barkwood color. Special order placed.' }, + { from: 'Signed', to: 'In Progress', by: 'Darlene Brooks',date: '2026-03-28', note: 'Materials arrived. Install started today.' }, ], }, { id: 'kl_032', name: 'Clifford Aguilar', address: '3822 Haverwood Ln, Plano TX 75023', phone: '(972) 555-0132', email: 'c.aguilar@outlook.com', jobType: 'Siding Repair', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_progress', bucketId: null, notes: 'Partial siding repair only — south and west faces. 2 days left.', createdDate: '2026-02-18', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-02-18', note: 'Storm canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-02-20', note: 'Called.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-02-22', note: 'Feb 25 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-02-28', note: 'Partial repair estimate $9,400.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Frank Agent', date: '2026-03-07', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-04-01', note: 'Crew on site — south face complete.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-02-18', note: 'Storm canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-02-20', note: 'Called.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-02-22', note: 'Feb 25 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-02-28', note: 'Partial repair estimate $9,400.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Cody Tatum', date: '2026-03-07', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-04-01', note: 'Crew on site — south face complete.' }, ], }, { id: 'kl_033', name: 'Tamara Owens', address: '2010 Oak Creek Blvd, Plano TX 75023', phone: '(972) 555-0133', email: 'tamara.o@yahoo.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_progress', bucketId: null, notes: 'Large job — 3,600 sq ft. Day 1 of 3.', createdDate: '2026-02-01', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-02-01', note: 'Referral — large home, significant hail damage.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-02-03', note: 'Met in person — urgent, water coming in.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-02-04', note: 'Next-day inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fiona Field', date: '2026-02-08', note: 'Estimate $42,000 for 3,600 sq ft.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Fiona Field', date: '2026-02-15', note: 'Signed — largest job this quarter.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-04-05', note: 'Production started — 3-day job. Two crews deployed.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-02-01', note: 'Referral — large home, significant hail damage.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-02-03', note: 'Met in person — urgent, water coming in.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-02-04', note: 'Next-day inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Hannah Reyes', date: '2026-02-08', note: 'Estimate $42,000 for 3,600 sq ft.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Hannah Reyes', date: '2026-02-15', note: 'Signed — largest job this quarter.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-04-05', note: 'Production started — 3-day job. Two crews deployed.' }, ], }, @@ -4348,92 +4354,92 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_034', name: 'Craig Singleton', address: '4110 Lorimar Dr, Plano TX 75093', phone: '(972) 555-0134', email: 'craig.s@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_complete', bucketId: null, notes: 'Job complete. Final walkthrough done. Client extremely happy.', createdDate: '2026-01-15', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-01-15', note: 'Canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-01-17', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-01-20', note: 'Jan 23 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-01-25', note: 'Estimate $17,200.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Frank Agent', date: '2026-02-01', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-02-20', note: 'Install Day 1.' }, - { from: 'In Progress', to: 'Complete', by: 'Adam Admin', date: '2026-03-01', note: 'Job complete. Final walkthrough passed. Client left 5-star review.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-01-15', note: 'Canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-01-17', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-01-20', note: 'Jan 23 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-01-25', note: 'Estimate $17,200.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Cody Tatum', date: '2026-02-01', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-02-20', note: 'Install Day 1.' }, + { from: 'In Progress', to: 'Complete', by: 'Wade Hollis', date: '2026-03-01', note: 'Job complete. Final walkthrough passed. Client left 5-star review.' }, ], }, { id: 'kl_035', name: 'Bertha Fleming', address: '6230 West Parker Rd, Plano TX 75093', phone: '(972) 555-0135', email: 'bertha.f@hotmail.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_complete', bucketId: null, notes: 'Complete. Insurance check received and deposited.', createdDate: '2026-01-10', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-01-10', note: 'Referral.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-01-12', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-01-14', note: 'Jan 17 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-01-20', note: 'Estimate $26,400.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felicity Fast', date: '2026-01-28', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Amanda Manager',date: '2026-02-15', note: 'Production started.' }, - { from: 'In Progress', to: 'Complete', by: 'Amanda Manager',date: '2026-02-22', note: 'Complete. Insurance proceeds processed.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-01-10', note: 'Referral.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-01-12', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-01-14', note: 'Jan 17 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-01-20', note: 'Estimate $26,400.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Shelby Greer', date: '2026-01-28', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Darlene Brooks',date: '2026-02-15', note: 'Production started.' }, + { from: 'In Progress', to: 'Complete', by: 'Darlene Brooks',date: '2026-02-22', note: 'Complete. Insurance proceeds processed.' }, ], }, { id: 'kl_036', name: 'Oliver Stanton', address: '3750 Legacy Dr, Plano TX 75023', phone: '(972) 555-0136', email: 'oliver.st@outlook.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_complete', bucketId: null, notes: 'Cash deal done. Referral bonus owed to Oliver per agreement.', createdDate: '2026-01-20', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-01-20', note: 'Referral — cash buyer.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-01-22', note: 'Same-day call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fiona Field', date: '2026-01-23', note: 'Jan 25 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fiona Field', date: '2026-01-27', note: 'Estimate $22,100.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Fiona Field', date: '2026-01-30', note: 'Signed within 72 hrs. Full payment upfront.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-02-18', note: 'Install started.' }, - { from: 'In Progress', to: 'Complete', by: 'Adam Admin', date: '2026-02-20', note: 'Complete — quick 2-day job. Outstanding quality.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-01-20', note: 'Referral — cash buyer.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-01-22', note: 'Same-day call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Hannah Reyes', date: '2026-01-23', note: 'Jan 25 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Hannah Reyes', date: '2026-01-27', note: 'Estimate $22,100.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Hannah Reyes', date: '2026-01-30', note: 'Signed within 72 hrs. Full payment upfront.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-02-18', note: 'Install started.' }, + { from: 'In Progress', to: 'Complete', by: 'Wade Hollis', date: '2026-02-20', note: 'Complete — quick 2-day job. Outstanding quality.' }, ], }, { id: 'kl_037', name: 'Daphne Garrett', address: '1912 Mira Vista Dr, Plano TX 75025', phone: '(972) 555-0137', email: 'daphne.g@gmail.com', jobType: 'Gutters + Fascia', insuranceType: 'Insurance', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_complete', bucketId: null, notes: 'Complete. Customer requested referral card — strong close.', createdDate: '2026-01-25', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-01-25', note: 'Door knock.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-01-27', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-01-29', note: 'Feb 1 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felix Fixer', date: '2026-02-04', note: 'Estimate $8,900.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felix Fixer', date: '2026-02-10', note: 'Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Adam Admin', date: '2026-02-28', note: 'Install started.' }, - { from: 'In Progress', to: 'Complete', by: 'Adam Admin', date: '2026-03-02', note: 'Job done. Customer gave referral card to 3 neighbors.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-01-25', note: 'Door knock.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-01-27', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-01-29', note: 'Feb 1 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Dalton Pruitt', date: '2026-02-04', note: 'Estimate $8,900.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Dalton Pruitt', date: '2026-02-10', note: 'Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Wade Hollis', date: '2026-02-28', note: 'Install started.' }, + { from: 'In Progress', to: 'Complete', by: 'Wade Hollis', date: '2026-03-02', note: 'Job done. Customer gave referral card to 3 neighbors.' }, ], }, { id: 'kl_038', name: 'Nathaniel Cruz', address: '5808 Tennyson Pkwy, Plano TX 75024', phone: '(972) 555-0138', email: 'ncruz@icloud.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_complete', bucketId: null, notes: 'Complete. Longest pipeline — 7 week close. Insurance supplemental was complex.', createdDate: '2026-01-05', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-01-05', note: 'Canvassing post-December storm.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-01-07', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felicity Fast', date: '2026-01-10', note: 'Jan 14 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-01-17', note: 'Estimate $19,400.' }, - { from: 'Estimate Sent', to: 'Contacted', by: 'Felicity Fast', date: '2026-01-28', note: 'Insurance underpaid — back to negotiation.' }, - { from: 'Contacted', to: 'Estimate Sent', by: 'Felicity Fast', date: '2026-02-05', note: 'Revised estimate submitted to adjuster.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Felicity Fast', date: '2026-02-18', note: 'Adjuster approved supplement. Signed.' }, - { from: 'Signed', to: 'In Progress', by: 'Amanda Manager',date: '2026-03-05', note: 'Production started.' }, - { from: 'In Progress', to: 'Complete', by: 'Amanda Manager',date: '2026-03-12', note: 'Job complete. Long road but great outcome.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-01-05', note: 'Canvassing post-December storm.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-01-07', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Shelby Greer', date: '2026-01-10', note: 'Jan 14 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-01-17', note: 'Estimate $19,400.' }, + { from: 'Estimate Sent', to: 'Contacted', by: 'Shelby Greer', date: '2026-01-28', note: 'Insurance underpaid — back to negotiation.' }, + { from: 'Contacted', to: 'Estimate Sent', by: 'Shelby Greer', date: '2026-02-05', note: 'Revised estimate submitted to adjuster.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Shelby Greer', date: '2026-02-18', note: 'Adjuster approved supplement. Signed.' }, + { from: 'Signed', to: 'In Progress', by: 'Darlene Brooks',date: '2026-03-05', note: 'Production started.' }, + { from: 'In Progress', to: 'Complete', by: 'Darlene Brooks',date: '2026-03-12', note: 'Job complete. Long road but great outcome.' }, ], }, @@ -4442,45 +4448,45 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_039', name: 'Jasmine Fowler', address: '2730 Hedgcoxe Rd, Plano TX 75024', phone: '(972) 555-0139', email: 'jasmine.f@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e3', assignedAgentName: 'Fred Flyer', + assignedAgentId: 'e3', assignedAgentName: 'Travis Boone', columnId: 'kc_estimate', bucketId: 'kc_stuck', notes: 'Stuck — adjuster denied claim. Customer disputing. No movement for 3 weeks.', createdDate: '2026-02-25', activity: [ - { from: null, to: 'New Lead', by: 'Fred Flyer', date: '2026-02-25', note: 'Canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fred Flyer', date: '2026-02-27', note: 'Call — insurance claim just filed.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fred Flyer', date: '2026-03-01', note: 'Mar 5 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fred Flyer', date: '2026-03-10', note: 'Estimate sent $15,800. Adjuster denied most of scope.' }, - { from: 'Estimate Sent', to: 'Stuck', by: 'Fred Flyer', date: '2026-03-18', note: 'Moved to Stuck — adjuster denial under dispute. Waiting on public adjuster.' }, + { from: null, to: 'New Lead', by: 'Travis Boone', date: '2026-02-25', note: 'Canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Travis Boone', date: '2026-02-27', note: 'Call — insurance claim just filed.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Travis Boone', date: '2026-03-01', note: 'Mar 5 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Travis Boone', date: '2026-03-10', note: 'Estimate sent $15,800. Adjuster denied most of scope.' }, + { from: 'Estimate Sent', to: 'Stuck', by: 'Travis Boone', date: '2026-03-18', note: 'Moved to Stuck — adjuster denial under dispute. Waiting on public adjuster.' }, ], }, { id: 'kl_040', name: 'Calvin Merritt', address: '3640 Alma Dr, Plano TX 75023', phone: '(972) 555-0140', email: 'calvin.m@yahoo.com', jobType: 'Siding Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e2', assignedAgentName: 'Fiona Field', + assignedAgentId: 'e2', assignedAgentName: 'Hannah Reyes', columnId: 'kc_contacted', bucketId: 'kc_stuck', notes: 'Stuck — homeowner going through divorce. Put project on hold indefinitely.', createdDate: '2026-03-10', activity: [ - { from: null, to: 'New Lead', by: 'Fiona Field', date: '2026-03-10', note: 'Referral.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fiona Field', date: '2026-03-12', note: 'Good initial call but complicated personal situation mentioned.' }, - { from: 'Contacted', to: 'Stuck', by: 'Fiona Field', date: '2026-03-20', note: 'Moved to Stuck — customer put everything on hold due to divorce proceedings.' }, + { from: null, to: 'New Lead', by: 'Hannah Reyes', date: '2026-03-10', note: 'Referral.' }, + { from: 'New Lead', to: 'Contacted', by: 'Hannah Reyes', date: '2026-03-12', note: 'Good initial call but complicated personal situation mentioned.' }, + { from: 'Contacted', to: 'Stuck', by: 'Hannah Reyes', date: '2026-03-20', note: 'Moved to Stuck — customer put everything on hold due to divorce proceedings.' }, ], }, { id: 'kl_041', name: 'Harriet Simmons', address: '4905 Ohio Dr, Plano TX 75093', phone: '(972) 555-0141', email: 'harriet.s@outlook.com', jobType: 'Roof Replacement', insuranceType: 'Retail', - assignedAgentId: 'e5', assignedAgentName: 'Felix Fixer', + assignedAgentId: 'e5', assignedAgentName: 'Dalton Pruitt', columnId: 'kc_appt', bucketId: 'kc_stuck', notes: 'Stuck — missed 3 appointments. No answer on phone. Left door hanger.', createdDate: '2026-03-05', activity: [ - { from: null, to: 'New Lead', by: 'Felix Fixer', date: '2026-03-05', note: 'Door knock — interested in retail replacement.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felix Fixer', date: '2026-03-07', note: 'Brief call — set appointment.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Felix Fixer', date: '2026-03-09', note: 'Mar 14 appointment set.' }, - { from: 'Appt Scheduled',to: 'Stuck', by: 'Felix Fixer', date: '2026-03-28', note: 'No-showed 3 appointments. Phone goes to voicemail. Marked stuck.' }, + { from: null, to: 'New Lead', by: 'Dalton Pruitt', date: '2026-03-05', note: 'Door knock — interested in retail replacement.' }, + { from: 'New Lead', to: 'Contacted', by: 'Dalton Pruitt', date: '2026-03-07', note: 'Brief call — set appointment.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Dalton Pruitt', date: '2026-03-09', note: 'Mar 14 appointment set.' }, + { from: 'Appt Scheduled',to: 'Stuck', by: 'Dalton Pruitt', date: '2026-03-28', note: 'No-showed 3 appointments. Phone goes to voicemail. Marked stuck.' }, ], }, @@ -4489,47 +4495,47 @@ const KANBAN_LEADS_INITIAL = [ id: 'kl_042', name: 'Floyd Saunders', address: '1344 Spring Creek Pkwy, Plano TX 75023', phone: '(972) 555-0142', email: 'floyd.s@gmail.com', jobType: 'Roof Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e1', assignedAgentName: 'Frank Agent', + assignedAgentId: 'e1', assignedAgentName: 'Cody Tatum', columnId: 'kc_estimate', bucketId: 'kc_followup', notes: 'Follow-up Apr 10 — customer said to call after spring break. Very warm lead.', createdDate: '2026-03-15', activity: [ - { from: null, to: 'New Lead', by: 'Frank Agent', date: '2026-03-15', note: 'Storm canvassing.' }, - { from: 'New Lead', to: 'Contacted', by: 'Frank Agent', date: '2026-03-17', note: 'Call — interested but said call back after spring break.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Frank Agent', date: '2026-03-18', note: 'Mar 20 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Frank Agent', date: '2026-03-22', note: 'Estimate sent $17,600.' }, - { from: 'Estimate Sent', to: 'Follow-up', by: 'Frank Agent', date: '2026-03-25', note: 'Moved to Follow-up — scheduled callback Apr 10.' }, + { from: null, to: 'New Lead', by: 'Cody Tatum', date: '2026-03-15', note: 'Storm canvassing.' }, + { from: 'New Lead', to: 'Contacted', by: 'Cody Tatum', date: '2026-03-17', note: 'Call — interested but said call back after spring break.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Cody Tatum', date: '2026-03-18', note: 'Mar 20 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Cody Tatum', date: '2026-03-22', note: 'Estimate sent $17,600.' }, + { from: 'Estimate Sent', to: 'Follow-up', by: 'Cody Tatum', date: '2026-03-25', note: 'Moved to Follow-up — scheduled callback Apr 10.' }, ], }, { id: 'kl_043', name: 'Miriam Obando', address: '2217 Independence Pkwy, Plano TX 75025', phone: '(972) 555-0143', email: 'miriam.o@icloud.com', jobType: 'Roof Inspection', insuranceType: 'Retail', - assignedAgentId: 'e4', assignedAgentName: 'Felicity Fast', + assignedAgentId: 'e4', assignedAgentName: 'Shelby Greer', columnId: 'kc_contacted', bucketId: 'kc_followup', notes: 'Follow-up Apr 15 — currently traveling abroad. Callback confirmed via text.', createdDate: '2026-03-20', activity: [ - { from: null, to: 'New Lead', by: 'Felicity Fast', date: '2026-03-20', note: 'Website form lead.' }, - { from: 'New Lead', to: 'Contacted', by: 'Felicity Fast', date: '2026-03-22', note: 'Text conversation — customer is abroad until Apr 13.' }, - { from: 'Contacted', to: 'Follow-up', by: 'Felicity Fast', date: '2026-03-23', note: 'Moved to Follow-up — callback Apr 15 confirmed via text.' }, + { from: null, to: 'New Lead', by: 'Shelby Greer', date: '2026-03-20', note: 'Website form lead.' }, + { from: 'New Lead', to: 'Contacted', by: 'Shelby Greer', date: '2026-03-22', note: 'Text conversation — customer is abroad until Apr 13.' }, + { from: 'Contacted', to: 'Follow-up', by: 'Shelby Greer', date: '2026-03-23', note: 'Moved to Follow-up — callback Apr 15 confirmed via text.' }, ], }, { id: 'kl_044', name: 'Jerome Watkins', address: '3908 Plano Pkwy, Plano TX 75074', phone: '(972) 555-0144', email: 'jerome.w@yahoo.com', jobType: 'Gutter Replacement', insuranceType: 'Insurance', - assignedAgentId: 'e3', assignedAgentName: 'Fred Flyer', + assignedAgentId: 'e3', assignedAgentName: 'Travis Boone', columnId: 'kc_signed', bucketId: 'kc_followup', notes: 'Signed but waiting on HOA approval before starting. Follow-up Apr 20.', createdDate: '2026-03-08', activity: [ - { from: null, to: 'New Lead', by: 'Fred Flyer', date: '2026-03-08', note: 'Referral.' }, - { from: 'New Lead', to: 'Contacted', by: 'Fred Flyer', date: '2026-03-10', note: 'Call.' }, - { from: 'Contacted', to: 'Appt Scheduled', by: 'Fred Flyer', date: '2026-03-12', note: 'Mar 15 inspection.' }, - { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Fred Flyer', date: '2026-03-18', note: 'Estimate $6,200.' }, - { from: 'Estimate Sent', to: 'Signed', by: 'Fred Flyer', date: '2026-03-25', note: 'Signed — waiting on HOA approval to start.' }, - { from: 'Signed', to: 'Follow-up', by: 'Fred Flyer', date: '2026-03-28', note: 'HOA review pending. Follow-up Apr 20 for approval status.' }, + { from: null, to: 'New Lead', by: 'Travis Boone', date: '2026-03-08', note: 'Referral.' }, + { from: 'New Lead', to: 'Contacted', by: 'Travis Boone', date: '2026-03-10', note: 'Call.' }, + { from: 'Contacted', to: 'Appt Scheduled', by: 'Travis Boone', date: '2026-03-12', note: 'Mar 15 inspection.' }, + { from: 'Appt Scheduled', to: 'Estimate Sent', by: 'Travis Boone', date: '2026-03-18', note: 'Estimate $6,200.' }, + { from: 'Estimate Sent', to: 'Signed', by: 'Travis Boone', date: '2026-03-25', note: 'Signed — waiting on HOA approval to start.' }, + { from: 'Signed', to: 'Follow-up', by: 'Travis Boone', date: '2026-03-28', note: 'HOA review pending. Follow-up Apr 20 for approval status.' }, ], }, ]; @@ -4564,9 +4570,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 5460, status: 'pending', dueDate: '2026-04-15', paidDate: null }, ], workTimeline: [ - { date: '2026-03-22', action: 'Contract Executed', user: 'Felicity Fast', details: 'Client signed. 30% deposit collected.' }, - { date: '2026-03-24', action: 'Materials Ordered', user: 'Adam Admin', details: 'GAF Timberline HDZ Charcoal — 24 squares ordered.' }, - { date: '2026-04-05', action: 'Permit Submitted', user: 'Adam Admin', details: 'Plano city permit application filed.' }, + { date: '2026-03-22', action: 'Contract Executed', user: 'Shelby Greer', details: 'Client signed. 30% deposit collected.' }, + { date: '2026-03-24', action: 'Materials Ordered', user: 'Wade Hollis', details: 'GAF Timberline HDZ Charcoal — 24 squares ordered.' }, + { date: '2026-04-05', action: 'Permit Submitted', user: 'Wade Hollis', details: 'Plano city permit application filed.' }, ], }, kl_024: { @@ -4590,7 +4596,7 @@ const KANBAN_PROJECT_DATA = { ], changeOrders: [], rfis: [ - { id: 'rfi1', subject: 'HOA Color Approval', status: 'open', submittedBy: 'Fiona Field', openedDate: '2026-03-25', closedDate: null, description: 'Need written HOA approval for Cobblestone color before install.' }, + { id: 'rfi1', subject: 'HOA Color Approval', status: 'open', submittedBy: 'Hannah Reyes', openedDate: '2026-03-25', closedDate: null, description: 'Need written HOA approval for Cobblestone color before install.' }, ], invoices: [ { id: 'inv1', description: 'Deposit — 25%', amount: 7875, status: 'paid', dueDate: '2026-03-20', paidDate: '2026-03-20' }, @@ -4598,9 +4604,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 25%', amount: 7875, status: 'pending', dueDate: '2026-05-01', paidDate: null }, ], workTimeline: [ - { date: '2026-03-20', action: 'Contract Executed', user: 'Fiona Field', details: 'Insurance-approved scope. Full 2,400 sq ft siding.' }, - { date: '2026-03-23', action: 'Materials Ordered', user: 'Adam Admin', details: 'James Hardie Board & Batten — Cobblestone, 2,400 sq ft.' }, - { date: '2026-03-25', action: 'RFI Opened', user: 'Fiona Field', details: 'HOA color approval required before start.' }, + { date: '2026-03-20', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Insurance-approved scope. Full 2,400 sq ft siding.' }, + { date: '2026-03-23', action: 'Materials Ordered', user: 'Wade Hollis', details: 'James Hardie Board & Batten — Cobblestone, 2,400 sq ft.' }, + { date: '2026-03-25', action: 'RFI Opened', user: 'Hannah Reyes', details: 'HOA color approval required before start.' }, ], }, kl_025: { @@ -4628,9 +4634,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv2', description: 'Final — 50%', amount: 13900, status: 'pending', dueDate: '2026-04-20', paidDate: null }, ], workTimeline: [ - { date: '2026-03-11', action: 'Contract Executed', user: 'Frank Agent', details: 'Cash client. 50% deposit paid same day.' }, - { date: '2026-03-12', action: 'Materials Ordered', user: 'Adam Admin', details: 'Owens Corning TruDefinition Duration — 28 squares.' }, - { date: '2026-03-20', action: 'Permit Approved', user: 'Adam Admin', details: 'City of Plano residential roofing permit #RFP-2026-1148.' }, + { date: '2026-03-11', action: 'Contract Executed', user: 'Cody Tatum', details: 'Cash client. 50% deposit paid same day.' }, + { date: '2026-03-12', action: 'Materials Ordered', user: 'Wade Hollis', details: 'Owens Corning TruDefinition Duration — 28 squares.' }, + { date: '2026-03-20', action: 'Permit Approved', user: 'Wade Hollis', details: 'City of Plano residential roofing permit #RFP-2026-1148.' }, ], }, kl_026: { @@ -4660,8 +4666,8 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 6720, status: 'pending', dueDate: '2026-04-22', paidDate: null }, ], workTimeline: [ - { date: '2026-03-25', action: 'Contract Executed', user: 'Felix Fixer', details: 'Insurance approved full roof + gutter scope.' }, - { date: '2026-03-27', action: 'Materials Ordered', user: 'Adam Admin', details: 'GAF shingles + K-style 6" gutters ordered.' }, + { date: '2026-03-25', action: 'Contract Executed', user: 'Dalton Pruitt', details: 'Insurance approved full roof + gutter scope.' }, + { date: '2026-03-27', action: 'Materials Ordered', user: 'Wade Hollis', details: 'GAF shingles + K-style 6" gutters ordered.' }, ], }, kl_027: { @@ -4683,7 +4689,7 @@ const KANBAN_PROJECT_DATA = { { id: 'm7', name: 'Invoice & Payment', status: 'pending', date: null, notes: '' }, ], changeOrders: [ - { id: 'co1', title: 'Supplemental — Ice & Water Barrier', amount: 1800, status: 'approved', requestedBy: 'Felicity Fast', date: '2026-03-10', description: 'Insurance adjuster agreed to add ice/water shield on all valleys and eaves.' }, + { id: 'co1', title: 'Supplemental — Ice & Water Barrier', amount: 1800, status: 'approved', requestedBy: 'Shelby Greer', date: '2026-03-10', description: 'Insurance adjuster agreed to add ice/water shield on all valleys and eaves.' }, ], rfis: [], invoices: [ @@ -4692,8 +4698,8 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 5880, status: 'pending', dueDate: '2026-04-28', paidDate: null }, ], workTimeline: [ - { date: '2026-03-28', action: 'Contract Executed', user: 'Felicity Fast', details: 'Signed after 6-week negotiation on supplement items.' }, - { date: '2026-04-02', action: 'Materials Ordered', user: 'Adam Admin', details: 'Special color availability causing 1-week delay.' }, + { date: '2026-03-28', action: 'Contract Executed', user: 'Shelby Greer', details: 'Signed after 6-week negotiation on supplement items.' }, + { date: '2026-04-02', action: 'Materials Ordered', user: 'Wade Hollis', details: 'Special color availability causing 1-week delay.' }, ], }, @@ -4717,7 +4723,7 @@ const KANBAN_PROJECT_DATA = { { id: 'm7', name: 'Invoice & Payment', status: 'pending', date: null, notes: '' }, ], changeOrders: [ - { id: 'co1', title: 'Decking Replacement — 2 Sheets', amount: 480, status: 'approved', requestedBy: 'Frank Agent', date: '2026-03-18', description: 'Two rotted OSB sheets discovered during tear-off. Replaced at cost.' }, + { id: 'co1', title: 'Decking Replacement — 2 Sheets', amount: 480, status: 'approved', requestedBy: 'Cody Tatum', date: '2026-03-18', description: 'Two rotted OSB sheets discovered during tear-off. Replaced at cost.' }, ], rfis: [], invoices: [ @@ -4726,10 +4732,10 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 5040, status: 'pending', dueDate: '2026-04-10', paidDate: null }, ], workTimeline: [ - { date: '2026-02-28', action: 'Contract Executed', user: 'Frank Agent', details: 'Signed. Production team notified.' }, - { date: '2026-03-18', action: 'Production Started', user: 'Adam Admin', details: 'Tear-off crew on site. Two rotted deck boards found and replaced.' }, - { date: '2026-03-20', action: 'Progress Invoice Paid', user: 'Adam Admin', details: 'Client paid progress invoice on time.' }, - { date: '2026-04-07', action: 'Decking Install', user: 'Adam Admin', details: 'New decking going on today. Roofing shingles start tomorrow.' }, + { date: '2026-02-28', action: 'Contract Executed', user: 'Cody Tatum', details: 'Signed. Production team notified.' }, + { date: '2026-03-18', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off crew on site. Two rotted deck boards found and replaced.' }, + { date: '2026-03-20', action: 'Progress Invoice Paid', user: 'Wade Hollis', details: 'Client paid progress invoice on time.' }, + { date: '2026-04-07', action: 'Decking Install', user: 'Wade Hollis', details: 'New decking going on today. Roofing shingles start tomorrow.' }, ], }, kl_029: { @@ -4752,7 +4758,7 @@ const KANBAN_PROJECT_DATA = { { id: 'm8', name: 'Invoice & Payment', status: 'pending', date: null, notes: '' }, ], changeOrders: [ - { id: 'co1', title: 'Rot Repair — 2 Panels', amount: 380, status: 'approved', requestedBy: 'Fiona Field', date: '2026-03-25', description: 'Two panels of rotted OSB substrate discovered during demo. Repaired.' }, + { id: 'co1', title: 'Rot Repair — 2 Panels', amount: 380, status: 'approved', requestedBy: 'Hannah Reyes', date: '2026-03-25', description: 'Two panels of rotted OSB substrate discovered during demo. Repaired.' }, ], rfis: [], invoices: [ @@ -4761,9 +4767,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 25%', amount: 7125, status: 'pending', dueDate: '2026-04-15', paidDate: null }, ], workTimeline: [ - { date: '2026-02-25', action: 'Contract Executed', user: 'Fiona Field', details: 'Insurance approved full scope.' }, - { date: '2026-03-25', action: 'Production Started', user: 'Adam Admin', details: 'Demo complete. Minor rot on 2 panels — change order raised.' }, - { date: '2026-04-05', action: 'Install Underway', user: 'Adam Admin', details: 'Siding install Day 3. On track for Friday completion.' }, + { date: '2026-02-25', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Insurance approved full scope.' }, + { date: '2026-03-25', action: 'Production Started', user: 'Wade Hollis', details: 'Demo complete. Minor rot on 2 panels — change order raised.' }, + { date: '2026-04-05', action: 'Install Underway', user: 'Wade Hollis', details: 'Siding install Day 3. On track for Friday completion.' }, ], }, kl_030: { @@ -4794,10 +4800,10 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 6360, status: 'pending', dueDate: '2026-04-10', paidDate: null }, ], workTimeline: [ - { date: '2026-02-24', action: 'Contract Executed', user: 'Felicity Fast', details: '' }, - { date: '2026-03-20', action: 'Roofing Started', user: 'Amanda Manager', details: 'Production underway — roofing crew Day 1.' }, - { date: '2026-03-22', action: 'Roofing Complete', user: 'Amanda Manager', details: 'Roof done. Progress invoice sent.' }, - { date: '2026-04-07', action: 'Gutter Install', user: 'Amanda Manager', details: 'Gutter crew arriving today for 1-day install.' }, + { date: '2026-02-24', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-03-20', action: 'Roofing Started', user: 'Darlene Brooks', details: 'Production underway — roofing crew Day 1.' }, + { date: '2026-03-22', action: 'Roofing Complete', user: 'Darlene Brooks', details: 'Roof done. Progress invoice sent.' }, + { date: '2026-04-07', action: 'Gutter Install', user: 'Darlene Brooks', details: 'Gutter crew arriving today for 1-day install.' }, ], }, kl_031: { @@ -4821,14 +4827,14 @@ const KANBAN_PROJECT_DATA = { ], changeOrders: [], rfis: [ - { id: 'rfi1', subject: 'Lifetime Warranty Registration', status: 'open', submittedBy: 'Felix Fixer', openedDate: '2026-03-05', closedDate: null, description: 'GAF factory warranty registration requires installer certification — need to confirm with crew.' }, + { id: 'rfi1', subject: 'Lifetime Warranty Registration', status: 'open', submittedBy: 'Dalton Pruitt', openedDate: '2026-03-05', closedDate: null, description: 'GAF factory warranty registration requires installer certification — need to confirm with crew.' }, ], invoices: [ { id: 'inv1', description: 'Deposit — 100%', amount: 34500, status: 'paid', dueDate: '2026-03-03', paidDate: '2026-03-03' }, ], workTimeline: [ - { date: '2026-03-03', action: 'Contract Executed', user: 'Felix Fixer', details: 'Cash client — full payment upfront.' }, - { date: '2026-03-28', action: 'Production Started', user: 'Amanda Manager',details: 'Materials arrived. Premium install started.' }, + { date: '2026-03-03', action: 'Contract Executed', user: 'Dalton Pruitt', details: 'Cash client — full payment upfront.' }, + { date: '2026-03-28', action: 'Production Started', user: 'Darlene Brooks',details: 'Materials arrived. Premium install started.' }, ], }, kl_032: { @@ -4857,8 +4863,8 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 2820, status: 'pending', dueDate: '2026-04-10', paidDate: null }, ], workTimeline: [ - { date: '2026-03-07', action: 'Contract Executed', user: 'Frank Agent', details: 'Partial repair — south and west faces only.' }, - { date: '2026-04-01', action: 'South Face Done', user: 'Adam Admin', details: 'South face siding complete. Starting west face.' }, + { date: '2026-03-07', action: 'Contract Executed', user: 'Cody Tatum', details: 'Partial repair — south and west faces only.' }, + { date: '2026-04-01', action: 'South Face Done', user: 'Wade Hollis', details: 'South face siding complete. Starting west face.' }, ], }, kl_033: { @@ -4881,7 +4887,7 @@ const KANBAN_PROJECT_DATA = { ], changeOrders: [], rfis: [ - { id: 'rfi1', subject: 'Structural Load — Chimney Flashing', status: 'open', submittedBy: 'Fiona Field', openedDate: '2026-04-05', closedDate: null, description: 'Large chimney requires custom step flashing — need architect sign-off for load specs.' }, + { id: 'rfi1', subject: 'Structural Load — Chimney Flashing', status: 'open', submittedBy: 'Hannah Reyes', openedDate: '2026-04-05', closedDate: null, description: 'Large chimney requires custom step flashing — need architect sign-off for load specs.' }, ], invoices: [ { id: 'inv1', description: 'Deposit — 25%', amount: 10500, status: 'paid', dueDate: '2026-02-15', paidDate: '2026-02-15' }, @@ -4889,9 +4895,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 25%', amount: 10500, status: 'pending', dueDate: '2026-04-15', paidDate: null }, ], workTimeline: [ - { date: '2026-02-15', action: 'Contract Executed', user: 'Fiona Field', details: 'Largest job this quarter — $42,000, 3,600 sq ft.' }, - { date: '2026-04-05', action: 'Production Started', user: 'Adam Admin', details: 'Day 1 of 3-day job. Two crews on site.' }, - { date: '2026-04-05', action: 'RFI Opened', user: 'Fiona Field', details: 'Custom chimney flashing — architect sign-off required.' }, + { date: '2026-02-15', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Largest job this quarter — $42,000, 3,600 sq ft.' }, + { date: '2026-04-05', action: 'Production Started', user: 'Wade Hollis', details: 'Day 1 of 3-day job. Two crews on site.' }, + { date: '2026-04-05', action: 'RFI Opened', user: 'Hannah Reyes', details: 'Custom chimney flashing — architect sign-off required.' }, ], }, @@ -4922,11 +4928,11 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 5160, status: 'paid', dueDate: '2026-03-01', paidDate: '2026-03-01' }, ], workTimeline: [ - { date: '2026-02-01', action: 'Contract Executed', user: 'Frank Agent', details: '' }, - { date: '2026-02-20', action: 'Production Started', user: 'Adam Admin', details: 'Tear-off crew on site.' }, - { date: '2026-02-21', action: 'Install Complete', user: 'Adam Admin', details: 'Full install done in 1 day.' }, - { date: '2026-02-28', action: 'Final Inspection', user: 'Adam Admin', details: 'Passed. Client extremely happy. 5-star review.' }, - { date: '2026-03-01', action: 'Project Closed', user: 'Adam Admin', details: 'Final payment received. File closed.' }, + { date: '2026-02-01', action: 'Contract Executed', user: 'Cody Tatum', details: '' }, + { date: '2026-02-20', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off crew on site.' }, + { date: '2026-02-21', action: 'Install Complete', user: 'Wade Hollis', details: 'Full install done in 1 day.' }, + { date: '2026-02-28', action: 'Final Inspection', user: 'Wade Hollis', details: 'Passed. Client extremely happy. 5-star review.' }, + { date: '2026-03-01', action: 'Project Closed', user: 'Wade Hollis', details: 'Final payment received. File closed.' }, ], }, kl_035: { @@ -4956,9 +4962,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 25%', amount: 6600, status: 'paid', dueDate: '2026-02-22', paidDate: '2026-02-22' }, ], workTimeline: [ - { date: '2026-01-28', action: 'Contract Executed', user: 'Felicity Fast', details: '' }, - { date: '2026-02-15', action: 'Production Started', user: 'Amanda Manager', details: 'Demo and install started same day.' }, - { date: '2026-02-22', action: 'Project Closed', user: 'Amanda Manager', details: 'Insurance check received and deposited. File closed.' }, + { date: '2026-01-28', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-02-15', action: 'Production Started', user: 'Darlene Brooks', details: 'Demo and install started same day.' }, + { date: '2026-02-22', action: 'Project Closed', user: 'Darlene Brooks', details: 'Insurance check received and deposited. File closed.' }, ], }, kl_036: { @@ -4985,9 +4991,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv1', description: 'Full Payment — 100%', amount: 22100, status: 'paid', dueDate: '2026-01-30', paidDate: '2026-01-30' }, ], workTimeline: [ - { date: '2026-01-30', action: 'Contract Executed', user: 'Fiona Field', details: 'Cash client. Full payment upfront.' }, - { date: '2026-02-18', action: 'Production Started', user: 'Adam Admin', details: 'Tear-off started.' }, - { date: '2026-02-20', action: 'Project Closed', user: 'Adam Admin', details: 'Outstanding quality. Referral bonus owed per agreement.' }, + { date: '2026-01-30', action: 'Contract Executed', user: 'Hannah Reyes', details: 'Cash client. Full payment upfront.' }, + { date: '2026-02-18', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off started.' }, + { date: '2026-02-20', action: 'Project Closed', user: 'Wade Hollis', details: 'Outstanding quality. Referral bonus owed per agreement.' }, ], }, kl_037: { @@ -5015,9 +5021,9 @@ const KANBAN_PROJECT_DATA = { { id: 'inv2', description: 'Final — 50%', amount: 4450, status: 'paid', dueDate: '2026-03-02', paidDate: '2026-03-02' }, ], workTimeline: [ - { date: '2026-02-10', action: 'Contract Executed', user: 'Felix Fixer', details: '' }, - { date: '2026-02-28', action: 'Production Started', user: 'Adam Admin', details: 'Fascia repair started.' }, - { date: '2026-03-02', action: 'Project Closed', user: 'Adam Admin', details: 'Complete. Customer gave referral cards to 3 neighbors.' }, + { date: '2026-02-10', action: 'Contract Executed', user: 'Dalton Pruitt', details: '' }, + { date: '2026-02-28', action: 'Production Started', user: 'Wade Hollis', details: 'Fascia repair started.' }, + { date: '2026-03-02', action: 'Project Closed', user: 'Wade Hollis', details: 'Complete. Customer gave referral cards to 3 neighbors.' }, ], }, kl_038: { @@ -5039,7 +5045,7 @@ const KANBAN_PROJECT_DATA = { { id: 'm7', name: 'Invoice & Payment', status: 'completed', date: '2026-03-20', notes: 'Complex insurance supplemental took 2 extra weeks.' }, ], changeOrders: [ - { id: 'co1', title: 'Decking Replacement — 3 Sheets', amount: 720, status: 'approved', requestedBy: 'Felicity Fast', date: '2026-03-10', description: 'Three rotted OSB sheets discovered during tear-off. Replaced.' }, + { id: 'co1', title: 'Decking Replacement — 3 Sheets', amount: 720, status: 'approved', requestedBy: 'Shelby Greer', date: '2026-03-10', description: 'Three rotted OSB sheets discovered during tear-off. Replaced.' }, ], rfis: [], invoices: [ @@ -5048,10 +5054,10 @@ const KANBAN_PROJECT_DATA = { { id: 'inv3', description: 'Final — 30%', amount: 5820, status: 'paid', dueDate: '2026-03-20', paidDate: '2026-03-20' }, ], workTimeline: [ - { date: '2026-02-04', action: 'Contract Executed', user: 'Felicity Fast', details: '' }, - { date: '2026-03-10', action: 'Production Started', user: 'Adam Admin', details: 'Tear-off found 3 rotted deck sheets. CO raised.' }, - { date: '2026-03-12', action: 'Install Complete', user: 'Adam Admin', details: 'Roofing complete.' }, - { date: '2026-03-20', action: 'Project Closed', user: 'Adam Admin', details: 'Longest close — 7 weeks due to complex insurance supplemental.' }, + { date: '2026-02-04', action: 'Contract Executed', user: 'Shelby Greer', details: '' }, + { date: '2026-03-10', action: 'Production Started', user: 'Wade Hollis', details: 'Tear-off found 3 rotted deck sheets. CO raised.' }, + { date: '2026-03-12', action: 'Install Complete', user: 'Wade Hollis', details: 'Roofing complete.' }, + { date: '2026-03-20', action: 'Project Closed', user: 'Wade Hollis', details: 'Longest close — 7 weeks due to complex insurance supplemental.' }, ], }, }; @@ -5100,7 +5106,8 @@ export const SUBCONTRACTOR_FEE_TYPES = [ const MOCK_SUBCONTRACTORS = [ { id: 'sub_001', - name: 'Carlos Subcontractor', + empId: 'LUP-2001', + name: 'Carlos Mendoza', companyName: 'Electric Pro Services', tradeType: 'Electrical', email: 'carlos@electricpro.com', @@ -5112,6 +5119,7 @@ const MOCK_SUBCONTRACTORS = [ }, { id: 'sub_002', + empId: 'LUP-2002', name: 'Maya Patel', companyName: 'Skyline Roof Crew', tradeType: 'Roofing', @@ -5124,7 +5132,8 @@ const MOCK_SUBCONTRACTORS = [ }, { id: 'sub_003', - name: 'Dwayne Holland', + empId: 'LUP-2003', + name: 'Dwayne Boudreaux', companyName: 'Holland Painting Co.', tradeType: 'Painting', email: 'dwayne@hollandpaint.com', @@ -5136,7 +5145,8 @@ const MOCK_SUBCONTRACTORS = [ }, { id: 'sub_004', - name: 'Jennifer Wu', + empId: 'LUP-2004', + name: 'Jennifer Castillo', companyName: 'Wu Plumbing', tradeType: 'Plumbing', email: 'jenn@wuplumbing.com', @@ -5148,6 +5158,7 @@ const MOCK_SUBCONTRACTORS = [ }, { id: 'sub_005', + empId: 'LUP-2005', name: 'Greg Alston', companyName: 'Alston Window Pros', tradeType: 'Windows & Glazing', @@ -5194,7 +5205,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_001_t3', channel: 'group', senderId: 'owner_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Source them and put it on the task expenses. Homeowner is OK to reimburse.', at: '2026-05-15T11:00:00Z' }, { id: 'sct_001_t4', channel: 'group', senderId: 'sub_002', senderName: 'Maya Patel', senderRole: 'Subcontractor', body: 'Sounds good — picking up at Home Depot tomorrow morning.', at: '2026-05-15T11:08:00Z', mine: true }, { id: 'sct_001_t5', channel: 'direct', senderId: 'owner_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Heads up team: homeowner is sensitive about noise — keep work to daylight hours only. No early-morning starts.', at: '2026-05-15T11:05:00Z' }, - { id: 'sct_001_t6', channel: 'group', senderId: 'ADM01', senderName: 'Admin One', senderRole: 'Admin', body: 'Permits are not required for this scope. Skip the city portal step.', at: '2026-05-15T12:10:00Z' }, + { id: 'sct_001_t6', channel: 'group', senderId: 'ADM01', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'Permits are not required for this scope. Skip the city portal step.', at: '2026-05-15T12:10:00Z' }, { id: 'sct_001_t7', channel: 'direct', senderId: 'sub_002', senderName: 'Maya Patel', senderRole: 'Subcontractor', body: 'Noted. Will text homeowner when crew is 30 min out.', at: '2026-05-15T12:25:00Z', mine: true }, ], expenses: [ @@ -5260,7 +5271,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ companyId: 'lynkeduppro', companyName: 'LynkedUp Pro Roofing', subcontractorId: 'sub_001', - subcontractorName: 'Carlos Subcontractor', + subcontractorName: 'Carlos Mendoza', assignedBy: 'owner_001', assignedByName: 'Justin Johnson', title: 'Replace breaker panel', @@ -5275,12 +5286,12 @@ const MOCK_SUBCONTRACTOR_TASKS = [ ], statusHistory: [ { id: 'sct_002_h1', status: 'Assigned', actorId: 'owner_001', actorName: 'Justin Johnson', comment: 'Task created and assigned.', at: '2026-05-10T15:40:00Z' }, - { id: 'sct_002_h2', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Subcontractor', comment: 'On site, started disconnect.', at: '2026-05-12T08:20:00Z' }, + { id: 'sct_002_h2', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'On site, started disconnect.', at: '2026-05-12T08:20:00Z' }, ], thread: [ - { id: 'sct_002_t1', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Subcontractor', senderRole: 'Subcontractor', body: 'Oncor disconnect is confirmed for May 12, 8 AM.', at: '2026-05-11T16:00:00Z', mine: true }, + { id: 'sct_002_t1', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'Oncor disconnect is confirmed for May 12, 8 AM.', at: '2026-05-11T16:00:00Z', mine: true }, { id: 'sct_002_t2', channel: 'group', senderId: 'owner_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Perfect. Homeowner will be on site.', at: '2026-05-11T16:30:00Z' }, - { id: 'sct_002_t3', channel: 'group', senderId: 'ADM01', senderName: 'Admin One', senderRole: 'Admin', body: 'Inspection slot booked with the city for May 15.', at: '2026-05-12T09:30:00Z' }, + { id: 'sct_002_t3', channel: 'group', senderId: 'ADM01', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'Inspection slot booked with the city for May 15.', at: '2026-05-12T09:30:00Z' }, ], expenses: [ { id: 'sct_002_e1', description: '200A panel — Square D', category: 'Materials', amount: 312.0, notes: '', receiptUrl: '', createdAt: '2026-05-11T09:00:00Z' }, @@ -5304,7 +5315,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ photos: [ { id: 'sct_002_a2_p1', url: '/assets/images/properties/Beige_Two_Story_House.jpg', name: 'oncor-disconnect.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-12T08:20:00Z', }, { @@ -5314,7 +5325,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_002_a3_p1', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', name: 'mast-check.jpg' }, { id: 'sct_002_a3_p2', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', name: 'old-panel-out.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-12T10:30:00Z', }, { @@ -5323,7 +5334,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ photos: [ { id: 'sct_002_a4_p1', url: '/assets/images/properties/Sunny_Suburban_House.jpg', name: 'new-panel-mount.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-12T13:15:00Z', }, { @@ -5333,7 +5344,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_002_a5_p1', url: '/assets/images/properties/Luxury_Driveway_Residence.jpg', name: 'circuits-migrated.jpg' }, { id: 'sct_002_a5_p2', url: '/assets/images/properties/Overlapping_Roof_Shingles.jpg', name: 'panel-labels.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-12T16:00:00Z', }, ], @@ -5352,9 +5363,9 @@ const MOCK_SUBCONTRACTOR_TASKS = [ companyId: 'lynkeduppro', companyName: 'LynkedUp Pro Roofing', subcontractorId: 'sub_003', - subcontractorName: 'Dwayne Holland', + subcontractorName: 'Dwayne Boudreaux', assignedBy: 'ADM01', - assignedByName: 'Admin One', + assignedByName: 'Wade Hollis', title: 'Touch-up exterior paint', location: '3913 Arizona Pl, Plano, TX 75023', description: 'Front fascia and side trim need fresh coat after siding repair. Match existing Sherwin-Williams color.', @@ -5365,12 +5376,12 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_003_p1', name: 'Before.jpg', url: '/assets/images/properties/Brick_Front_Porch_Home.jpg', annotation: 'Before' }, ], statusHistory: [ - { id: 'sct_003_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Admin One', comment: 'Task created.', at: '2026-05-05T11:00:00Z' }, - { id: 'sct_003_h2', status: 'In Progress', actorId: 'sub_003', actorName: 'Dwayne Holland', comment: 'Started prep work.', at: '2026-05-13T08:00:00Z' }, - { id: 'sct_003_h3', status: 'Completed', actorId: 'sub_003', actorName: 'Dwayne Holland', comment: 'Walked through with homeowner.', at: '2026-05-14T17:30:00Z' }, + { id: 'sct_003_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Wade Hollis', comment: 'Task created.', at: '2026-05-05T11:00:00Z' }, + { id: 'sct_003_h2', status: 'In Progress', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Started prep work.', at: '2026-05-13T08:00:00Z' }, + { id: 'sct_003_h3', status: 'Completed', actorId: 'sub_003', actorName: 'Dwayne Boudreaux', comment: 'Walked through with homeowner.', at: '2026-05-14T17:30:00Z' }, ], thread: [ - { id: 'sct_003_t1', channel: 'group', senderId: 'sub_003', senderName: 'Dwayne Holland', senderRole: 'Subcontractor', body: 'Wrapped up — homeowner signed off. Photos uploaded.', at: '2026-05-14T17:25:00Z', mine: true }, + { id: 'sct_003_t1', channel: 'group', senderId: 'sub_003', senderName: 'Dwayne Boudreaux', senderRole: 'Subcontractor', body: 'Wrapped up — homeowner signed off. Photos uploaded.', at: '2026-05-14T17:25:00Z', mine: true }, ], expenses: [ { id: 'sct_003_e1', description: 'Paint — SW Repose Gray (1 gal)', category: 'Materials', amount: 52.5, notes: '', receiptUrl: '', createdAt: '2026-05-13T07:30:00Z' }, @@ -5434,7 +5445,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ subcontractorId: 'sub_002', subcontractorName: 'Maya Patel', assignedBy: 'ADM01', - assignedByName: 'Admin One', + assignedByName: 'Wade Hollis', title: 'Inspect attic ventilation', location: '5510 Custer Rd, Plano, TX 75023', description: 'Customer reports unusually high attic temps. Check ridge vent, soffit airflow, and intake/exhaust balance. Recommend remediation.', @@ -5445,13 +5456,13 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_005_p1', name: 'Attic_View.jpg', url: '/assets/images/properties/Roof_Inspection_Angle.jpg', annotation: 'Access from south gable' }, ], statusHistory: [ - { id: 'sct_005_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Admin One', comment: 'Task created.', at: '2026-05-12T10:00:00Z' }, + { id: 'sct_005_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Wade Hollis', comment: 'Task created.', at: '2026-05-12T10:00:00Z' }, { id: 'sct_005_h2', status: 'In Progress', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Initial pass done; baffles look blocked.', at: '2026-05-14T11:00:00Z' }, { id: 'sct_005_h3', status: 'On Hold', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Waiting on homeowner to clear stored boxes from access path.', at: '2026-05-15T16:00:00Z' }, ], thread: [ { id: 'sct_005_t1', channel: 'group', senderId: 'sub_002', senderName: 'Maya Patel', senderRole: 'Subcontractor', body: 'Access is blocked — homeowner needs to move some storage before I can complete the inspection.', at: '2026-05-15T15:55:00Z', mine: true }, - { id: 'sct_005_t2', channel: 'direct', senderId: 'ADM01', senderName: 'Admin One', senderRole: 'Admin', body: 'I will reach out to the homeowner and reschedule.', at: '2026-05-15T16:20:00Z' }, + { id: 'sct_005_t2', channel: 'direct', senderId: 'ADM01', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'I will reach out to the homeowner and reschedule.', at: '2026-05-15T16:20:00Z' }, ], expenses: [ { id: 'sct_005_e1', description: 'Infrared thermometer (rental)', category: 'Equipment Rental', amount: 35.0, notes: '', receiptUrl: '', createdAt: '2026-05-14T10:30:00Z' }, @@ -5464,7 +5475,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ id: 'sct_005_a1', type: 'status_change', status: 'Assigned', note: 'Task created. Customer reports unusually high attic temps.', photos: [], - actorId: 'ADM01', actorName: 'Admin One', actorRole: 'Admin', + actorId: 'ADM01', actorName: 'Wade Hollis', actorRole: 'Admin', at: '2026-05-12T10:00:00Z', }, { @@ -5534,7 +5545,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ subcontractorId: 'sub_002', subcontractorName: 'Maya Patel', assignedBy: 'ADM01', - assignedByName: 'Admin One', + assignedByName: 'Wade Hollis', title: 'Roof deck repair — north slope', location: '1408 Cedar Ridge, Allen, TX 75002', description: 'Sheathing soft in two ~2x2 ft areas. Cut out, replace with matching OSB, re-felt and re-shingle.', @@ -5545,7 +5556,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_007_p1', name: 'Deck_Repair.jpg', url: '/assets/images/properties/Cracked_Asphalt_Shingles.jpg', annotation: 'Soft section, top right' }, ], statusHistory: [ - { id: 'sct_007_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Admin One', comment: 'Task created.', at: '2026-05-01T09:00:00Z' }, + { id: 'sct_007_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Wade Hollis', comment: 'Task created.', at: '2026-05-01T09:00:00Z' }, { id: 'sct_007_h2', status: 'In Progress', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Tear-off underway.', at: '2026-05-05T07:30:00Z' }, { id: 'sct_007_h3', status: 'Completed', actorId: 'sub_002', actorName: 'Maya Patel', comment: 'Closed out, photos in.', at: '2026-05-07T16:45:00Z' }, ], @@ -5576,9 +5587,9 @@ const MOCK_SUBCONTRACTOR_TASKS = [ companyId: 'lynkeduppro', companyName: 'LynkedUp Pro Roofing', subcontractorId: 'sub_001', - subcontractorName: 'Carlos Subcontractor', + subcontractorName: 'Carlos Mendoza', assignedBy: 'ADM01', - assignedByName: 'Admin One', + assignedByName: 'Wade Hollis', title: 'Install GFCI outlets — kitchen + bath', location: '224 Greenfield Way, Frisco, TX 75033', description: 'Replace 4 standard receptacles with GFCI: 2 kitchen counter outlets (left of sink + island), 1 master bath vanity, 1 powder room vanity. Code update required as part of insurance work. Use Leviton SmartlockPro 20A devices. Test all branches with plug-in tester before signing off.', @@ -5592,18 +5603,18 @@ const MOCK_SUBCONTRACTOR_TASKS = [ { id: 'sct_008_p4', name: 'Powder_Room.jpg', url: '/assets/images/properties/Luxury_Driveway_Residence.jpg', annotation: 'Powder room — confirm wire gauge' }, ], statusHistory: [ - { id: 'sct_008_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Admin One', comment: 'Task created and assigned.', at: '2026-05-16T13:00:00Z' }, - { id: 'sct_008_h2', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Subcontractor', comment: 'On site, kitchen done; bath next.', at: '2026-05-19T10:15:00Z' }, + { id: 'sct_008_h1', status: 'Assigned', actorId: 'ADM01', actorName: 'Wade Hollis', comment: 'Task created and assigned.', at: '2026-05-16T13:00:00Z' }, + { id: 'sct_008_h2', status: 'In Progress', actorId: 'sub_001', actorName: 'Carlos Mendoza', comment: 'On site, kitchen done; bath next.', at: '2026-05-19T10:15:00Z' }, ], thread: [ - { id: 'sct_008_t1', channel: 'group', senderId: 'ADM01', senderName: 'Admin One', senderRole: 'Admin', body: 'Insurance is reimbursing the code upgrade — keep receipts for the GFCI devices.', at: '2026-05-16T13:05:00Z' }, - { id: 'sct_008_t2', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Subcontractor', senderRole: 'Subcontractor', body: 'Confirmed — Leviton 20A devices, will keep receipts. Targeting May 19 for the visit.', at: '2026-05-16T14:20:00Z', mine: true }, + { id: 'sct_008_t1', channel: 'group', senderId: 'ADM01', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'Insurance is reimbursing the code upgrade — keep receipts for the GFCI devices.', at: '2026-05-16T13:05:00Z' }, + { id: 'sct_008_t2', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'Confirmed — Leviton 20A devices, will keep receipts. Targeting May 19 for the visit.', at: '2026-05-16T14:20:00Z', mine: true }, { id: 'sct_008_t3', channel: 'group', senderId: 'owner_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Homeowner has 2 small kids — please bring outlet covers as a courtesy.', at: '2026-05-17T09:00:00Z' }, - { id: 'sct_008_t4', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Subcontractor', senderRole: 'Subcontractor', body: 'Will do. Already in my truck.', at: '2026-05-17T09:05:00Z', mine: true }, - { id: 'sct_008_t5', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Subcontractor', senderRole: 'Subcontractor', body: 'Kitchen done. Both counter outlets and the island are on GFCI now. Starting bath after lunch.', at: '2026-05-19T12:30:00Z', mine: true }, - { id: 'sct_008_t6', channel: 'direct', senderId: 'ADM01', senderName: 'Admin One', senderRole: 'Admin', body: 'No permit needed for like-for-like swap. Skip the city portal.', at: '2026-05-16T13:10:00Z' }, + { id: 'sct_008_t4', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'Will do. Already in my truck.', at: '2026-05-17T09:05:00Z', mine: true }, + { id: 'sct_008_t5', channel: 'group', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'Kitchen done. Both counter outlets and the island are on GFCI now. Starting bath after lunch.', at: '2026-05-19T12:30:00Z', mine: true }, + { id: 'sct_008_t6', channel: 'direct', senderId: 'ADM01', senderName: 'Wade Hollis', senderRole: 'Admin', body: 'No permit needed for like-for-like swap. Skip the city portal.', at: '2026-05-16T13:10:00Z' }, { id: 'sct_008_t7', channel: 'group', senderId: 'owner_001', senderName: 'Justin Johnson', senderRole: 'Owner', body: 'Carlos — if you find any aluminum branch wiring, stop and flag it. We will scope as a change order.', at: '2026-05-17T10:00:00Z' }, - { id: 'sct_008_t8', channel: 'direct', senderId: 'sub_001', senderName: 'Carlos Subcontractor', senderRole: 'Subcontractor', body: 'All copper, no aluminum. Proceeding as scoped.', at: '2026-05-19T10:30:00Z', mine: true }, + { id: 'sct_008_t8', channel: 'direct', senderId: 'sub_001', senderName: 'Carlos Mendoza', senderRole: 'Subcontractor', body: 'All copper, no aluminum. Proceeding as scoped.', at: '2026-05-19T10:30:00Z', mine: true }, ], expenses: [ { id: 'sct_008_e1', description: 'Leviton 20A GFCI receptacles (qty 4)', category: 'Materials', amount: 92.0, notes: 'SmartlockPro tamper-resistant.', receiptUrl: 'mock://receipts/leviton-gfci.pdf', createdAt: '2026-05-18T16:00:00Z' }, @@ -5621,7 +5632,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ id: 'sct_008_a1', type: 'status_change', status: 'Assigned', note: 'Task created and assigned to Carlos. Insurance covering code upgrade.', photos: [], - actorId: 'ADM01', actorName: 'Admin One', actorRole: 'Admin', + actorId: 'ADM01', actorName: 'Wade Hollis', actorRole: 'Admin', at: '2026-05-16T13:00:00Z', }, { @@ -5630,7 +5641,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ photos: [ { id: 'sct_008_a2_p1', url: '/assets/images/properties/Modern_White_Suburban_Home.jpg', name: 'kitchen-before.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-19T10:15:00Z', }, { @@ -5639,7 +5650,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ photos: [ { id: 'sct_008_a3_p1', url: '/assets/images/properties/Sunny_Suburban_House.jpg', name: 'gfci-installed.jpg' }, ], - actorId: 'sub_001', actorName: 'Carlos Subcontractor', actorRole: 'Subcontractor', + actorId: 'sub_001', actorName: 'Carlos Mendoza', actorRole: 'Subcontractor', at: '2026-05-19T12:30:00Z', }, ], @@ -5658,7 +5669,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ companyId: 'lynkeduppro', companyName: 'LynkedUp Pro Roofing', subcontractorId: 'sub_001', - subcontractorName: 'Carlos Subcontractor', + subcontractorName: 'Carlos Mendoza', assignedBy: 'owner_001', assignedByName: 'Justin Johnson', title: 'Install EV charger circuit — garage', @@ -5688,14 +5699,14 @@ const MOCK_SUBCONTRACTOR_TASKS = [ }, // ------------------------------------------------------------------- - // sct_009 — Jennifer Wu (sub_004) — On Hold plumbing + // sct_009 — Jennifer Castillo (sub_004) — On Hold plumbing // ------------------------------------------------------------------- { id: 'sct_009', companyId: 'lynkeduppro', companyName: 'LynkedUp Pro Roofing', subcontractorId: 'sub_004', - subcontractorName: 'Jennifer Wu', + subcontractorName: 'Jennifer Castillo', assignedBy: 'owner_001', assignedByName: 'Justin Johnson', title: 'Rough-in plumbing for ADU bathroom', @@ -5707,7 +5718,7 @@ const MOCK_SUBCONTRACTOR_TASKS = [ photos: [], statusHistory: [ { id: 'sct_009_h1', status: 'Assigned', actorId: 'owner_001', actorName: 'Justin Johnson', comment: 'Task created.', at: '2026-05-09T10:00:00Z' }, - { id: 'sct_009_h2', status: 'On Hold', actorId: 'sub_004', actorName: 'Jennifer Wu', comment: 'Waiting on framing to finish.', at: '2026-05-13T12:00:00Z' }, + { id: 'sct_009_h2', status: 'On Hold', actorId: 'sub_004', actorName: 'Jennifer Castillo', comment: 'Waiting on framing to finish.', at: '2026-05-13T12:00:00Z' }, ], thread: [], expenses: [], @@ -5771,7 +5782,7 @@ const MOCK_NOTIFICATIONS = [ { id: 'notif_007', recipientUserId: 'sub_002', recipientRole: 'SUBCONTRACTOR', type: 'message_received', - message: 'Admin One added an internal note on sct_005 — "I will reach out to the homeowner…"', + message: 'Wade Hollis added an internal note on sct_005 — "I will reach out to the homeowner…"', taskId: 'sct_005', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: true, createdAt: '2026-05-15T16:20:00Z', }, @@ -5840,7 +5851,7 @@ const MOCK_NOTIFICATIONS = [ { id: 'notif_026', recipientUserId: 'sub_001', recipientRole: 'SUBCONTRACTOR', type: 'message_received', - message: 'Admin One sent a new message on sct_008 — "Insurance is reimbursing the code upgrade…"', + message: 'Wade Hollis sent a new message on sct_008 — "Insurance is reimbursing the code upgrade…"', taskId: 'sct_008', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: false, createdAt: '2026-05-16T13:05:00Z', }, @@ -5854,14 +5865,14 @@ const MOCK_NOTIFICATIONS = [ { id: 'notif_028', recipientUserId: 'sub_001', recipientRole: 'SUBCONTRACTOR', type: 'task_updated', - message: 'Photos updated on sct_008 by Admin One.', + message: 'Photos updated on sct_008 by Wade Hollis.', taskId: 'sct_008', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: false, createdAt: '2026-05-16T13:30:00Z', }, { id: 'notif_029', recipientUserId: 'sub_001', recipientRole: 'SUBCONTRACTOR', type: 'status_changed', - message: 'Status for sct_008 changed to In Progress by Carlos Subcontractor.', + message: 'Status for sct_008 changed to In Progress by Carlos Mendoza.', taskId: 'sct_008', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: true, createdAt: '2026-05-19T10:15:00Z', }, @@ -5875,14 +5886,14 @@ const MOCK_NOTIFICATIONS = [ { id: 'notif_024', recipientUserId: 'sub_001', recipientRole: 'SUBCONTRACTOR', type: 'task_updated', - message: 'Permit fee on sct_002 was approved by Admin One.', + message: 'Permit fee on sct_002 was approved by Wade Hollis.', taskId: 'sct_002', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: false, createdAt: '2026-05-11T14:30:00Z', }, { id: 'notif_025', recipientUserId: 'sub_001', recipientRole: 'SUBCONTRACTOR', type: 'status_changed', - message: 'Status for sct_002 changed to In Progress by Carlos Subcontractor.', + message: 'Status for sct_002 changed to In Progress by Carlos Mendoza.', taskId: 'sct_002', fromCompanyId: 'lynkeduppro', fromCompanyName: 'LynkedUp Pro Roofing', isRead: true, createdAt: '2026-05-12T08:20:00Z', }, @@ -5924,7 +5935,7 @@ export const MockStoreProvider = ({ children }) => { }); const [userCommissionOverrides, setUserCommissionOverrides] = useState([ { userId: 'p1', userName: 'Jesus Gonzales', enabled: true, type: 'percent_gross', rate: 12 }, - { userId: 'p2', userName: 'Sarah Sales', enabled: true, type: 'flat', rate: 2000 }, + { userId: 'p2', userName: 'Sarah Calloway', enabled: true, type: 'flat', rate: 2000 }, ]); // ── Org Settings & Access Control ── @@ -6015,18 +6026,18 @@ export const MockStoreProvider = ({ children }) => { const [orgMembers, setOrgMembers] = useState([ { id: 'om_001', userId: 'owner_001', name: 'Justin Johnson', email: 'justin@lynkeduppro.com', roleKey: 'OWNER', status: 'active', joinedAt: '2024-01-15', lastActivity: '2025-05-12', assignedJobsCount: 14 }, - { id: 'om_002', userId: 'owner_002', name: 'Maria Garcia', email: 'maria@lynkeduppro.com', roleKey: 'OWNER', status: 'active', joinedAt: '2024-01-15', lastActivity: '2025-05-10', assignedJobsCount: 8 }, - { id: 'om_003', userId: 'ADM01', name: 'Admin One', email: 'admin1@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-02-10', lastActivity: '2025-05-11', assignedJobsCount: 6 }, - { id: 'om_004', userId: 'ADM02', name: 'Admin Two', email: 'admin2@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-03-01', lastActivity: '2025-05-09', assignedJobsCount: 4 }, - { id: 'om_005', userId: 'ADM03', name: 'Admin Three', email: 'admin3@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-04-20', lastActivity: '2025-05-08', assignedJobsCount: 3 }, + { id: 'om_002', userId: 'owner_002', name: 'Diana Reeves', email: 'maria@lynkeduppro.com', roleKey: 'OWNER', status: 'active', joinedAt: '2024-01-15', lastActivity: '2025-05-10', assignedJobsCount: 8 }, + { id: 'om_003', userId: 'ADM01', name: 'Wade Hollis', email: 'admin1@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-02-10', lastActivity: '2025-05-11', assignedJobsCount: 6 }, + { id: 'om_004', userId: 'ADM02', name: 'Darlene Brooks', email: 'admin2@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-03-01', lastActivity: '2025-05-09', assignedJobsCount: 4 }, + { id: 'om_005', userId: 'ADM03', name: 'Roy Schaefer', email: 'admin3@lynkeduppro.com', roleKey: 'ADMIN', status: 'active', joinedAt: '2024-04-20', lastActivity: '2025-05-08', assignedJobsCount: 3 }, { id: 'om_006', userId: 'p1', name: 'Jesus Gonzales', email: 'jesus@lynkeduppro.com', roleKey: 'SALES_REP', status: 'active', joinedAt: '2024-03-15', lastActivity: '2025-05-12', assignedJobsCount: 9, individualCommission: { enabled: true, type: 'percent_gross', rate: 12 } }, - { id: 'om_007', userId: 'p2', name: 'Sarah Sales', email: 'sarah@lynkeduppro.com', roleKey: 'SALES_REP', status: 'active', joinedAt: '2024-04-01', lastActivity: '2025-05-11', assignedJobsCount: 7, individualCommission: { enabled: true, type: 'flat', rate: 2000 } }, - { id: 'om_008', userId: 'FA001', name: 'Frank Agent', email: 'agent1@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-05-10', lastActivity: '2025-05-12', assignedJobsCount: 2 }, - { id: 'om_009', userId: 'FA002', name: 'Fiona Field', email: 'agent2@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-05-15', lastActivity: '2025-05-07', assignedJobsCount: 3 }, - { id: 'om_010', userId: 'FA003', name: 'Fred Flyer', email: 'agent3@plano.com', roleKey: 'CANVASSER', status: 'invited', joinedAt: '2024-06-01', lastActivity: null, assignedJobsCount: 0 }, - { id: 'om_011', userId: 'FA004', name: 'Felicity Fast', email: 'agent4@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-06-10', lastActivity: '2025-05-06', assignedJobsCount: 1 }, - { id: 'om_012', userId: 'FA005', name: 'Felix Fixer', email: 'agent5@plano.com', roleKey: 'CANVASSER', status: 'suspended', joinedAt: '2024-07-01', lastActivity: '2025-03-20', assignedJobsCount: 0 }, - { id: 'om_013', userId: 'sub_001', name: 'Carlos Subcontractor', email: 'carlos@electricpro.com', roleKey: 'SUBCONTRACTOR', status: 'active', joinedAt: '2024-08-01', lastActivity: '2025-05-10', assignedJobsCount: 5 }, + { id: 'om_007', userId: 'p2', name: 'Sarah Calloway', email: 'sarah@lynkeduppro.com', roleKey: 'SALES_REP', status: 'active', joinedAt: '2024-04-01', lastActivity: '2025-05-11', assignedJobsCount: 7, individualCommission: { enabled: true, type: 'flat', rate: 2000 } }, + { id: 'om_008', userId: 'FA001', name: 'Cody Tatum', email: 'agent1@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-05-10', lastActivity: '2025-05-12', assignedJobsCount: 2 }, + { id: 'om_009', userId: 'FA002', name: 'Hannah Reyes', email: 'agent2@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-05-15', lastActivity: '2025-05-07', assignedJobsCount: 3 }, + { id: 'om_010', userId: 'FA003', name: 'Travis Boone', email: 'agent3@plano.com', roleKey: 'CANVASSER', status: 'invited', joinedAt: '2024-06-01', lastActivity: null, assignedJobsCount: 0 }, + { id: 'om_011', userId: 'FA004', name: 'Shelby Greer', email: 'agent4@plano.com', roleKey: 'CANVASSER', status: 'active', joinedAt: '2024-06-10', lastActivity: '2025-05-06', assignedJobsCount: 1 }, + { id: 'om_012', userId: 'FA005', name: 'Dalton Pruitt', email: 'agent5@plano.com', roleKey: 'CANVASSER', status: 'suspended', joinedAt: '2024-07-01', lastActivity: '2025-03-20', assignedJobsCount: 0 }, + { id: 'om_013', userId: 'sub_001', name: 'Carlos Mendoza', email: 'carlos@electricpro.com', roleKey: 'SUBCONTRACTOR', status: 'active', joinedAt: '2024-08-01', lastActivity: '2025-05-10', assignedJobsCount: 5 }, ]); // Subcontractor management (Feature 8.2) diff --git a/src/pages/LeadProjectPage.jsx b/src/pages/LeadProjectPage.jsx index 7fb21d7..503f38b 100644 --- a/src/pages/LeadProjectPage.jsx +++ b/src/pages/LeadProjectPage.jsx @@ -181,9 +181,9 @@ function getDocType(filename) { function seedLeadDocs(leadId) { const base = [ { id: 'ld1', name: 'Insurance Claim Form.pdf', uploadedBy: 'Owner', uploadedDate: '2026-02-01', size: '245 KB', notes: 'Original claim. Reference for all supplements.' }, - { id: 'ld2', name: 'Signed Contract.pdf', uploadedBy: 'Frank Agent',uploadedDate: '2026-02-05', size: '512 KB', notes: 'Fully executed. See payment schedule p.4.' }, - { id: 'ld3', name: 'Inspection Report.pdf', uploadedBy: 'Frank Agent',uploadedDate: '2026-01-28', size: '1.1 MB', notes: 'Hail damage confirmed. Photos on p.7-12.' }, - { id: 'ld4', name: 'Before Photo - Front.jpg', uploadedBy: 'Frank Agent',uploadedDate: '2026-02-06', size: '2.8 MB', notes: '' }, + { id: 'ld2', name: 'Signed Contract.pdf', uploadedBy: 'Cody Tatum',uploadedDate: '2026-02-05', size: '512 KB', notes: 'Fully executed. See payment schedule p.4.' }, + { id: 'ld3', name: 'Inspection Report.pdf', uploadedBy: 'Cody Tatum',uploadedDate: '2026-01-28', size: '1.1 MB', notes: 'Hail damage confirmed. Photos on p.7-12.' }, + { id: 'ld4', name: 'Before Photo - Front.jpg', uploadedBy: 'Cody Tatum',uploadedDate: '2026-02-06', size: '2.8 MB', notes: '' }, { id: 'ld5', name: 'Material Spec Sheet.md', uploadedBy: 'Owner', uploadedDate: '2026-02-07', size: '11 KB', notes: 'GAF Timberline HDZ — Class 4 IR.' }, { id: 'ld6', name: 'Adjuster Notes.docx', uploadedBy: 'Owner', uploadedDate: '2026-02-10', size: '42 KB', notes: '' }, ]; diff --git a/src/pages/owner/OwnerProjectDetail.jsx b/src/pages/owner/OwnerProjectDetail.jsx index 25f076f..cf180a7 100644 --- a/src/pages/owner/OwnerProjectDetail.jsx +++ b/src/pages/owner/OwnerProjectDetail.jsx @@ -98,12 +98,12 @@ function getDocType(filename) { function seedDocsMock(projectId) { const all = [ { id: 'doc_1', name: 'Insurance Claim Form.pdf', uploadedBy: 'Sarah Owner', uploadedDate: '2026-01-15', size: '245 KB', notes: 'Original claim submitted. Claim #TX-9920-881.' }, - { id: 'doc_2', name: 'Roof Inspection Report.pdf', uploadedBy: 'Frank Agent', uploadedDate: '2026-01-18', size: '1.2 MB', notes: 'Hail damage confirmed on north face. See page 7.' }, + { id: 'doc_2', name: 'Roof Inspection Report.pdf', uploadedBy: 'Cody Tatum', uploadedDate: '2026-01-18', size: '1.2 MB', notes: 'Hail damage confirmed on north face. See page 7.' }, { id: 'doc_3', name: 'Adjuster Notes.docx', uploadedBy: 'Sarah Owner', uploadedDate: '2026-01-22', size: '38 KB', notes: '' }, - { id: 'doc_4', name: 'Signed Contract.pdf', uploadedBy: 'Frank Agent', uploadedDate: '2026-02-01', size: '512 KB', notes: 'Fully executed. Watch payment schedule on page 4.' }, - { id: 'doc_5', name: 'Before Photo - Front.jpg', uploadedBy: 'Frank Agent', uploadedDate: '2026-02-03', size: '3.1 MB', notes: 'Taken before work started.' }, + { id: 'doc_4', name: 'Signed Contract.pdf', uploadedBy: 'Cody Tatum', uploadedDate: '2026-02-01', size: '512 KB', notes: 'Fully executed. Watch payment schedule on page 4.' }, + { id: 'doc_5', name: 'Before Photo - Front.jpg', uploadedBy: 'Cody Tatum', uploadedDate: '2026-02-03', size: '3.1 MB', notes: 'Taken before work started.' }, { id: 'doc_6', name: 'Material Spec Sheet.md', uploadedBy: 'Sarah Owner', uploadedDate: '2026-02-05', size: '12 KB', notes: 'Owens Corning Duration — Class 4 IR.' }, - { id: 'doc_7', name: 'Site Sketch.png', uploadedBy: 'Frank Agent', uploadedDate: '2026-02-08', size: '890 KB', notes: '' }, + { id: 'doc_7', name: 'Site Sketch.png', uploadedBy: 'Cody Tatum', uploadedDate: '2026-02-08', size: '890 KB', notes: '' }, { id: 'doc_8', name: 'Work Order.txt', uploadedBy: 'Sarah Owner', uploadedDate: '2026-02-10', size: '4 KB', notes: 'Internal work order #WO-2026-044.' }, ]; const seed = projectId.charCodeAt(projectId.length - 1) % 4; @@ -158,8 +158,8 @@ function seedExpenseRowsMock(project) { const seed = (project?.id || '').charCodeAt((project?.id || 'x').length - 1) % 3; const teamRows = [ { id: 'exp_team_1', type: 'team', name: 'Jesus Gonzales', category: 'Sales Rep', allocated: 4200, actual: 4200, paid: true }, - { id: 'exp_team_2', type: 'team', name: 'Frank Agent', category: 'Canvasser', allocated: 1500, actual: 1500, paid: false }, - { id: 'exp_team_3', type: 'team', name: 'Sarah Sales', category: 'Estimator', allocated: 1200, actual: 0, paid: false }, + { id: 'exp_team_2', type: 'team', name: 'Cody Tatum', category: 'Canvasser', allocated: 1500, actual: 1500, paid: false }, + { id: 'exp_team_3', type: 'team', name: 'Sarah Calloway', category: 'Estimator', allocated: 1200, actual: 0, paid: false }, ].slice(0, 2 + seed); const subRows = [ { id: 'exp_sub_1', type: 'subcontractor', name: 'PlumbPro Services', category: 'Plumbing', allocated: 1800, actual: 1800, paid: true },