From 545b2ad26927bcec06e6708fb3f7ef62f7115b48 Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Mon, 11 May 2026 02:05:11 -0400 Subject: [PATCH] refactor(legal): extract MarketingFooter, mount on /pricing and /contact-sales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pulls the existing /landing footer markup into `components/common/MarketingFooter.tsx` and mounts it on PricingPage and ContactSalesPage so the Privacy / Terms / Policies / Contact links are reachable from every marketing surface (including the page Stripe's reviewer spends the most time on during live-mode activation). All three current call sites wrap in `.landing-page`, so the existing `landing-footer` CSS — and its `--lp-*` variables — resolve without change. Landing renders pixel-identically; Pricing and ContactSales now match. A JSX comment on the component documents the `.landing-page` scoping requirement so future authors don't drop it on a non-marketing route and see it render unstyled. Co-Authored-By: Claude Opus 4.7 --- .../src/components/common/MarketingFooter.tsx | 35 +++++++++++++++++++ frontend/src/pages/ContactSalesPage.tsx | 3 ++ frontend/src/pages/LandingPage.tsx | 26 ++------------ frontend/src/pages/PricingPage.tsx | 3 ++ 4 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 frontend/src/components/common/MarketingFooter.tsx diff --git a/frontend/src/components/common/MarketingFooter.tsx b/frontend/src/components/common/MarketingFooter.tsx new file mode 100644 index 00000000..978a7cdf --- /dev/null +++ b/frontend/src/components/common/MarketingFooter.tsx @@ -0,0 +1,35 @@ +import { Link } from 'react-router-dom' + +// Styles live in src/styles/landing.css under `.landing-footer*`. The component +// must be rendered inside a `.landing-page` wrapper so the `--lp-*` CSS +// variables resolve. All current marketing surfaces (LandingPage, +// PricingPage, ContactSalesPage) already provide that wrapper. +export function MarketingFooter() { + return ( +
+
+
+
+ + + + + + + + +
+ © 2026 ResolutionFlow +
+
    +
  • Privacy
  • +
  • Terms
  • +
  • Policies
  • +
  • Contact
  • +
+
+
+ ) +} + +export default MarketingFooter diff --git a/frontend/src/pages/ContactSalesPage.tsx b/frontend/src/pages/ContactSalesPage.tsx index dd083ba6..3e7665f7 100644 --- a/frontend/src/pages/ContactSalesPage.tsx +++ b/frontend/src/pages/ContactSalesPage.tsx @@ -3,6 +3,7 @@ import { Link } from 'react-router-dom' import { salesApi, type SalesLeadSource } from '@/api/sales' import { PageMeta } from '@/components/common/PageMeta' +import { MarketingFooter } from '@/components/common/MarketingFooter' import { useAppConfig } from '@/hooks/useAppConfig' import '@/styles/landing.css' @@ -342,6 +343,8 @@ export function ContactSalesPage() { )} + + ) diff --git a/frontend/src/pages/LandingPage.tsx b/frontend/src/pages/LandingPage.tsx index 64913cdd..3c352033 100644 --- a/frontend/src/pages/LandingPage.tsx +++ b/frontend/src/pages/LandingPage.tsx @@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react' import { Link } from 'react-router-dom' import { PageMeta } from '@/components/common/PageMeta' import { useAppConfig } from '@/hooks/useAppConfig' +import { MarketingFooter } from '@/components/common/MarketingFooter' import '@/styles/landing.css' const FAQ_ITEMS = [ @@ -410,30 +411,7 @@ export default function LandingPage() { - {/* Footer */} -
-
-
-
- - - - - - - - -
- © 2026 ResolutionFlow -
-
    -
  • Privacy
  • -
  • Terms
  • -
  • Policies
  • -
  • Contact
  • -
-
-
+ diff --git a/frontend/src/pages/PricingPage.tsx b/frontend/src/pages/PricingPage.tsx index 6abdd4bf..8632e2d2 100644 --- a/frontend/src/pages/PricingPage.tsx +++ b/frontend/src/pages/PricingPage.tsx @@ -3,6 +3,7 @@ import { Link } from 'react-router-dom' import { plansApi, type PublicPlanResponse } from '@/api/plans' import { PageMeta } from '@/components/common/PageMeta' +import { MarketingFooter } from '@/components/common/MarketingFooter' import { useAppConfig } from '@/hooks/useAppConfig' import '@/styles/landing.css' @@ -431,6 +432,8 @@ export function PricingPage() { > Built on Stripe + AWS · Encrypted in transit and at rest + + )