Files
zeekay 2196d6ee71 refactor(site): every brand-bearing string flows through @luxbank/brand; add LUX_BRAND_OVERRIDE/INLINE env passthrough + tenant examples
- @luxbank/brand: add productName, urls, contactEmails, copyright surfaces
  to BrandConfig; resolve tenant overrides from LUX_BRAND_INLINE (JSON
  string, optionally base64) and LUX_BRAND_OVERRIDE (path to JSON file);
  domain-driven URL/email derivation when only `domains.primary` is set.
- next.config.js: resolve LUX_BRAND_OVERRIDE at Node config time and
  pass through as LUX_BRAND_INLINE so the same JSON is visible to both
  server and client bundles (no fs in the browser).
- layout.tsx: metadata reads from LUX_BRAND.name + urls.site.
- Footer/Menu/NavDropdown/CommandPalette/ChatWidget/UserSteps: all
  brand-bearing URLs, emails, copyright, attribution, and product-name
  strings sourced from LUX_BRAND.
- ~40 product/technology/solutions/contact/press/security pages: hardcoded
  docs.lux.financial / app.lux.financial / status.lux.financial /
  cal.com/luxfi / mailto:*@lux.financial swapped for LUX_BRAND.urls.* and
  LUX_BRAND.contactEmails.*.
- examples/tenant-bank.example.json + tenant-psp.example.json: working
  fictitious tenant overrides demonstrating the full surface (name,
  legalName, productName, domains, urls, contactEmails, copyright, colors,
  social). Build the same code as a fully-rebranded site with
  LUX_BRAND_OVERRIDE=./examples/tenant-<x>.example.json pnpm build.
- pkg/brand 1.0.2 -> 1.0.3; root 0.1.2 -> 0.1.3.
2026-05-24 14:53:04 -07:00
..