Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .env.example.external
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# External white-label deployment template.
#
# This file documents the env vars an external operator must set when running
# this image with their own brand. The source code is brand-neutral — all
# strings below are operator-supplied at deploy time.
#
# Copy and customize for your deployment:
# cp .env.example.external .env.local
#
# Replace every <PLACEHOLDER> with your own values. NEVER commit a populated
# version of this file with third-party trademarks back to this repo.

NEXT_PUBLIC_BRAND=other

# Network
NEXT_PUBLIC_NETWORK_NAME=<Your Network Name>
NEXT_PUBLIC_NETWORK_SHORT_NAME=<SYMBOL>
NEXT_PUBLIC_NETWORK_ID=<chain-id-uint64>
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=<Token Name>
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=<TOKEN>
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18
NEXT_PUBLIC_NETWORK_RPC_URL=https://<your-rpc-host>/rpc

# API
NEXT_PUBLIC_API_HOST=<your-api-host>
NEXT_PUBLIC_API_PROTOCOL=https
NEXT_PUBLIC_API_BASE_PATH=/
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss

# App
NEXT_PUBLIC_APP_HOST=<your-explorer-host>
NEXT_PUBLIC_APP_PROTOCOL=https
NEXT_PUBLIC_IS_TESTNET=false

# Branding (operator-supplied)
NEXT_PUBLIC_NETWORK_ORG_NAME=<Your Org>
NEXT_PUBLIC_NETWORK_WEBSITE_URL=https://<your-domain>
NEXT_PUBLIC_NETWORK_DESCRIPTION=<one-line description>
NEXT_PUBLIC_NETWORK_GITHUB_URL=
NEXT_PUBLIC_NETWORK_TWITTER_URL=
NEXT_PUBLIC_NETWORK_DISCORD_URL=

# Auth (IAM) — operator-supplied OIDC provider
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc
NEXT_PUBLIC_OIDC_SERVER_URL=<https://your-iam-host>
NEXT_PUBLIC_OIDC_CLIENT_ID=<your-client-id>

# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark
39 changes: 39 additions & 0 deletions .env.example.hanzo
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Hanzo Explorer — Hanzo AI brand.
# Use: cp .env.example.hanzo .env.local && pnpm build

NEXT_PUBLIC_BRAND=hanzo

# Network (Hanzo subnet on Lux mainnet)
NEXT_PUBLIC_NETWORK_NAME=Hanzo AI
NEXT_PUBLIC_NETWORK_SHORT_NAME=HANZO
NEXT_PUBLIC_NETWORK_ID=36963
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=HANZO
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=HANZO
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18

# API
NEXT_PUBLIC_API_HOST=api-explore-hanzo.lux.network
NEXT_PUBLIC_API_PROTOCOL=https
NEXT_PUBLIC_API_BASE_PATH=/
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss

# App
NEXT_PUBLIC_APP_HOST=explore.hanzo.ai
NEXT_PUBLIC_APP_PROTOCOL=https
NEXT_PUBLIC_IS_TESTNET=false

# Branding
NEXT_PUBLIC_NETWORK_ORG_NAME=Hanzo Industries Inc.
NEXT_PUBLIC_NETWORK_WEBSITE_URL=https://hanzo.ai
NEXT_PUBLIC_NETWORK_DESCRIPTION=AI blockchain — decentralized compute and inference.
NEXT_PUBLIC_NETWORK_GITHUB_URL=https://github.com/hanzoai
NEXT_PUBLIC_NETWORK_TWITTER_URL=https://x.com/hanaboratory
NEXT_PUBLIC_NETWORK_DISCORD_URL=https://discord.gg/hanzoai

# Auth (IAM)
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc
NEXT_PUBLIC_OIDC_SERVER_URL=https://hanzo.id
NEXT_PUBLIC_OIDC_CLIENT_ID=hanzo-explore-client-id

# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark
40 changes: 40 additions & 0 deletions .env.example.lux
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Lux Explorer — default brand.
# `pnpm build` with no NEXT_PUBLIC_BRAND override produces a Lux-branded site.

NEXT_PUBLIC_BRAND=lux

# Network
NEXT_PUBLIC_NETWORK_NAME=Lux Network
NEXT_PUBLIC_NETWORK_SHORT_NAME=LUX
NEXT_PUBLIC_NETWORK_ID=96369
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=LUX
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=LUX
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18
NEXT_PUBLIC_NETWORK_RPC_URL=https://api.lux.network/ext/bc/C/rpc

# API
NEXT_PUBLIC_API_HOST=api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL=https
NEXT_PUBLIC_API_BASE_PATH=/
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss

# App
NEXT_PUBLIC_APP_HOST=explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL=https
NEXT_PUBLIC_IS_TESTNET=false

# Branding
NEXT_PUBLIC_NETWORK_ORG_NAME=Lux Industries Inc.
NEXT_PUBLIC_NETWORK_WEBSITE_URL=https://lux.network
NEXT_PUBLIC_NETWORK_DESCRIPTION=High-performance blockchain for decentralized applications.
NEXT_PUBLIC_NETWORK_GITHUB_URL=https://github.com/luxfi
NEXT_PUBLIC_NETWORK_TWITTER_URL=https://x.com/luxdefi
NEXT_PUBLIC_NETWORK_DISCORD_URL=https://discord.gg/luxnetwork

# Auth (IAM)
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc
NEXT_PUBLIC_OIDC_SERVER_URL=https://lux.id
NEXT_PUBLIC_OIDC_CLIENT_ID=lux-explore-client-id

# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark
39 changes: 39 additions & 0 deletions .env.example.pars
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Pars Explorer — Parsis Foundation brand.
# Use: cp .env.example.pars .env.local && pnpm build

NEXT_PUBLIC_BRAND=pars

# Network (Pars subnet on Lux mainnet)
NEXT_PUBLIC_NETWORK_NAME=Pars Network
NEXT_PUBLIC_NETWORK_SHORT_NAME=PARS
NEXT_PUBLIC_NETWORK_ID=494949
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=PARS
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=PARS
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18

# API
NEXT_PUBLIC_API_HOST=api-explore-pars.lux.network
NEXT_PUBLIC_API_PROTOCOL=https
NEXT_PUBLIC_API_BASE_PATH=/
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss

# App
NEXT_PUBLIC_APP_HOST=explore.pars.network
NEXT_PUBLIC_APP_PROTOCOL=https
NEXT_PUBLIC_IS_TESTNET=false

# Branding
NEXT_PUBLIC_NETWORK_ORG_NAME=Parsis Foundation
NEXT_PUBLIC_NETWORK_WEBSITE_URL=https://pars.network
NEXT_PUBLIC_NETWORK_DESCRIPTION=Pars blockchain — financial infrastructure for the Persian-speaking world.
NEXT_PUBLIC_NETWORK_GITHUB_URL=https://github.com/luxfi
NEXT_PUBLIC_NETWORK_TWITTER_URL=https://x.com/parsnetwork
NEXT_PUBLIC_NETWORK_DISCORD_URL=https://discord.gg/luxnetwork

# Auth (IAM)
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc
NEXT_PUBLIC_OIDC_SERVER_URL=https://pars.id
NEXT_PUBLIC_OIDC_CLIENT_ID=pars-explore-client-id

# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark
39 changes: 39 additions & 0 deletions .env.example.zoo
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Zoo Explorer — Zoo Labs Foundation brand.
# Use: cp .env.example.zoo .env.local && pnpm build

NEXT_PUBLIC_BRAND=zoo

# Network (Zoo subnet on Lux mainnet)
NEXT_PUBLIC_NETWORK_NAME=Zoo Chain
NEXT_PUBLIC_NETWORK_SHORT_NAME=ZOO
NEXT_PUBLIC_NETWORK_ID=200200
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18

# API
NEXT_PUBLIC_API_HOST=api-explore-zoo.lux.network
NEXT_PUBLIC_API_PROTOCOL=https
NEXT_PUBLIC_API_BASE_PATH=/
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss

# App
NEXT_PUBLIC_APP_HOST=explore.zoo.ngo
NEXT_PUBLIC_APP_PROTOCOL=https
NEXT_PUBLIC_IS_TESTNET=false

# Branding
NEXT_PUBLIC_NETWORK_ORG_NAME=Zoo Labs Foundation
NEXT_PUBLIC_NETWORK_WEBSITE_URL=https://zoo.ngo
NEXT_PUBLIC_NETWORK_DESCRIPTION=Open AI research network — decentralized AI and science.
NEXT_PUBLIC_NETWORK_GITHUB_URL=https://github.com/zooai
NEXT_PUBLIC_NETWORK_TWITTER_URL=https://x.com/zoolabs
NEXT_PUBLIC_NETWORK_DISCORD_URL=https://discord.gg/zoolabs

# Auth (IAM)
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc
NEXT_PUBLIC_OIDC_SERVER_URL=https://zoo.id
NEXT_PUBLIC_OIDC_CLIENT_ID=zoo-explore-client-id

# Theme
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark
80 changes: 70 additions & 10 deletions .github/workflows/build-lux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,28 @@ concurrency:

env:
REGISTRY: ghcr.io
IMAGE_NAME: luxfi/explore

jobs:
build:
runs-on: hanzo-build-linux-amd64
name: Build ${{ matrix.brand }} (${{ matrix.arch }})
runs-on: hanzo-build-linux-${{ matrix.arch }}
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
brand: [ lux, hanzo, zoo, pars ]
arch: [ amd64, arm64 ]
include:
- brand: lux
image: luxfi/explore
- brand: hanzo
image: luxfi/explore-hanzo
- brand: zoo
image: luxfi/explore-zoo
- brand: pars
image: luxfi/explore-pars
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -47,32 +61,78 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
images: ${{ env.REGISTRY }}/${{ matrix.image }}
flavor: |
latest=false
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=ref,event=branch
type=semver,pattern={{version}}
type=raw,value=latest-${{ matrix.arch }},enable={{is_default_branch}}
type=ref,event=branch,suffix=-${{ matrix.arch }}
type=semver,pattern={{version}},suffix=-${{ matrix.arch }}

- name: Build and push image
id: build
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64
platforms: linux/${{ matrix.arch }}
labels: ${{ steps.meta.outputs.labels }}
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=gha,scope=${{ matrix.brand }}-${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.brand }}-${{ matrix.arch }}
provenance: false
push: ${{ github.event_name != 'pull_request' }}
build-args: |
GIT_COMMIT_SHA=${{ github.sha }}
GIT_TAG=${{ github.ref_type == 'tag' && github.ref_name || '' }}
NEXT_PUBLIC_BRAND=${{ matrix.brand }}

deploy:
manifest:
name: Multi-arch manifest (${{ matrix.brand }})
needs: build
if: github.event_name != 'pull_request'
runs-on: hanzo-build-linux-amd64
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
include:
- brand: lux
image: luxfi/explore
- brand: hanzo
image: luxfi/explore-hanzo
- brand: zoo
image: luxfi/explore-zoo
- brand: pars
image: luxfi/explore-pars
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Create and push manifest (latest)
if: github.ref == 'refs/heads/main'
run: |
docker buildx imagetools create \
-t ${{ env.REGISTRY }}/${{ matrix.image }}:latest \
${{ env.REGISTRY }}/${{ matrix.image }}:latest-amd64 \
${{ env.REGISTRY }}/${{ matrix.image }}:latest-arm64

- name: Create and push manifest (tag)
if: github.ref_type == 'tag'
run: |
TAG="${GITHUB_REF_NAME#v}"
docker buildx imagetools create \
-t ${{ env.REGISTRY }}/${{ matrix.image }}:${TAG} \
${{ env.REGISTRY }}/${{ matrix.image }}:${TAG}-amd64 \
${{ env.REGISTRY }}/${{ matrix.image }}:${TAG}-arm64

deploy:
needs: manifest
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
runs-on: hanzo-deploy-linux-amd64
permissions:
Expand Down
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ ARG GIT_TAG
ENV NEXT_PUBLIC_GIT_TAG=$GIT_TAG
ARG NEXT_OPEN_TELEMETRY_ENABLED
ENV NEXT_OPEN_TELEMETRY_ENABLED=$NEXT_OPEN_TELEMETRY_ENABLED
# White-label brand selector (lux | hanzo | zoo | pars | other). Defaults to lux.
ARG NEXT_PUBLIC_BRAND=lux
ENV NEXT_PUBLIC_BRAND=$NEXT_PUBLIC_BRAND
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_OPTIONS="--max-old-space-size=8192"
Expand Down
Loading
Loading