// Footer.jsx // // Multi-column sitemap footer. Links to pages that will always be // lead-capture-only by design - Resources/Insights (no blog CMS exists) and // Developer Platform (no public API exists) - carry an explicit "Early // Access Portal" tag, per SPEC-07's anti-hallucination conversion pattern // (Section 3/9). Everything else (Product/Solutions, Case Studies, Careers) // is NOT tagged: each now has real content behind it, not a placeholder. // // Also renders PrivacyNotice, a small dismissible banner - deliberately // NOT a cookie-consent prompt with an accept/reject choice, since this // site sets zero tracking or advertising cookies (verified: no // document.cookie, no analytics/ad scripts anywhere in this codebase). A // consent prompt for tracking that doesn't exist would be a dark pattern, // not a real feature - so this states the honest fact instead and links to // the Privacy Policy. Its own dismissal flag is the one piece of local // storage LegalPage.jsx's Cookies section already covers ("limited to // what's needed for the site to function"). // // Loaded as a classic (non-module) Babel-transformed script - see // index.html's header comment. PrivacyNotice uses React.useState, so // (unlike the rest of this file) it does depend on `window.React` being // ready by the time Footer actually renders - true by then, since App() // only boots after the react-ready bridge script runs (see index.html). function EarlyAccessTag() { return ( Early Access ); } function FooterLink({ href, label, tagged }) { return (
  • {label} {tagged && }
  • ); } function FooterColumn({ title, children }) { return (

    {title}

    ); } const PRIVACY_NOTICE_DISMISSED_KEY = "skelbiz_privacy_notice_dismissed"; function PrivacyNotice() { const [dismissed, setDismissed] = React.useState(() => { try { return window.localStorage.getItem(PRIVACY_NOTICE_DISMISSED_KEY) === "1"; } catch (e) { return false; } }); if (dismissed) return null; const dismiss = () => { try { window.localStorage.setItem(PRIVACY_NOTICE_DISMISSED_KEY, "1"); } catch (e) { // Private browsing / storage disabled - fine, it just re-shows next visit. } setDismissed(true); }; return (

    This site doesn't use tracking or advertising cookies - no analytics, no ad pixels, nothing watching you across visits.{" "} Read our Privacy Policy .

    ); } const PRODUCT_COLUMN_LINKS = [ { slug: "fleet-dispatch", label: "Fleet & Dispatch" }, { slug: "sales-orders", label: "Sales Orders" }, { slug: "purchase-grn", label: "Purchase Orders & GRN" }, { slug: "inventory", label: "Inventory Management" }, { slug: "warehouses", label: "Multi-Warehouse Management" }, { slug: "production-workflow", label: "Production & WIP Workflow" }, { slug: "business-rules", label: "Business Rules Engine" }, { slug: "analytics-dashboards", label: "Analytics & Dashboards" }, { slug: "ai-assistant", label: "AI Business Assistant" }, ]; function Footer() { const year = new Date().getFullYear(); return ( <> ); }