-
Notifications
You must be signed in to change notification settings - Fork 637
Clusters Feature Integration #2816
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…user is searching for a cluster name vs a evm address
tive chain count
…plicit viewport config, updates screenshots
tom2drum
reviewed
Jul 22, 2025
…to 3.2.0 and pinned esbuild to 0.21.5. update docker dep script.
…ve playwright build failures
1 task
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description and Related Issue(s)
This PR introduces Clusters Universal Name Service integration into the Blockscout explorer. Clusters is a cross-chain identity service that allows users to track multiple wallets across various networks under a single unified name (like
vitalik/orfoobar/).This optional integration adds a new Clusters directory, Clusters leaderboard, individual cluster details page, and search capability. The feature follows established patterns for optional service and includes proper env handling.
Proposed Changes
Environment Variables:
NEXT_PUBLIC_CLUSTERS_API_HOST- for Clusters API endpointNEXT_PUBLIC_CLUSTERS_CDN_URL- for Clusters CDN assetsconfigs/envs/.env.jestandconfigs/envs/.env.localhostdeploy/tools/envs-validator/schema.tsdeploy/values/Documentation and Configuration:
docs/ENVS.mdjest.config.tsand added test mocksjest/mocks/andjest/setupAfterEnv.tsAPI Configuration and Types:
clustersApiconfiguration inconfigs/app/apis.tswith optional Clusters API integrationlib/api/services/clusters.tsfor Clusters API service layerconfigs/app/features/clusters.tslib/api/resources.tsandlib/api/types.tsTypeScript Types and Stubs:
types/api/clusters.tsstubs/clusters.tstypes/api/search.tsCore Library and Utilities:
lib/clusters/directory with utilities for action bar, page utils, and input detectionlib/hooks/:useAddressClusters.ts- for address specific cluster datauseClusterPagination.ts- for cluster pagination logicuseClusterSearch.ts- for cluster search functionalityuseClustersData.ts- for main clusters data fetchinguseQueryParams.ts- for URL query parameter handlinglib/hooks/useNavItems.tsxlib/metadata/andlib/mixpanel/Testing and QA:
lib/clusters/utilities - action bar, page utils, input detectionuseAddressClusters,useClusterPagination,useClusterSearch,useClustersDatauseSearchWithClustersClustersEntityPages and Routing:
pages/clusters/index.tsx- main clusters directory pagepages/clusters/[name].tsx- individual cluster details pageui/pages/Clusters.tsx- clusters directory page componentui/pages/Cluster.tsx- individual cluster page componentnextjs/nextjs-routes.d.tsUI Components:
ui/clusters/:ClustersActionBar.tsx- search and filter controlsClustersDirectoryTable.tsxandClustersDirectoryTableItem.tsx- directory viewsClustersDirectoryListItem.tsx- directory list itemClustersLeaderboardTable.tsxandClustersLeaderboardTableItem.tsx- leaderboard viewsClustersLeaderboardListItem.tsx- leaderboard list itemsui/cluster/:ClusterDetails.tsx- main cluster detail componentui/address/clusters/:AddressClusters.tsx- clusters tab for address pagesui/shared/ClusterIcon.tsx- cluster icon componentui/shared/entities/clusters/ClustersEntity.tsx- cluster entity displaySearch and Navigation Integration:
ui/snippets/searchBar/SearchBarSuggest/SearchBarSuggestCluster.tsxui/snippets/searchBar/useSearchWithClusters.tsxui/shared/search/utils.tsui/snippets/navigation/NavLinkIcon.tsxSearchBar.tsx,SearchBarInput.tsx,SearchBarSuggest.tsx,SearchBarSuggestItem.tsxAssets and Icons:
icons/clusters.svgfor cluster-specific logo usepublic/icons/name.d.tsBreaking or Incompatible Changes
None. This is an additive feature that introduces optional clusters functionality. Existing installations will continue to work unchanged, and the new feature can be optionally enabled by setting the NEXT_PUBLIC_CLUSTERS_API_HOST environment variable.
Additional Information
5 minute Loom video displaying the Clusters feature - https://www.loom.com/share/6278c920204249b398a6f227b1cb701d?sid=5b7d6a88-b13e-4002-8fab-0c531ac92090
Checklist for PR author