v1.1.11 landed the three money values (Reward/Value/Fee) at 4.54:1 and
killed the overflow + Menu-button clip, but the network-utilization %
mapped to --color-badge-bright-green-fg (#25855A) measured 4.39:1 on the
real #FAFAFA card background (not pure white) -- 0.11 under bar.
Add dedicated semantic status tokens (--color-status-good/warn/bad) with
darker light-theme shades (#1A7A47 / #B45309 / #B91C1C -> 5.1 / 4.8 / 6.1
:1 on #FAFAFA) and light shades for dark theme, and point
getNetworkUtilizationParams at them. All four home-page values now clear
4.5:1 on every brand.
Co-authored-by: Hanzo Dev <[email protected]>
Three write-once-deploy-4 root causes from the 4-res audit:
1. Horizontal overflow (454px @1280, 38px @1920). The shared layout
Container forced 'min-w-[100vw] lg:min-w-[fit-content]', promoting the
whole page to its ~1734px max-content width so stat/block cards clipped
past the viewport. Make it a fluid column ('w-full min-w-0') and add
'min-w-0' to MainColumn so the flex chain shrinks and inner
overflow-x-auto regions scroll internally -> document.scrollWidth ==
innerWidth at every breakpoint.
2. White-on-white values (block Reward / tx Value / tx Fee /
network-utilization%). These passed legacy Chakra dot-tokens
('text.secondary', 'green.600'...) straight into an inline CSS 'color',
which browsers drop as invalid -> the text inherited white. Add one
resolveColorToken() helper (dot-token -> var(--color-*)), apply it in
SimpleValue (the value chokepoint for Reward/Value/Fee), and point
getNetworkUtilizationParams at real theme vars (bright badge fg shades,
all >=4.5:1 on the light card bg).
3. Broken 'Menu' button: the wallet/settings button stacked a 20px icon
over its label in a bare div inside a 32px overflow-hidden button (the
'51px in 32px' clip that read as a stray hamburger at lg+). Lay the
icon+label out horizontally (flex items-center gap-2, sized icon).
Co-authored-by: Hanzo Dev <[email protected]>
Two mobile-QA defects across the block explorers.
Defect 1 (org explorers showed goerli stub data): api-explore.{zoo,hanzo,
pars}.network served the self-signed INGRESS DEFAULT CERT (no cert-manager
Ingress for those SNIs), so browsers rejected every FE fetch and react-query
fell back to the goerli stubs behind stuck skeletons. FE wiring + backend were
already correct (all 6 chains served real per-chain data via the existing
IngressRoutes). Fix: dedicated letsencrypt-prod Ingress per org api host ->
explorer-unified:8090, mirroring api-explore-lux-network. Certs issued, all
three now ssl_verify=0, real data flows. Also source per-org brand identity
(NETWORK_NAME/currency) in the configmaps so titles render the right brand.
Defect 2 (mobile 390px detail pages: dropped labels, horizontal clip, tab
overlap): three shared-UI fixes.
- Footer: was the real horizontal-overflow driver — inline gridTemplateColumns
minmax(auto,470px) never collapsed on mobile. Now grid-cols-1 on mobile.
- DetailedInfo.ItemValue: add min-w-0 + mobile wrap so long address/hash values
stop forcing the page wider than the viewport (desktop unchanged).
- AdaptiveTabsList: @luxfi/ui Tabs silently discard Chakra style props
(overflowX/w/flexShrink/...), so express mobile scroll + shrink-0 as
className. Tab strip now scrolls instead of collapsing/overlapping.
Co-authored-by: Hanzo Dev <[email protected]>
The explorer Go backend answers by Host header via the ingress default backend,
so api-explore.lux.network responded 200 with no ingress rule — but with no TLS
block for that SNI the controller served the self-signed INGRESS DEFAULT CERT,
which browsers reject (ERR_CERT_AUTHORITY_INVALID). The explorer FE was stuck in
skeleton loaders. Add a dedicated Ingress -> explorer-unified:8090 with a
letsencrypt-prod TLS block (mirrors api-explore.osage.network). Verified live:
explore.lux.network now loads live blocks/txns/stats (ssl_verify_result=0).
Co-authored-by: Hanzo Dev <[email protected]>
The zoo/hanzo/pars brand deployments had been crashlooping at 0 ready since
June: their brand images bake NETWORK_NAME/currency/colors, but the runtime
envs-validator requires NETWORK_NAME in the rendered env and the brand
configmaps never set it — so every pod restart died on "NEXT_PUBLIC_NETWORK_NAME
is a required field". The lux configmap already carries SKIP_ENVS_VALIDATION for
the identical OIDC-placeholder reason; add it to the three brand configmaps
(mainnet + testnet) so they boot on their baked brand identity. Restores the
three brand explorers and lets the just-corrected chainId (pars 494949) + /v1
RPC configmap values take effect.
Co-authored-by: Hanzo Dev <[email protected]>
explore-fe-lux gets account/OIDC via runtime env; OIDC_* lack build-time
placeholders so SKIP_ENVS_VALIDATION=true (canonical_build.sh approach) —
make_envs still writes them to window.__envs. LLM.md records deploy path,
OIDC wiring, the useProvider crash, and Pars(7070/494949)+devnet(96370/96367)
chainId flags.
Co-authored-by: Hanzo Dev <[email protected]>
- wallet: brandFamilyChains derives sibling networks (Lux mainnet/testnet/devnet)
from the multi-tenant chain registry so connect/add presents EVERY registered
network for the brand, not just the env chain; dedupe by id.
- login/menu: useProvider queryFn returns null (react-query v5 forbids undefined)
+ callers switched from '= {}' destructure default to '?? {}' so a null result
no longer crashes the wallet hooks (the busted-menu root cause).
- manifest: fix Pars chainId 7070 -> 494949 (regression) and drop the forbidden
'Subnet' term from sovereign L1 network names (-> '<Brand> Network').
- Validators page + /api/pchain proxy present; rebuild makes the live 5-validator
view visible on explore.lux.network.
Co-authored-by: Hanzo Dev <[email protected]>
The branded build now fans out into 8 (4 brands × mainnet+testnet)
production images:
ghcr.io/luxfi/explore-{mainnet,testnet}:v1.0.0
ghcr.io/zooai/explore-{mainnet,testnet}:v1.0.0
ghcr.io/hanzoai/explore-{mainnet,testnet}:v1.0.0
ghcr.io/parsdao/explore-{mainnet,testnet}:v1.0.0
Each image is a thin ENV overlay of ghcr.io/luxfi/explore (the Next.js
runtime) — brand identity is baked at build time via NEXT_PUBLIC_*
build-args. The brand's GHCR namespace owns the image per the workspace
container-registry rules (no cross-org mixing).
deploy/scripts/branded_build.sh is the source of truth for tuple -> env
mapping; the actual image fan-out is performed via crane mutate -e which
produces an instant ENV-only layer (no Kaniko, no tar of build context —
same hash blob mounts across namespaces).
The corresponding K8s manifests (per-brand Deployment + Service per
namespace, IngressRoute patches routing catch-all to FE) live in the
cluster directly.
- 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
- 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
The `tsc` npm package (v2.0.4) is a warning shim, not the TypeScript
compiler. With pnpm, npx resolves it before the real tsc from the
typescript package. Fix by removing it and using direct bin names.
- Replace yarn v1 with pnpm 10.11.0 across all build configs
- Move misplaced deps to devDependencies (cspell, esbuild, @openzeppelin/contracts, @next/bundle-analyzer, @types/papaparse, @types/react-scroll)
- Remove stale @types/[email protected] override — use correct React 19 types (fixes 22 type errors)
- Convert yarn resolutions to pnpm.overrides
- Update Dockerfile, Dockerfile.lux, CI workflows, and all shell scripts
- Add .npmrc with shamefully-hoist for Next.js compatibility
- Add outputFileTracingRoot to next.config.js
* envs and feature setup
* home page layout
* cross-chain txs page
* cross-chain transfers page
* cross-chain transfers on tx page
* cross-chain messages on tx page
* cross-chain tx page
* cross-chain tx details token transfers
* stats and counters for lists
* migrate to new API version
* add swagger
* mobile lists
* placeholder views on address page
* tests
* fix adaptive tabs initial state when there is only one tab in the list
* tweaks
* bug fixes
* fix tests
* update screenshots
* migrate to new api version
* add chain label tooltip, copy button to txs in lists and same address highlight
* list views on address page
* fix tests
* fix links to current address in the list views
* update tooltips
* update tables layout
* review fixes
* fix spelling
* update screenshots
* update screenshot
* basic login button implementation
* refactoring and add dynamic auth button to the other pages
* connect wallet without authenticating an user
* login and logout user in blockscout account
* refactoring and RPC overrides
* authenticate user with connected wallet
* add ENS to profile button
* override evm chains and fix contract write with waas wallet
* disconnect wallet and fix docker build
* add dynamic imports to components that use web3 wallet packages
* refactor user profile directory
* clean up
* tweaks
* update pw ci script
* fix "connect wallet" button behavior
* handle linking email to profile with dynamic provider
* fix test
* async loading web3 hooks and remove dynamic loading from components that use them
* fix pw tests
* add account navigation in horizontal layout when auth provider is dynamic
* fix address verification modal
* review fixes
* spelling fixes
* essential dapps config: switch to concurrent request and and add worker termination
* fix rollbar error logging and enable it for server errors
* fix for tokens request on address page
* update generator script for multichain config
* fix hot contracts interval select
* update screenshot
* update screenshots
* pass chainId to trackTransaction for essential dapps
* fix vertical alignment in hot contracts table
* bump next.js to v15.5.10
---------
Co-authored-by: isstuev <[email protected]>
Co-authored-by: Max Alekseenko <[email protected]>
* page layout
* add interval filter
* fix navigation
* value formatting and test
* fix: correct empty state message from 'pools' to 'hot contracts'
* update screenshots
* add disabled state to tag select and fix some bugs
* fix screenshot
* update select texts
* fail the app start if multichain config or essential dapps config were not generated properly
* add timeouts for essential dapps and multichain config generators
* fix "add to wallet" button in address tokens table
* [skip ci] update docs
* fix tx tables when there are no fee and value columns
* add support for promoted multichain provider
* fixes
* change action button logic
* fix tests
* fix
* hide "add network" button for multichain
* shorten the amount of txs on multichain homepage
* change name formatting for multichain button
* add bright color variants and lg size for badges
* fix y-axis margin calculation for chart with custom tick formatter
* superchain bug fixes
* bump versions of react and nextjs
* update screenshot
* bump dappscout-iframe
* increase timeouts for multichain and essential dapps config generators
---------
Co-authored-by: Max Alekseenko <[email protected]>
* fail the app start if multichain config or essential dapps config were not generated properly
* add timeouts for essential dapps and multichain config generators
* fix "add to wallet" button in address tokens table
* [skip ci] update docs
* fix tx tables when there are no fee and value columns
* add support for promoted multichain provider
* fixes
* change action button logic
* fix tests
* fix
* hide "add network" button for multichain
* shorten the amount of txs on multichain homepage
* change name formatting for multichain button
* add bright color variants and lg size for badges
* fix y-axis margin calculation for chart with custom tick formatter
* superchain bug fixes
* bump versions of react and nextjs
* update screenshot
* bump dappscout-iframe
---------
Co-authored-by: Max Alekseenko <[email protected]>
* refactor widgets on home page
* coming soon placeholder component
* top accounts page
* contract data
* address ERC-20 tokens list
* chain filter for address ERC-20 tokens
* token select for address detailed view
* address details fields
* tokens table
* stats widgets on home page
* chain indicators graph on the home page
* quick search
* search results all tab
* tabs and chain select on search results page
* search results mobile view
* add contract info to search and address details
* add text filter for tokens and search improvements
* load all results inside tab on search results page
* token balance info
* add support for domains in the full search
* Multichain explorer
Resolves#2989
* add envs validator for multichain
* add some tests
* fix search bar on search results page on mobile
* home stats fixes
* fix ts
* optimize amount of queries on address page
* add more contract info on address page
* add enter key hint to search input
* fix tests
* fix test
* update bg.primary css-variable on color theme change
* sitemap for multichain
* txs page: render first tab if blob tab is not available on the chain
* filter out in active chains from chain select on address page and user ops page
* add chain icon to advanced filter table
* fix tooltip on entity with shield
* fix ts
* show contract implementations
* fixes
* add chain icon to all lists
* refactor zetachain chains config type
* use chain id as primary option instead of chain slug
* refactor chain config type for multichain and essential dapps
* refactor chain icon and chain select
* rename chain-slug in chain_slug
* change default radius of chain icon and update screenshots for multichain tests
* change conditions for "isContract" and "isVerified"
* test fixes
* make shield optional for external chain entities
* add chain icon to approvals lists
* add stats page for multichain
* add chain postfix to chart .png and .csv assets name
* fix tests
* sync verified contracts language filter and fix loading state in the search results page
* fix sol2uml diagram and csv export
* regcred from helmfile for review
* link fixes
* fix state for unknown address
* fix incorrect chain in the context during spa transition to the same route on different chain
* add links to stats widgets
* add mixpanel to L2 demo values
* show message of on-demand contract verification
* fix screenshots
---------
Co-authored-by: Nick Zenchik <[email protected]>
* redesign "add chain" button
* fix wallet detection
* [skip ci] update default value for ENV
* fix tests
* return button to the footer and add source to mixpanel event
* regcred from helmfile for review
* [skip ci] remove wallets env from values for demo stand
* use react-query to cache detection result
* add cookie to hide button in the topbar
* add prefix to svg ids to fix rabby icon
* update screenshot
* remove unnecessary comment
---------
Co-authored-by: Nick Zenchik <[email protected]>
* UI/UX: Dropdown DeFi button fixes
Resolves#3104
* move chain menu to the right of the topbar
* add list mode to chains menu
* rollback price diff on mobile
* fix links in approvals list
* pass check-summed hash to safe API call
* make tx hash optional for token transfers
* fix multiple public tag submission
* update screenshots
* use DataListDisplay for revoke
* force to send credential only with general API requests
* prefer formatted date label over date default formatting when saving chart data as csv
* add abort failed status for zeta chain CCTX
* update specify sdk
* rename ENV for native token address
* add ENV to hide native coin price in topbar
* rename routes for name services
* fix chart csv export file
* fix tests
---------
Co-authored-by: Max Alekseenko <[email protected]>
Co-authored-by: isstuev <[email protected]>