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 = () => {
-