24 Commits
Author SHA1 Message Date
hanzo-dev 54a4e86232 fix(theme): last greens — sidebar-accent #f0fdf4 + teal/success tints -> grey
Pixel-sampling the rendered dashboard showed the only visible green left was the
active-nav bg (--sidebar-accent #f0fdf4). Neutralize it plus the remaining
non-dashboard green/teal tints (#008c73, #dcfce7, #1c5538, etc.) so no green can
surface in any state. Zero green remains except Google's OAuth logo.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-19 19:03:57 -07:00
hanzo-dev 0b13444393 fix(theme): neutralize beamer widget teal -> grey 2026-07-18 23:58:20 -07:00
hanzo-dev 134cf46551 fix(theme): complete monochrome — neutralize ALL accent/success greens
Remaining green was in the sidebar active-nav accent (#22c55e), success/synced
tokens (#00b460/#16a34a and palette variants), and green fills baked into
public SVG illustrations + the MUI palettes — not the tokens already fixed.
Neutralize every green (brand accent, success, illustration) to grey across
apps/web/src, apps/web/public/images, and packages/theme (palettes + vars.css
regenerated). Keep only Google's brand green in the OAuth sign-in logo.
Verified: zero green remains except google.svg.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 23:57:30 -07:00
hanzo-dev 5bbe2d082f fix(brand): Lux monochrome favicon + PWA icons (replace Safe favicon.ico)
Browsers auto-request /favicon.ico (was the 15406B Safe icon). Replace it +
all brand/*/favicon.ico + android-chrome PNGs with a Lux monochrome mark.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 23:38:11 -07:00
hanzo-dev c44f58b4a8 fix(brand): replace Safe logo ASSETS with Lux monochrome (kill rendered logo)
The rendered Safe{Wallet}/Safe-Labs mark lived in SVG assets imported as
components (SidebarTopBar chrome, welcome/NewSafe wordmark, onboarding/WC/
first-tx icons) — not gated by isOfficialHost, so an HTML grep was clean but
the page visually showed it. Swap the assets themselves:
- logo-no-text.svg  -> Lux mono rounded square (chrome icon)
- logo-safe-labs.svg-> Lux Safe wordmark (welcome/header)
- logo.svg          -> Lux Safe wordmark (large)
- logo-round.svg    -> Lux mono circle (was #12FF80 green)
All self-adapting (black in light / white in dark). Zero Safe mark, zero green.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 23:34:09 -07:00
hanzo-dev c6dfcff7ca fix(theme): kill residual Safe green -> grey (static brand accent + badges)
v2.2.0 left green in the sidebar-active accent, brand icons, and 4 Tailwind
notification badges because they read palette static.textBrand (#12FF80) and
hardcoded rgba(18,255,128,.1) — not the secondary token. Neutralize:
- static.ts textBrand -> #636669 (constant grey, reads on light+dark)
- regenerate vars.css from palettes
- badge bg rgba(18,255,128,.1) -> rgba(99,102,105,.15)
Zero green remains in shipped source.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 18:49:56 -07:00
hanzo-dev 4b1cf0b212 feat(brand): domain-driven white-label + Lux monochrome default
Strip build-time Safe branding; resolve brand from the request HOST at runtime
(safe.lux.network->Lux, .zoo.network->Zoo, .pars.network->Pars, .hanzo.ai->Hanzo;
unknown host -> Lux monochrome). No brand token is baked.

- @safe-global/brand: hostname registry + resolveBrand() + live Proxy; Lux default
- constants: BRAND_NAME/BRAND_LOGO read runtime brand (drop 'Wallet fork')
- theme: neutralize Safe green -> true black/white/grey (light.ts/dark.ts/vars.css
  + 17 feature/dashboard CSS modules); semantic info/error/success kept
- brand assets: monochrome self-adapting wordmarks for lux/zoo/pars/hanzo
- header: show brand logo on mobile too
- .env.lux: build config only (no brand tokens)

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 13:25:19 -07:00
hanzo-dev e303325962 ci(lux): push lux-safe image with org GHCR_PAT (package unlinked to repo)
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 11:11:06 -07:00
hanzo-dev 283cd8fad7 fix(lux): workspace-scope after-install; build amd64-only
- yarn after-install lives in apps/web -> run it workspace-scoped (root has
  no such script; typechain generate-types is required by the build)
- drop arm64 (QEMU-emulated Node build, no arm64 runner); lux-k8s is amd64

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 10:56:13 -07:00
hanzo-devandzeekay a730f9cd47 feat(lux): deploy real Safe app to safe.lux.network via Lux CGW
The safe.lux.network host was serving a separate marketing landing
(lux-apps/safe, @luxfi/safe) as ghcr.io/luxfi/lux-safe:v2.0.0 — the real
@safe-global/web app was never deployed. Point the lux brand at the new Lux
Client Gateway (safe-cgw.lux.network) so chains 96369/200200/494949 and their
Safes load, and add a build-time-correct multi-arch image + CI.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-18 10:49:03 -07:00
Hanzo DevandGitHub 6963478144 Merge pull request #7 from luxfi/dependabot/github_actions/docker/login-action-4.2.0
chore(deps): bump docker/login-action from 4.1.0 to 4.2.0
2026-06-04 01:35:58 -07:00
Hanzo DevandGitHub ff10c370a2 Merge pull request #8 from luxfi/dependabot/github_actions/chromaui/action-17.0.0
chore(deps): bump chromaui/action from 16.10.1 to 17.0.0
2026-06-03 13:24:14 -07:00
Hanzo DevandGitHub 5cf9633fcd Merge pull request #9 from luxfi/dependabot/github_actions/anthropics/agent-action-1.0.131
chore(deps): bump anthropics/agent-action from 1.0.123 to 1.0.131
2026-06-03 13:24:10 -07:00
Hanzo DevandGitHub fb69ef232b Merge pull request #10 from luxfi/dependabot/github_actions/docker/build-push-action-7.2.0
chore(deps): bump docker/build-push-action from 7.1.0 to 7.2.0
2026-06-03 13:24:07 -07:00
Hanzo DevandGitHub dc84a457c6 Merge pull request #11 from luxfi/dependabot/github_actions/codecov/codecov-action-6.0.1
chore(deps): bump codecov/codecov-action from 6.0.0 to 6.0.1
2026-06-03 13:24:03 -07:00
Hanzo AI 9f7ac53116 chore(brand): placeholder assets for lux/hanzo + sync safe manifest
Each per-brand manifest references brand/active/{logo.svg,favicon.ico,
android-chrome-{192,512}x{192,512}.png}. Without those files the runtime
manifest fetch 404s after select-brand. Stamps a 1x1 transparent PNG
placeholder per slot plus a text-only SVG logo so non-Safe builds resolve;
real artwork tracked in HANZO_WHITELABEL.md "manual review queue".

Also re-aligns brand/safe/manifest.json with the committed upstream
public/safe.webmanifest so build:safe leaves the working tree clean
(no spurious diff on the canonical wallet build).
2026-05-15 03:57:39 -07:00
Hanzo AI 4019c205a4 refactor(brand): route missed help.safe.global hrefs through brand.helpUrl
Pass-1's URL codemod missed seven JSX/template-string call sites that
hardcoded https://help.safe.global directly. Route each through
${brand.helpUrl}/articles/... so non-Safe branded builds point at their
own help center (docs.lux.network/safe, docs.hanzo.ai/vault, etc).

No protocol identifiers changed; no test fixtures changed; no behavior
diff on a build:safe build.
2026-05-15 03:57:26 -07:00
Hanzo AI fb9b95d50c feat(brand): per-brand build configs and asset pipeline
apps/web/package.json gains build:safe / build:lux / build:hanzo
scripts. Each runs scripts/select-brand.sh <slug> (which copies
.env.<slug> -> .env.local, brand/<slug>/ -> brand/active/, and the
per-brand manifest.json over safe.webmanifest) then `yarn build`.

scripts/codemod-brand-urls.mjs is the Pass 1 driver kept in-tree so
future merges with upstream can re-run it. .gitignore covers the
brand/active output dir.

HANZO_WHITELABEL.md updated with the per-brand invocation, the
canonical pattern table, the protocol-vs-brand boundary, and how
to add a new brand (env + asset dir + one package.json script — no
source edits).
2026-05-15 02:59:47 -07:00
Hanzo AI 28eb4c904e refactor(brand): pass 3 — manifests and metadata
apps/web/public/brand/{safe,lux,hanzo}/manifest.json hold per-brand web
app manifests; scripts/select-brand.sh copies the chosen one over
apps/web/public/safe.webmanifest at build time. MetaTags og/twitter
image and twitter:site read brand.appUrl / brand.twitterUrl. The
default webmanifest description is now brand-neutral.

apps/mobile/app.config.ts derives the product name from
EXPO_PUBLIC_BRAND_NAME (default 'Safe{Mobile}') and threads it into
the dev variant prefix and the camera-permission rationale string,
removing the only hard-coded brand strings in mobile config.
2026-05-15 02:58:14 -07:00
Hanzo AI 3be4599ea0 refactor(brand): pass 2 — product name in JSX, copy, and SDK metadata
User-facing 'Safe{Wallet}' / 'Safe{Mobile}' / 'Safe Wallet' literals now
read brand.name. Covered: outreach popup, safe-labs terms, earn info,
tx receipt help link, support chat user identity, trezor manifest,
WalletConnect appKit metadata, CoW swap appCode, SIWE statement (web +
mobile), safe-shield bridge/contract description strings, test-utils
getAppName.

Untouched: protocol-identifier symbols (SafeInfo, useSafeInfo,
SafeAppsTag enum, etc.) and SDK package names (@safe-global/protocol-kit).
Those are protocol terms, not brand strings.
2026-05-15 02:55:38 -07:00
Hanzo AI fb8d6d0ed3 refactor(brand): pass 1 — URLs, emails, and asset paths route through brand
Mechanical sweep of safe.global / support@safe.global / app.safe.global /
help.safe.global / status.safe.global / developer.safe.global /
twitter.com/safe / chat.safe.global / anon.safe.global / /images/safe-logo*
literals in apps/ and packages/. Each becomes a property read off
@safe-global/brand. Untouched: protocol/CDN hosts (safe-client.*,
safe-transaction-*, safe-transaction-assets.*), tests, stories, fixtures.

Driven by scripts/codemod-brand-urls.mjs. 17 files, 26 replacements,
typecheck clean across all 5 workspaces.
2026-05-15 02:51:22 -07:00
Hanzo AI 2c46473905 feat(brand): create @safe-global/brand workspace
Exposes a Brand type and a default brand object whose values match
upstream Safe strings. Per-brand builds override via NEXT_PUBLIC_BRAND_*
(web) or EXPO_PUBLIC_BRAND_* (mobile) env vars.

Single source of truth for product name, URLs, support contacts, and
asset paths. No 'Safe' / 'safe.global' literal lives in apps/ or
packages/*/src/ once the codemod passes land.
2026-05-15 02:46:09 -07:00
Hanzo AI b3f6ff8a2c docs: HANZO_WHITELABEL.md — single-source brand-token strategy
White-label plan for this fork: every hardcoded "Safe" / "safe.global"
reference in app code gets replaced with a read from a single Brand
config object sourced from env at build time. ~1,759 source files
carry one or more brand references; HANZO_WHITELABEL.md inventories
the patterns + phases the rewrite.

The same fork can then ship as Lux Safe, Hanzo Vault, partner builds,
etc. without forking the source per brand.
2026-05-14 16:59:17 -07:00
Hanzo Dev 7473e7fcb5 Merge branch 'main' of https://github.com/safe-global/safe-wallet-monorepo into dev 2026-04-08 09:42:27 +02:00