Files
bridge/app
zeekay 1c95699b99 app/bridge: read Lux brand from @luxfi/brand (single source of truth)
Replace the five hardcoded Lux strings/colors in the Lux tenant build
with reads from @luxfi/brand's brand.json:

  name           "Lux Bridge"                  -> `${shortName} Bridge`
  primaryColor   "#5b8def"                     -> brand.primaryColor (#000000)
  secondaryColor "#7a9ff5"                     -> theme.dark.accent1
  supportEmail   "[email protected]"         -> brand.supportEmail
  apiHost / docsUrl literal lux.network        -> derived from appDomain/docsDomain

Use the `@luxfi/brand/brand.json` subpath rather than the package's
main entry: the npm-published @luxfi/[email protected] omits its .d.ts shipping
artefacts, but brand.json is included and TypeScript infers full literal
types under `resolveJsonModule`. This also keeps the package as the
single source of truth — a brand block bump in @luxfi/brand propagates
here on the next install with no string copies.

Each lookup keeps a hard fallback string so the build never breaks when
@luxfi/brand omits a field in a future version. The fallbacks match the
pre-cutover hardcodes (lux.network defaults).

Tenant build verified:
  pnpm --filter @luxbridge/lux-tenant typecheck   clean
  pnpm --filter @luxbridge/lux-tenant build       clean (bundles brand.json)
  pnpm --filter @luxfi/bridge typecheck           clean (SDK unchanged)

SDK sweep clean: no hardcoded Lux brand overrides under pkg/bridge/src/app/.
The two remaining matches are:
  - pkg/bridge/src/app/styles/theme.css   header comment naming the SDK
  - pkg/bridge/src/app/lib/chains.ts:29   `name: 'Lux Network'` chain identity
    on `lux:96369` (structurally identical to `'Ethereum'` on `evm:1`).

DEADBEEF audit unchanged: 1 occurrence, gated behind `import.meta.env.DEV`
in pkg/bridge/src/app/hooks/useWallet.ts:32.
2026-05-21 16:47:21 -07:00
..