Title: Route audit + remove stray pricing pages + hard redirects

Prompt:

Goal
Clean up “stray” pages and enforce a single source of truth for pricing (memberships only).

1) Inventory all public routes

List every route from App.tsx (Wouter) and any nested Switches.

Output the list into the console (path → component file).

Flag anything under /pricing/** that is not one of:

/pricing (membership)

/pricing/web-services (if exists)

/pricing/web-add-ons (if exists)

2) Remove stray pricing pages

Delete the /pricing/business-assets route and component (and any related menu entry).

Search for and remove any dead links to it.

3) Hard redirects for legacy URLs

Add a tiny redirect map (component or util) so legacy paths 301/302 to the right place:

/pricing/business-assets → /pricing

/pricing/assets → /pricing

Any /pricing/*-templates → /pricing

4) Locked-down Pricing menu

Pricing dropdown should only show:

Business Development → /pricing

Web Services → /pricing/web-services (if page exists)

Web Add-Ons → /pricing/web-add-ons (if page exists)

Remove “Business Assets” from the dropdown.

5) 404 + sitemap consistency

Ensure /pricing/* unknown routes fall back to a friendly 404 that links to /pricing.

Update sitemap (if present) to remove deleted pages.

Micro-diffs (examples)

A) Routes cleanup (App.tsx)

--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -300,10 +300,6 @@
   <Switch>
     <Route path="/pricing" component={PricingPage} />
-    <Route path="/pricing/business-assets" component={PricingBusinessAssets} />
-    <Route path="/pricing/assets" component={PricingBusinessAssets} />
     <Route path="/pricing/web-services" component={PricingWebServices} />
     <Route path="/pricing/web-add-ons" component={PricingWebAddOns} />
+    <Route path="/pricing/:catchall">
+      <Redirect to="/pricing" />
+    </Route>
   </Switch>


B) Redirect util (if Wouter Redirect isn’t handy)

// client/src/components/Redirect.tsx
import { useEffect } from "react";
import { useLocation } from "wouter";
export default function Redirect({ to }: { to: string }) {
  const [, nav] = useLocation();
  useEffect(() => { nav(to, { replace: true }); }, [to]);
  return null;
}


C) Pricing menu (Navbar / MobileMenu)

--- a/client/src/components/layout/Navbar.tsx
+++ b/client/src/components/layout/Navbar.tsx
@@ -80,10 +80,10 @@
   <Dropdown label="Pricing">
-    <Dropdown.Item href="/pricing/business-assets">Business Assets</Dropdown.Item>
+    <Dropdown.Item href="/pricing">Business Development</Dropdown.Item>
     <Dropdown.Item href="/pricing/web-services">Web Services</Dropdown.Item>
     <Dropdown.Item href="/pricing/web-add-ons">Web Add-Ons</Dropdown.Item>
   </Dropdown>


D) Delete stray files

Remove client/src/pages/pricing/PricingBusinessAssets.tsx (or similarly named).

Grep for /pricing/business-assets and remove stale links.

6) Console route inventory (dev-only)

Add a temporary helper to log all imported <Route> paths at startup so we can sanity-check there are no other orphans. Remove after review.

Acceptance

Visiting /pricing/business-assets now lands on /pricing.

Pricing dropdown has no “Business Assets” item.

No dead links in the app.

Sitemap and 404 behavior are consistent.

Bonus (prevents future gremlins)

Route guard test page: add a hidden /__routes dev page that lists all routes at runtime (dev only).

Robots.txt: disallow indexing for any /pricing/* paths you might deprecate during transitions.

Analytics: add an event for redirect.legacy_pricing with { from, to } so you can see if any old links still get traffic.