57 Commits
Author SHA1 Message Date
zeekayandHanzo Dev df44be36a4 build: stamp the version in the stage that ships it
The release workflow has never published. Every run since v1.1.19 built
cleanly and then died on its own smoke gate:

    image stamps <unset> but is published as v1.1.23

The gate was right. GIT_TAG and GIT_COMMIT_SHA were declared as ARG/ENV
only in the `builder` stage, and ENV does not cross a stage boundary, so
they reached the compiled bundle and never the runtime image. The footer
resolves at container start, not at build time — make_envs_script.sh
iterates the live process environment into window.__envs and
configs/app/ui.ts reads frontendVersion from there — so with nothing set
in the final stage, every image ever published reported no version.
`crane config ghcr.io/luxfi/explore:v1.1.23` confirms it: no
NEXT_PUBLIC_GIT_TAG in the config at all, and the deployed ConfigMaps do
not supply one either.

Declare both in the runner stage, after the copies so a new commit
invalidates only the ENV layer.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 21:15:59 -07:00
zeekayandHanzo Dev b9bc63f03f build: the image never copied patches/, so install could not resolve them
pnpm resolves `pnpm.patchedDependencies` during install, so the patch files have
to be in the context before `pnpm install --frozen-lockfile` runs. The deps
stage copies package.json and the lockfile but nothing else, so adding the
@luxfi/ui patch broke the image build while leaving local installs working —
they read patches/ straight from the repo.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 19:25:13 -07:00
zeekay b035f605a4 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
zeekay 422add6c5a 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
zeekay e2f456c299 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
zeekay 2f0a103ddb fix: use yarn registry mirror in Dockerfile for npm 403 workaround 2026-02-25 11:14:28 -08:00
zeekay 992b7ac82c Add global .npmrc in Docker deps stage for deploy tool pnpm compat
Deploy tools install in separate directories without the app .npmrc,
causing strict pnpm resolution to break yup's tiny-case import in
envs-validator. Global /root/.npmrc with shamefully-hoist fixes this.
2026-02-24 19:27:25 -08:00
zeekay cda4e3c4e8 Add node-datachannel stub with polyfill subpath for next build
@libp2p/webrtc imports @ipshipyard/node-datachannel/polyfill which
requires native C++ compilation. Stub provides ESM+CJS exports for
both main and polyfill subpaths with no-op WebRTC classes. Also
ignores pnpm-lock.yaml in cspell and copies stubs dir in Dockerfiles.
2026-02-24 18:07:34 -08:00
zeekay 7049344343 Switch from yarn to pnpm, clean up dependency tree
- 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
2026-02-24 17:35:30 -08:00
tom goriunovandGitHub 401dc58402 Smart wallet auth (#3220)
* 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
2026-02-18 19:42:44 +01:00
tom goriunovandGitHub 5d337fc555 Migrate from Jest to Vitest (#3173)
* first part of transition

* second part of transition

* remove jest

* bump up node version and playwright version

* update all screenshots because of the new playwright version

* fix tests

* one more screenshot update
2025-12-10 19:21:07 +01:00
tom goriunovandGitHub d1b90c92bb Refactor envs validator: split schema and migrate to vite (#3140)
* migrate to vite

* split validation schema
2025-11-19 11:01:05 +01:00
Max AlekseenkoandGitHub 487fe0317a Essential dapps (#3026) 2025-10-17 14:58:12 +02:00
tom goriunovandGitHub 6d135bb291 llms.txt introduction (#2967)
* add file generator and template for common content

* add chain specific data

* add chain specific data for stability, shibarium, scroll and zilliqa

* fix ts

* add instructions about contract sources
2025-09-08 11:30:30 +02:00
tom goriunovandGitHub ca4c8d6633 OP Superchain Explorer: MVP (#2786)
* context for storing subchain config and tx view for subchain

* address page and block page for subchain

* address aggregated page: local txs tab

* connect MultichainSelect to context

* home page placeholder

* refactor subchain select state

* envs for demo

* fix ts

* clear value for l2 review

* subchain widgets on home page

* csp policies

* sockets, duck and goose

* fix socket on subchain address page

* link builder for subchain views

* update home widget

* fix time increment

* enable tx interpretator and metadata service

* generate multichain config based on every chain app config

* Fix the multichain config to work in Docker

* multichain socket test

* rename subchain-id to subchain-slug path param

* refactoring

* update chain icons on entities

* home page: latest local txs

* latest cross-chain txs

* minor improvements

* renaming, pt. 1

* rename chain routes

* enable blockchain interaction

* add loading state to icon shield

* fix build

* fix tests

* update types package
2025-07-03 15:07:00 +02:00
tom goriunovandGitHub f6725649da UI toolkit package (#2691)
* first version of the pack

* single entry point

* add custom components to the package

* move form components to toolkit

* add more utils and hooks to the package

* minor fixes

* add CI workflow

* update readme and package.json

* fix ts

* fix build of env-validator

* fix docker build

* fix icons size

* test fixes

* more test fixes
2025-04-21 19:44:22 +02:00
tom 803be77728 Merge branch 'main' of github.com:blockscout/frontend into chakra-v3 2025-03-24 19:47:18 +01:00
tom goriunovandGitHub 7e7f49cbe6 Make static sprite registry (#2615)
* make static sprite registry

* [skip ci] fix file stats command

* [skip ci] sort icons by name
2025-03-14 17:04:06 +01:00
tom 4216798b00 fix build, sidebar transition and network logo loading state 2025-03-12 20:15:14 +01:00
tom 57c70454ee make build not failing in the ci 2025-01-23 18:13:19 +01:00
tom goriunovandGitHub b32a115b07 OG image: automatically generate image on container start (#2496)
* make script to generate OG image at container start

* add prod service URL

* remove og_image.png

* update path to file

* [skip ci] remove app url from payload
2025-01-14 12:01:18 +01:00
tom goriunovandGitHub ec06875b08 Generate sitemap.xml and robots.txt files (#2502)
* base implementation of sitemap generator

* move generator to separate directory to optimize docker image size

* generate robots.txt file
2025-01-14 11:56:47 +01:00
aagaev ba317b2968 Add yarn network-timeout param 2024-12-23 12:54:55 +00:00
tom e0a8ba33b2 append hash to sprite file name base on its content 2024-12-19 10:16:41 +01:00
tom goriunovandGitHub bd4094ebd1 Bump up Node.js to v22 (#2410)
* Bump up Node.js to v22

Fixes #2404

* update Playwright to v1.49.0

* fix tests

* one more fix

* fix screenshots
2024-11-25 12:43:05 +01:00
isstuev e6b57f696e review fixes 2024-10-29 12:06:36 +01:00
isstuev 71cf615b30 Favicon generator: replace realfavicon with favicons package 2024-10-25 13:57:35 +02:00
tom dca8f6de15 Bump Playwright to v1.47.2 2024-09-25 16:36:08 +02:00
Or Noyman f02c1322a7 replace '--chmod=+x' with '--chmod=755' for 'COPY' instructions in Dockerfile to be podman-friendly 2024-07-25 14:07:54 +03:00
tom goriunovandGitHub 811ba0a437 Move generated assets into separate folder inside the public folder (#1930)
* add build-time ENV to explicitly enable Open Telemetry

* generate svg-sprite before next build

* move envs.js to assets folder

* move favicon bundle to assets folder

* move external configs to configs folder

* fix envs validator
2024-05-20 13:17:33 +02:00
tom goriunovandGitHub 0057fe01c4 ENVs preset for deploy demo workflow (#1829)
* pass envs preset to docker entrypoing

* gh actions integration

* update presets

* more preset fixes

* [skip ci] fixes
2024-04-17 14:38:53 +02:00
tom 01e5f11ded fix docker build for arm arch 2024-04-04 15:49:43 +02:00
tom goriunovandGitHub 4e575eb144 bump Node.js to v20 (#1417)
* bump Node.js to v20

Fixes #1318

* bump pw version

* update screenshot
2024-01-29 18:17:10 +04:00
aagaev a01cf18d24 debug ci, remove ignore-optional flag 2024-01-22 12:55:13 +00:00
tom 47cb1fc36f add sprite build step to Docker file; remove unused Icon component; fix svgo config 2023-12-21 11:33:48 +04:00
tom d558af64eb [skip ci] update Dockerfile 2023-12-18 17:39:50 +04:00
tom 81e9299923 add --ignore-optional flag to docker file 2023-10-13 17:50:48 -03:00
tom goriunovandGitHub 43f1af2c25 workaround for ENV replacement script (#1212)
* base implementation of client script with envs values

* better ENVs setup for pw tests

* fix tests
2023-09-29 10:45:23 -03:00
tom goriunovandGitHub cc21eb144e validate ENV values at run-time (#1184)
* migrate from zod to yul schema

* describe full schema

* adjust docker integration

* make script for downloading app assets

* change links to downloaded assets in the config code

* docker integration

* validate external json configs

* better schemas and ts integration

* update docs and dev script

* gh workflow

* try to fail gh workflow

* install global deps and adjust script for gh workflow

* refinements

* make workflow to pass

* 🙈

* fix tests
2023-09-19 16:19:27 -03:00
tom 457a7adae8 integrate with docker and CI 2023-09-06 15:23:41 -03:00
tom goriunovandGitHub e3551038af app feature list (#1079)
* metadata helpers and values for txs pages

* update titles to the rest of the pages

* refactor getServerSideProps

* dynamically update metadata for token and dapp page

* test

* 404 error page

* make new config

* make use of new config, delete old one

* feature reporter: dev implementation

* feature reporter: docker integration

* resctructure ENVS.md

* sentry feature

* refinements

* add spaces between sections

* tweaks

* switch to camelCase

* clean up

* remove NEXT_PUBLIC_NETWORK_TOKEN_ADDRESS

* v
2023-08-09 15:39:36 -04:00
tom goriunovandGitHub 7150f93435 image build process improvements (#1045)
* auto-generate .env.production file

* env placeholders congruity check

* refactor yarn dev and docker tasks

* [skip ci] pass git tag and commit sha to dev app

* [skip ci] clean up
2023-08-02 13:32:53 -04:00
tom goriunovandGitHub d22f431755 ENVs integrity check (#1039)
* group account envs in docs

* remove NEXT_PUBLIC_LOGOUT_RETURN_URL env

* simple ENVs checker

* add types for all envs

* group values in config

* global envs types

* text tweaks

* fixes

* [skip ci] fix docker build
2023-07-26 09:32:37 -04:00
isstuev d63645319c footer 2023-05-29 17:44:23 -03:00
Nick Zenchik 7136dc1fd0 Adding GIT_TAG var to docker image 2023-05-25 17:31:26 +04:00
Nick Zenchik 4d090df3e5 Fixing GIT_COMMIT_SHA in docker image 2023-05-24 22:26:15 +04:00
tom dbfd573a89 migrate to node v18 2023-02-22 11:22:22 -05:00
tom b5fed3f2cc revert node18 2023-01-30 10:05:53 -06:00
tom 2d56651d31 up node version to 18 2023-01-25 15:49:35 -06:00
tom 5650be8042 proper config of WalletConnect 2023-01-11 10:17:53 -06:00