Commit Graph
6107 Commits
Author SHA1 Message Date
Hanzo AI cc18fae10b chore: drop stale yarn.lock (project pinned to [email protected]) 2026-05-25 23:14:04 -07:00
Hanzo AI 46788ecb28 decomplect: drop '' from spell-check dictionaries
OSS lux/explore should not carry tenant-specific brand strings.
2026-05-21 10:47:22 -07:00
Hanzo AI 01503d9d92 ci+docs: update build-lux workflow + README 2026-05-20 16:24:35 -07:00
Hanzo AI ff502dca58 ci: fix runner labels (hanzo-build pool)
Imaginary runner label `lux-build-linux-amd64` does not exist. The live
amd64 pool is `hanzo-build-linux-amd64`.

- build-lux.yml: build + deploy jobs
2026-05-19 08:02:14 -07:00
hanzo-dev e3f3d20b82 feat(brand): every brand field env-overridable; drop hardcoded "Lux Explorer"
ChainBranding gains a productName field (default "Explorer"). New helper
applyBrandEnvOverrides(b) layers NEXT_PUBLIC_BRAND_* env vars over the
bundled defaults so a deploy can rebrand any field — name, org, URLs,
logo SVG, favicon, product label — without rebuilding the bundle.

Operators set:
  NEXT_PUBLIC_BRAND_NAME            " Network"
  NEXT_PUBLIC_BRAND_PRODUCT_NAME    "Explorer"
  NEXT_PUBLIC_BRAND_ORG_NAME        " Labs"
  NEXT_PUBLIC_BRAND_LOGO_CONTENT    <inline svg>
  ...
to override; empty values fall through.

TopBar now reads chain.branding.productName instead of the hardcoded
"Lux Explorer" string. getCurrentChain() applies env overrides on every
read so a brand can be flipped at runtime via env / k8s ConfigMap.

The bundled LUX, ZOO, HANZO, SPC, PARS defaults stay as-is for OSS
shipping; the white-label "other" path keeps reading from
NEXT_PUBLIC_NETWORK_* (legacy keys) as well.
2026-05-06 10:49:30 -07:00
hanzo-dev 56287f2c63 ci: lux-only build — never push other-brand images to luxfi org
Per registry-separation rule (CLAUDE.md "Container Registries — NEVER
MIX"), luxfi/explore must only push the Lux brand. Other-brand images
(hanzoai/explore, zooai/explore, etc.) build from each brand's own
org repo, never from this one.

The source still supports white-label brand selection at runtime
(lib/white-label.ts inspects hostname or NEXT_PUBLIC_BRAND), so a
single Lux image can serve any brand at deploy time. Build-time brand
baking is reserved for per-org image variants — out of scope here.

Also drops the Lux-only frontend rollout list down to mainnet/testnet/
devnet — non-Lux deployments live in their own clusters.
2026-05-05 23:13:40 -07:00
hanzo-dev cfa4428daa ci: align build-lux.yml with luxfi org's actual ARC pool
Single-arch (amd64) brand matrix on lux-build-linux-amd64 — the only
ARC scale-set provisioned for luxfi org today. arm64 native runner is
pending; matrix is structured to add it back when the scale-set is
online (no QEMU per the no-emulation directive).

Manifest job dropped: with one arch, build-push-action publishes the
image directly under the canonical tag. Deploy job stays, switched
to lux-build-linux-amd64.
2026-05-05 21:05:56 -07:00
Hanzo DevandGitHub fbdecf8c1a Merge pull request #6 from luxfi/ci/arc-hanzo-consolidation
feat: multi-brand build matrix + white-label support
2026-05-05 20:51:37 -07:00
hanzo-dev da0fa433fe feat: multi-brand build matrix + white-label support
Build the same source four ways from one repo:

- ghcr.io/luxfi/explore         (lux brand, default)
- ghcr.io/luxfi/explore-hanzo   (hanzo brand)
- ghcr.io/luxfi/explore-zoo     (zoo brand)
- ghcr.io/luxfi/explore-pars    (pars brand)

Each is built for linux/amd64 + linux/arm64 in parallel on hanzo ARC
runners (no QEMU), then merged into a multi-arch manifest.

Brand selection at build time via NEXT_PUBLIC_BRAND, with all
brand-specific assets (logo, favicon, theme, IAM URL) loaded from
NEXT_PUBLIC_* env vars — no hardcoded brand strings in source.

External operators set NEXT_PUBLIC_BRAND=other and supply their own
NEXT_PUBLIC_* env vars (see .env.example.external). The repo carries
no third-party trademarks.

Files:
- lib/white-label.ts                             brand detection + helpers
- .env.example.{lux,hanzo,zoo,pars,external}     deploy templates
- .github/workflows/build-lux.yml                4-brand × 2-arch matrix
- Dockerfile                                     accept NEXT_PUBLIC_BRAND
- configs/app/chainRegistry.ts                   add SPC + Pars devnet,
                                                 chainId fields, white-label
                                                 chain builder
2026-05-05 20:50:55 -07:00
Hanzo AI a8de35a84e explore: scrub Avalabs IP + liquidity cross-contamination
Remove  Network chain entries (mainnet/testnet/devnet/localnet)
and LIQUIDITY_BRANDING constant from chainRegistry.ts. Lux explorer must
not register / hostnames. Replace "Liquid EVM Explorer"
top-bar tagline with "Lux Explorer".
2026-05-05 20:50:55 -07:00
654171344f ci: migrate runner from lux-build to hanzo-build/hanzo-deploy (ARC consolidation) (#5)
Consolidating to single canonical ARC fleet. Killing duplicate lux-build
scale set. Build job → hanzo-build-linux-amd64 (max 30 on DO). Deploy
job → hanzo-deploy-linux-amd64 (max 20 on DO, correct runner class for
kubectl deploys).

No behavior change for this workflow.

Co-authored-by: Hanzo AI <[email protected]>
2026-04-23 18:01:10 -07:00
Hanzo AI 77bb452cd7 wip: scaffold Vite 8 + React 19 SPA under vite/ — Next.js port blocked
The existing Next.js app (99 pages, 427 next/* imports, 177 files using
next/router, 154 using nextjs-routes types, 105 using getServerSideProps) is
far too coupled to rewrite in one pass. A full migration is ~2–4 weeks of
mechanical work.

This commit adds the scaffold only:

  vite/package.json      — Vite 8 + React 19.2 + wouter, no Next deps
  vite/vite.config.ts    — aliases at ../lib, ../ui, ../configs, … so source
                           migrates file-by-file instead of moving
  vite/tsconfig.json     — mirrors the aliases for TypeScript
  vite/index.html        — security headers as <meta> (was nextjs/headers.js)
  vite/src/main.tsx      — React 19 root bootstrap
  vite/src/env.ts        — runtime envs: window.__envs first, import.meta.env
                           fallback, maps NEXT_PUBLIC_API_HOST → VITE_API_BASE_URL
  vite/src/redirects.ts  — full port of nextjs/redirects.js (69 client rules)
  vite/src/App.tsx       — wouter router with CatchAll redirect resolver
  vite/Dockerfile        — 2-stage → ghcr.io/hanzoai/spa
  vite/LLM.md            — what's done, what's left, how to finish

The production Dockerfile at ../Dockerfile still builds the Next.js app. This
scaffold is independent; nothing in the existing tree is deleted or moved.

See vite/LLM.md for the full migration plan and 9 critical TODOs before this
can replace the Next.js build.
2026-04-19 00:05:37 -07:00
Hanzo AI 684dca3451 feat: explorer FE — stateless SSR, chain selector, localnet, registry cleanup 2026-03-01 18:00:00 -08:00
Hanzo Dev a13787eb5b fix: restore mocks/ in Docker context, fix legacy ENV format
mocks/ needed at build time (imported by source files)
2026-03-01 23:26:39 -08:00
Hanzo Dev 812e2cc5d8 perf: optimize Docker build for speed — GHA cache, concurrency, fewer layers
- Switch from registry cache to type=gha (no network overhead for DinD runners)
- Add concurrency group to cancel in-progress builds on same branch
- Merge build+deploy into single job (saves job startup overhead)
- Combine 7 tool installs into single RUN layer
- Add BuildKit cache mounts for pnpm store and Next.js .next/cache
- Combine sequential RUN commands in all 3 Dockerfile stages
- Disable Next.js telemetry during build and runtime
- Expand .dockerignore to exclude tests, docs, .github
2026-03-01 23:18:39 -08:00
Hanzo Dev 8ac97a940b fix: use dedicated lux-explore-client-id for explorer OIDC
Each Lux app gets its own IAM application. Explorer uses
lux-explore-client-id (registered as app-explore in IAM).
2026-03-01 23:05:37 -08:00
Hanzo Dev fe9847427b feat: native Hanzo IAM integration for lux.id OIDC login
- Fix token exchange endpoint to /api/login/oauth/access_token (IAM convention)
- Fix authorize URL to /login/oauth/authorize (consistent across components)
- Use lux-app-client-id (registered in IAM) instead of unregistered 'explore'
- Fetch user profile directly from IAM /api/userinfo endpoint
- Skip Blockscout auth_logout API call for OIDC provider
- Hide "scanning new transactions" warning (looks like error on low-traffic chains)
- Fix type error in useRedirectForInvalidAuthToken for OIDC error shape
2026-03-01 23:02:59 -08:00
Hanzo Dev 33091bcea6 fix: prevent Cloudflare from caching envs.js
envs.js is generated at container startup from environment variables.
Add Cache-Control: no-store header to ensure CDN/browser never serves
a stale version when config changes.
2026-03-01 21:15:47 -08:00
Hanzo Dev 0f3828c86d feat: OIDC login via lux.id, full-width layout, P-chain stats fix
- Add Sign in button to TopBar with OIDC flow to lux.id
- Merge settings (color theme, identicon, address format) into user menu popover
- Remove duplicate user profile from HeroBanner
- Full-width stacked blocks/transactions layout on homepage
- Fix P-chain stats: CSP connect-src allows base origin for SDK calls
- Fix connected count: infer from uptime when field missing
- Fix dark mode popover background
- Enable OIDC in .env.production (lux.id, client: explore)
2026-03-01 20:34:00 -08:00
zeekay daa3cf48e3 Revert "Fix: Replace chakra.svg with native SVG elements to resolve React rendering error"
This reverts commit c64825c208.
2026-03-02 13:39:33 -08:00
zeekay c64825c208 Fix: Replace chakra.svg with native SVG elements to resolve React rendering error
- Fixed TopBar.tsx: replaced chakra.svg with native svg element
- Fixed IconSvg.tsx: refactored to use native svg instead of chakra-wrapped SVG
- Changed Props interface to extend React.SVGAttributes instead of HTMLChakraProps
- Ensures SVG elements receive appropriate HTML attributes only
2026-03-02 13:36:54 -08:00
zeekay 6ec1db71f0 fix: update zetachain enum values to match package type definitions
PascalCase enum values (PendingOutbound, OutboundMined, etc.) instead
of SCREAMING_SNAKE_CASE (PENDING_OUTBOUND, OUTBOUND_MINED, etc.) to
match the actual @luxfi/zetachain-cctx-types package exports.
2026-03-02 12:53:59 -08:00
zeekay 1b9851321a feat: rename @blockscout to @luxfi, monochrome theme, horizontal blocks
- Rename all @blockscout/* npm packages to @luxfi/* aliases (150+ files)
- Override blue accent colors to gray for monochrome theme
- Fix dropdown/menu/popover fonts to use Geist Sans
- Change Latest Blocks to horizontal scrolling layout
- Show dashes instead of zeros for validator stats on error
- Fix GHA deploy step to use correct deployment name
2026-03-02 12:28:15 -08:00
zeekay 8969e45c68 fix: remove all user-visible Blockscout references
- Issue URL → github.com/luxfi/explore
- API docs links → docs.lux.network
- Contract verification → local route instead of vera.blockscout.com
- Discord link → discord.gg/luxnetwork
- JSON-LD script ID → lux-explorer-product-schema
- RPC API description → Lux Network branding
- Rollbar instance → .lux.network domain support
2026-03-02 10:43:36 -08:00
zeekay a5bedb673b feat: horizontal blocks layout, stats grid, network overview fallback chains
- LatestBlocks: full-width layout instead of fixed 280px sidebar
- Stats: 4-column grid on desktop, 2-column on mobile
- NetworkOverview: fallback known L1 chains when P-chain API unreachable
- NetworkOverview: expose isError from useCurrentValidators
- P-chain hooks: add retry:2 for resilience
- UserProfile: use address_hash instead of id for display
- Replace middleware.ts with proxy.ts (unused in production Docker)
- Add toolkit/chakra/separator re-export
- tsconfig: jsx react-jsx, formatting cleanup
- dev.sh: disable turbopack (stability)
2026-03-02 10:36:17 -08:00
Hanzo Dev bfaf813b91 unify all sql images to :latest (PG18)
Single version policy: ghcr.io/hanzoai/sql:latest everywhere.
No version pinning, no backwards compat, always latest stable.
2026-03-01 21:09:09 -08:00
Hanzo Dev 1d8eb764e2 fix(validators): use weight field and correct uptime format for P-chain validators
- P-chain API returns weight not stakeAmount; fallback to weight when stakeAmount absent
- uptime from API is already 0-100 percentage, not 0-1 fraction; remove double-multiply
- mark connected and stakeAmount as optional to match actual API response shape
2026-03-01 12:45:34 -08:00
Hanzo Dev f5c003ffd7 brand: remove remaining Blockscout text references from UI
Replace user-visible "Blockscout" brand text with "Lux Explorer":
- AdminSupportText: [email protected] → [email protected]
- useSignInWithWallet: sign-in message rebrand
- ContractVerification (Hardhat/Foundry): remove "on Blockscout"
- ContractDetailsAlerts: "Blockscout DB" → "our database"
- ContractCustomAbiAlert: liability notice rebrand
- ContractDetailsAlertVerificationStatus: "Blockscout Bytecode Database" → "Bytecode Database"
- ApiKeys page: remove "Blockscout API key" reference
- VerifiedAddresses: "Blockscout" → "explorer"
- MarketplaceRatingTriggerButton: remove login-to-blockscout message
- AddressMultichainButton/GetGasButton/RollupStageBadge: utm_source blockscout → lux-explorer
- Monaco editor: rename blockscout-light/dark themes to lux-light/dark
2026-03-01 03:37:04 -08:00
Hanzo Dev bfa29f4ec9 brand: remove all Blockscout branding, replace with Lux Explorer
- Gas tracker FAQ: Blockscout → Lux Explorer
- Chain config web3/chains.ts: explorer name → Lux Explorer
- Auth screens: Blockscout account → Lux account
- Contract verification: Blockscout supports → Lux Explorer supports
- API docs: Blockscout core API → Lux Explorer Core API
- Rewards/merits: Blockscout Merits → Lux Explorer Rewards
- Marketplace disclaimer and integration icons
- Address verification: [email protected] → [email protected]
- Chart export filenames: Blockscout chart/stats → Lux Explorer
- OTEL service name: blockscout_frontend → lux_explorer_frontend
- Dev container: blockscout dev → lux explorer dev
2026-02-27 22:17:37 -08:00
Hanzo Dev 46ca89d46c ci: simplify to single-arch amd64-only build on lux-build ARC runners
Drop arm64 + manifest jobs (cluster is amd64-only). All jobs now run
on lux-build self-hosted runners — no GitHub-hosted runners needed.
Build -> deploy in 2 jobs, no intermediate manifest step.
2026-02-27 19:48:32 -08:00
Hanzo Dev e9e0ad065f ci: fix kubectl install path (non-root runner) 2026-02-27 19:44:25 -08:00
Hanzo Dev 74fd9b79e6 ci: install kubectl in deploy job for ARC self-hosted runners
ARC runner image doesn't include kubectl. Install it via curl
before the deploy step so rollout restarts work correctly.
2026-02-27 19:34:53 -08:00
Hanzo Dev 93f39b15a8 ci: use lux-build self-hosted DOKS runners for amd64 builds
Switches build-amd64, create-manifest, and deploy jobs from
ubuntu-latest to our native lux-build ARC runners on lux-k8s.
Eliminates QEMU emulation overhead for amd64 targets.
2026-02-27 16:13:35 -08:00
Hanzo Dev 002375a716 fix: SSR branding — use NEXT_PUBLIC_APP_HOST for correct per-chain logo/favicon
- getHostname() reads NEXT_PUBLIC_APP_HOST via getEnvValue during SSR
  so each explorer instance shows its own branding from first paint
- _document.tsx generates dynamic SVG favicon from chain branding
2026-02-27 14:48:03 -08:00
Hanzo Dev 165a757089 fix: make deploy step resilient to missing subnet frontend deployments 2026-02-27 14:26:57 -08:00
Hanzo Dev 2abfadb530 fix: deploy step restarts all 5 frontend pods, not just mainnet 2026-02-27 13:56:01 -08:00
Hanzo Dev afe0194e58 fix: use real brand logos from each project's logo repo
- Lux: triangle from ~/work/lux/logo/
- Zoo: three overlapping circles from ~/work/zoo/logo/
- Hanzo: geometric H from ~/work/hanzo/logo/
- SPC: unicorn emoji per user request
- Pars: 8-pointed star from ~/work/pars/logo/
- Changed branding to multi-path SVGs (logoViewBox + logoContent)
2026-02-27 13:13:13 -08:00
Hanzo Dev e5c71542ab feat: per-chain branding — logo, favicon, brand name customizable
- Add ChainBranding interface with logoSvg, faviconSvg, brandName per chain
- Each chain (Lux, Zoo, Hanzo, SPC, Pars) gets distinct icon + brand name
- TopBar renders chain-specific logo and brand name from registry
- ChainSwitcher shows per-chain icons in dropdown items
- Dynamic favicon via useChainFavicon hook (swaps SVG favicon on mount)
- Page title uses chain branding via getNetworkTitle()
2026-02-27 13:04:06 -08:00
Hanzo Dev cc69016a45 fix: replace Blockscout favicon with Lux triangle
All favicon files (PNG 16/32/48, ICO, SVG, apple-touch-icon, android-chrome)
now show the Lux triangle logo (black circle, white triangle) instead of the
Blockscout blue "h" logo.
2026-02-27 12:33:21 -08:00
Hanzo Dev 0778414723 fix: wait for networkidle before checking page title in E2E tests
Next.js sets document.title after hydration, not at domcontentloaded.
2026-02-27 12:27:06 -08:00
Hanzo Dev a1098d7697 fix: polish header — cleaner nav, branded logo, compact selectors
- Logo shows "Lux Network" for C-Chain, chain name for subnets
- Blockchain items (Blocks, Txns, Tokens, Accounts, Contracts)
  grouped under a dropdown to reduce nav clutter
- Network selector: minimal pill with green dot, no outline button
- Chain switcher: compact bordered pill with chevron
- Smaller font sizes (xs), tighter spacing, rounded menus
- Consistent hover states across all interactive elements
2026-02-27 12:23:58 -08:00
Hanzo Dev 826920d891 feat: add all chain VM accessors and wire DEX/Bridge to luxnet SDK
- Add centralized chain accessor module (lib/api/luxnet/chains.ts) exposing
  all 14 chain VMs (C/X/P/A/B/D/G/I/K/O/Q/R/T/Z) plus utility APIs
- Refactor pchain/client.ts to re-export from centralized module
- Wire DEX page to use DexVMAPI (getStats, getPools, getMarkets) with
  demo data fallback when D-Chain RPC is unavailable
- Add B-Chain bridge API module (lib/api/bchain/) using BridgeVMAPI
  (getSignerSetInfo, getWaitlist) for signer set stats
- Update Bridge page to show live bridge signer count from B-Chain
- Fix stale E2E tests: use >= minimum thresholds instead of exact
  counts (block/tx counts grow over time), use describe blocks
2026-02-27 12:05:23 -08:00
Hanzo Dev b5be7fcae9 feat: multi-tenant chain registry with hostname auto-detection
One image serves all chains — ChainSwitcher and NetworkSelector
auto-detect current chain/network from window.location.hostname.
Chain registry at configs/app/chainRegistry.ts defines all chains
across mainnet/testnet/devnet.
2026-02-27 11:33:08 -08:00
Hanzo Dev ad9904d3bc feat: unified header bar with Lux Network branding
- Redesign TopBar as single unified header: logo + nav + controls
- Add NetworkSelector dropdown (Mainnet/Testnet/Devnet)
- Monochrome ChainSwitcher (kill blue panel)
- Connect wallet button via UserProfileDesktop in header
- Remove NavBar and SideBar (nav now in TopBar)
- Simplify HeaderDesktop to search bar only
2026-02-27 11:18:39 -08:00
Hanzo Dev 2212d85eb4 feat: integrate luxnet SDK for P-chain API calls
Replace hand-rolled JSON-RPC fetch client with [email protected].0 SDK.
P-chain hooks now use PlatformVMAPI methods directly.
2026-02-27 10:55:58 -08:00
Hanzo Dev 1f41b7b38e feat: multichain explorer pages, chain switcher, indexer integration
- Network Overview homepage with P-chain stats and chain cards
- Chain detail page with validator info and indexer stats
- Chain switcher dropdown in top bar
- A-chain AI client with indexer API integration
- D-chain DEX data hook with live indexer fallback
- E2E tests for all 5 live explorer instances
- Test transaction sender script
- Remove verbose comments, section dividers, and console.log scaffolding
2026-02-27 10:46:56 -08:00
Hanzo Dev 36e2c7f7e0 feat: add AI compute dashboard and DEX orderbook pages
- A-Chain (AI): dashboard with models, providers, attestations tabs
- D-Chain (DEX): markets, orderbook, trades, pools tabs
- API hooks with mock data (ready for indexer integration)
- Navigation items and route registration for /ai and /dex
2026-02-26 14:05:43 -08:00
Hanzo Dev 5be9ae3753 feat: update all chain definitions to 14 primary network chains
Add D-Chain (DexVM), G-Chain (GraphVM), I-Chain (IdentityVM),
O-Chain (OracleVM), R-Chain (RelayVM) to match ~/work/lux/node
vms_allvms.go. Fix VM names: ThresholdVM, BridgeVM, KeyVM.
Update chain count from 9 to 14 across all pages.
2026-02-26 11:10:12 -08:00
Hanzo Dev 6fc98496d4 feat: redesign homepage, add chain switcher and chain detail page
- Redesign NetworkOverview homepage with Blockscout Stats, LatestBlocks,
  and LatestTxs alongside P-chain network stats and chain cards
- Add ChainSwitcher dropdown to TopBar for switching between C-Chain,
  Zoo, Hanzo, SPC, and Pars explorer instances
- Create /chains/[slug] chain detail page with chain info, validators,
  subnet chains, and stats (modeled after Avalanche L1 Details)
- Make ChainsPage rows clickable with links to chain detail pages
- Register /chains/[slug] route in all metadata/analytics files
2026-02-26 09:57:59 -08:00
Hanzo Dev 7c71e7f89e feat: add Bridge page and Network Stats to Stats page
- Add /bridge page with cross-chain transfer route tracker
- Show bridge routes between Primary Network chains and L1 subnets
- Add Network Stats section (validators, chains, stake, uptime) to Stats page
- Add Bridge to navigation menu
- Register /bridge route in nextjs-routes, metadata, and mixpanel
2026-02-26 00:47:24 -08:00