fix: maintain Services dropdown header from one canonical source

The site header / Services mega-dropdown was duplicated across two render
systems (Astro pages via Base.astro->nav.html, and ~80 pre-rendered static
public/**/index.html pages each embedding their own copy). They had drifted
into 5 different variants (missing 'New Carrier Setup', misplaced Healthcare
column, NEW vs FREE badges, em-dash encoding differences), so
dev.performancewest.net, the order pages, and the rest of the site disagreed.

- Make site/src/partials/nav.html the single source of truth (adopts the most
  complete variant).
- Add scripts/sync_nav.py to rewrite every static page's <nav> block from
  nav.html (idempotent; --check guards against drift in CI/deploy).
- Run the sync automatically in deploy.sh and scripts/deploy-dev.sh.
- Deprecate scripts/inject_healthcare_nav.py (now delegates to sync_nav.py).
- Neutralize the broken no-op SiteNav.astro component.

All 80 headers + the Astro-built order pages now render the identical dropdown.
This commit is contained in:
justin 2026-06-05 14:27:24 -05:00
parent 695ace207c
commit bd9a70607f
86 changed files with 250 additions and 645 deletions

View file

@ -1,6 +1,13 @@
---
// Production site navigation — extracted from the static homepage.
// This component is included in Base.astro to give all Astro-built
// pages the same nav as the static pages in public/.
// DEPRECATED / unused.
//
// Site navigation is rendered from a single canonical source:
// - Astro pages: layouts/Base.astro reads src/partials/nav.html and injects it.
// - Static pages (public/**/index.html): kept byte-identical to nav.html by
// scripts/sync_nav.py (run on every deploy).
//
// This component used to attempt an Astro.glob() include but was a no-op
// (it always rendered an empty string). It is intentionally left empty so
// any stray imports keep compiling; do NOT add nav markup here -- edit
// src/partials/nav.html instead.
---
<Fragment set:html={await Astro.glob('../partials/nav.html').then(() => '').catch(() => '')} />