diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx index add75c1..ed890bb 100644 --- a/src/components/Layout.jsx +++ b/src/components/Layout.jsx @@ -112,8 +112,7 @@ const Layout = () => { }, []); // Determine standard layout vs full screen for Public pages - const isPublic = ['/', '/login', '/estimate'].includes(location.pathname) - || location.pathname.startsWith('/ads/'); + const isPublic = ['/', '/login'].includes(location.pathname); if (isPublic) { return ( @@ -155,12 +154,12 @@ const Layout = () => { { to: "/admin/schedule", icon: Calendar, label: "Team Schedule" }, { to: "/admin/leaderboard", icon: Trophy, label: "Leaderboard" }, { to: "/owner/subcontractor-tasks", icon: HardHat, label: "Subcontractor Tasks" }, - { to: "/owner/payments", icon: CreditCard, label: "Payment Management" }, { to: "/owner/people", icon: Users, label: "People" }, { to: "/owner/settings", icon: Settings, label: "Org Settings" }, ...commonItems, { to: "/estimate-wizard/admin", icon: Settings, label: "Wizard Admin" }, { to: "/marketing", icon: Megaphone, label: "Ad Engine" }, + { to: "/owner/payments", icon: CreditCard, label: "Manage Payments" }, { type: "section", label: "Upcoming Features" }, { to: "/campaignx", icon: Rocket, label: CampaignX }, ]; @@ -182,11 +181,11 @@ const Layout = () => { }, { to: "/admin/estimates", icon: Calculator, label: "Estimates" }, { to: "/admin/subcontractor-tasks", icon: HardHat, label: "Subcontractor Tasks" }, - { to: "/owner/payments", icon: CreditCard, label: "Payment Management" }, { to: "/admin/settings", icon: Settings, label: "Org Settings" }, ...commonItems, { to: "/estimate-wizard/admin", icon: Settings, label: "Wizard Admin" }, { to: "/marketing", icon: Megaphone, label: "Ad Engine" }, + { to: "/owner/payments", icon: CreditCard, label: "Manage Payments" }, { type: "section", label: "Upcoming Features" }, { to: "/campaignx", icon: Rocket, label: CampaignX }, ]; diff --git a/src/context/ThemeContext.jsx b/src/context/ThemeContext.jsx index 563d109..6f45c4a 100644 --- a/src/context/ThemeContext.jsx +++ b/src/context/ThemeContext.jsx @@ -9,12 +9,8 @@ export const ThemeProvider = ({ children }) => { if (savedTheme) { return savedTheme; } - // Check system preference - if (window.matchMedia('(prefers-color-scheme: dark)').matches) { - return 'dark'; - } } - return 'light'; // Default to light if no preference + return 'dark'; // Default to dark for first-time visitors }); useEffect(() => { diff --git a/src/data/mockStore.jsx b/src/data/mockStore.jsx index 79ed485..70a43d1 100644 --- a/src/data/mockStore.jsx +++ b/src/data/mockStore.jsx @@ -3613,9 +3613,9 @@ const MOCK_PROJECTS = [ budget: 19600, approvedBudget: 19600, committedCost: 18100, - actualCost: 0, - spent: 0, - variancePercent: -100.0, + actualCost: 18100, + spent: 18100, + variancePercent: -7.7, margin: 0.08, commissionType: 'percent_gross', commissionRate: 10, @@ -3632,6 +3632,22 @@ const MOCK_PROJECTS = [ { name: 'City of Plano', category: 'Permits', allocated: 600, committed: 600, actual: 0 }, { name: 'Reserve Fund', category: 'Contingency', allocated: 1500, committed: 0, actual: 0 }, ], + expenses: [ + { id: 'exp_017_1', type: 'material', name: 'Owens Corning', category: 'Materials', allocated: 10500, actual: 10500, paid: true, paymentRequests: [ + { id: 'req_017_1_1', requestDate: '2026-04-02', requestedAmount: 10500, amountPaid: 10500, paymentDate: '2026-04-04' } + ] }, + { id: 'exp_017_2', type: 'labor', name: 'Plano Roofing Crew C', category: 'Labor', allocated: 7000, actual: 7000, paid: true, paymentRequests: [ + { id: 'req_017_2_1', requestDate: '2026-04-22', requestedAmount: 7000, amountPaid: 7000, paymentDate: '2026-04-24' } + ] }, + { id: 'exp_017_3', type: 'other', name: 'City of Plano', category: 'Permits', allocated: 600, actual: 600, paid: true, paymentRequests: [ + { id: 'req_017_3_1', requestDate: '2026-04-10', requestedAmount: 600, amountPaid: 600, paymentDate: '2026-04-10' } + ] } + ], + paymentsReceived: [ + { id: 'rcv_017_1', from: 'Adriana Voss', method: 'Check', amount: 5880, date: '2026-03-28', refNumber: 'CHK-2017-01', memo: 'Deposit — 30%' }, + { id: 'rcv_017_2', from: 'Farmers Insurance', method: 'ACH', amount: 7840, date: '2026-04-25', refNumber: 'ACH-2017-02', memo: 'Progress payment — 40%' }, + { id: 'rcv_017_3', from: 'Farmers Insurance', method: 'ACH', amount: 5880, date: '2026-04-28', refNumber: 'ACH-2017-03', memo: 'Final payment — 30%' }, + ], changeOrders: [ { id: 'CO-017-01', title: 'Supplemental — Ice & Water Barrier', amount: 1800, status: 'approved', description: 'Insurance adjuster agreed to add ice/water shield on all valleys and eaves.' }, ], @@ -3640,8 +3656,8 @@ const MOCK_PROJECTS = [ issueLog: [], paymentSchedule: [ { id: 'ps_017_1', milestone: 'Deposit — 30%', amount: 5880, dueDate: '2026-03-28', status: 'paid', paidDate: '2026-03-28' }, - { id: 'ps_017_2', milestone: 'Progress — 40%', amount: 7840, dueDate: '2026-04-25', status: 'pending' }, - { id: 'ps_017_3', milestone: 'Final — 30%', amount: 5880, dueDate: '2026-04-28', status: 'pending' }, + { id: 'ps_017_2', milestone: 'Progress — 40%', amount: 7840, dueDate: '2026-04-25', status: 'paid', paidDate: '2026-04-25' }, + { id: 'ps_017_3', milestone: 'Final — 30%', amount: 5880, dueDate: '2026-04-28', status: 'paid', paidDate: '2026-04-28' }, ], invoices: [], milestones: [ diff --git a/src/modules/payments/pages/DemoCheckout.jsx b/src/modules/payments/pages/DemoCheckout.jsx index de1d72e..ec27ffc 100644 --- a/src/modules/payments/pages/DemoCheckout.jsx +++ b/src/modules/payments/pages/DemoCheckout.jsx @@ -79,9 +79,6 @@ const DemoCheckout = () => { -

- Test card pre-filled for the demo — just press Pay. -

+ )} ); @@ -120,6 +133,18 @@ export default function PublicAdLanding() { return (
+ {/* Back to Ad Engine — only when opened as a preview from inside the CRM */} + {cameFromApp && ( +
+ +
+ )} + {/* Sponsored banner — simulates the ad context */}