Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
5b4b161
app: remove the old explorer
adamsoffer Sep 29, 2026
139f90d
build: move to Next.js 16 App Router, Tailwind v4 and pnpm
adamsoffer Sep 29, 2026
592e738
ui: add the Livepeer Design System tokens and primitives
adamsoffer Sep 29, 2026
ab7a93b
data: add the subgraph data layer and portfolio maths
adamsoffer Sep 29, 2026
2e17ba3
wallet: add the address list, wallet connection and staking flows
adamsoffer Sep 29, 2026
d2aa061
shell: add the sidebar, search and live round clock
adamsoffer Sep 29, 2026
d9d7cce
governance: add proposals, polls, voting and creation
adamsoffer Sep 29, 2026
5b33256
portfolio: add the portfolio home and account pages
adamsoffer Sep 29, 2026
28ed61e
orchestrators: rank by expected yield
adamsoffer Sep 29, 2026
75aa1b1
gateways: add the list and profile pages
adamsoffer Sep 29, 2026
74e55e2
network: add the overview and activity feed
adamsoffer Sep 29, 2026
098f5f4
og: add share images and page metadata
adamsoffer Sep 29, 2026
107e352
mock, docs: add the offline subgraph mock and update the README
adamsoffer Sep 29, 2026
c7ef0ea
docs: describe the area-prefix commit style
adamsoffer Sep 29, 2026
5065b02
analytics: track the delegation funnel
adamsoffer Sep 29, 2026
c8213a4
orchestrators: stop flashing empty and not-found states on load
adamsoffer Sep 29, 2026
868ca57
portfolio: rank reliable orchestrators like the Orchestrators list
adamsoffer Sep 29, 2026
e3d8ebe
portfolio: move the unstaked LPT prompt into the Delegations header
adamsoffer Sep 29, 2026
2736cc7
portfolio: clearer Delegations table
adamsoffer Sep 29, 2026
543a896
portfolio: shorten the stake chart so Delegations starts above the fold
adamsoffer Sep 29, 2026
4de12b3
portfolio: give each Delegate menu item its own lines
adamsoffer Sep 29, 2026
4228485
orchestrators: show filter counts in the toggle instead of a paragraph
adamsoffer Sep 29, 2026
53c7ba3
network: add an All range to the history chart
adamsoffer Sep 30, 2026
54c057e
staking: move stake to another wallet in the portfolio
adamsoffer Sep 30, 2026
3dd0cd5
staking: transfer stake to any wallet, with a From and To picker
adamsoffer Sep 30, 2026
cf98ed3
shell: only highlight Portfolio on the portfolio itself
adamsoffer Sep 30, 2026
34a8c9b
accounts: rename or remove from a menu, not by clicking a badge
adamsoffer Sep 30, 2026
feca844
accounts: rename from a pencil beside the name
adamsoffer Sep 30, 2026
f6a7138
ui: tidy the portfolio, account and activity views on phones
adamsoffer Sep 30, 2026
58752df
app: address the review findings on data freshness and safety
adamsoffer Sep 30, 2026
16b5c9c
lib: close the gaps from the second review pass
adamsoffer Sep 30, 2026
d0381ff
build: upgrade Next to 16.3.8 and move axios to 1.20
adamsoffer Sep 30, 2026
800524d
governance: switch to Arbitrum before creating a poll or proposal
adamsoffer Sep 30, 2026
f354e3f
ci: declare least-privilege permissions and update checks for v2
adamsoffer Sep 30, 2026
db30ed8
portfolio: don't flash onboarding before saved wallets load
adamsoffer Sep 30, 2026
88dccb6
portfolio: drop the per-round rate line from the hero
adamsoffer Sep 30, 2026
0c53e26
portfolio: tidy the wallet cards on narrow screens
adamsoffer Oct 1, 2026
930032f
orchestrators: keep Delegate in view and fit the table without scrolling
adamsoffer Oct 2, 2026
d3791c7
wallet: read v2's own Reown project ID
adamsoffer Oct 6, 2026
becad23
deps: bump source-map-js to 1.2.2
adamsoffer Oct 6, 2026
78fdf51
shell: link to livepeer.org from the sidebar
adamsoffer Oct 6, 2026
b75a49a
portfolio: call wallet LPT "available" rather than "unstaked"
adamsoffer Oct 6, 2026
24d4a4c
portfolio: flag problems costing rewards at the top of the page
adamsoffer Oct 9, 2026
3e7c194
governance: render br tags, tables and rules in proposal text
adamsoffer Oct 9, 2026
906e1c4
governance: read the rest of the markdown proposals use
adamsoffer Oct 9, 2026
9705712
governance: recover from markdown slips in proposal text
adamsoffer Oct 9, 2026
356f074
shell: add a desktop header with breadcrumbs and the connected wallet
adamsoffer Oct 11, 2026
9b8642c
governance: put the vote key beside the tabs
adamsoffer Oct 11, 2026
f64180e
network: line the round card up with the tiles beside it
adamsoffer Oct 11, 2026
3addde9
ui: give toolbar controls one height
adamsoffer Oct 11, 2026
3461cf3
gateways: say how gateways work without a tooltip inside the info
adamsoffer Oct 11, 2026
5095ad1
portfolio: remove a wallet from its delegation menu, and ignore dust …
adamsoffer Oct 11, 2026
ec931ec
tx: treat a reverted transaction as failed, not confirmed
adamsoffer Oct 11, 2026
4b47105
governance: stop poll creation when existing polls can't be read
adamsoffer Oct 11, 2026
d63d928
governance: don't count self-voting delegators in an orchestrator's p…
adamsoffer Oct 11, 2026
f994a35
build: refuse to build without a subgraph, and pass SITE_URL to Docker
adamsoffer Oct 11, 2026
c871c4c
governance: leave out-of-range numeric entities as written
adamsoffer Oct 11, 2026
d4d8a49
deps: require sharp 0.35.5
adamsoffer Oct 11, 2026
88d2e41
theme: raise light-mode cards above the page, as in dark mode
adamsoffer Oct 11, 2026
23eca5e
governance: show turnout against quorum beside the tally
adamsoffer Oct 11, 2026
0bfba77
governance: use dark mode's amber for the quorum bar in light mode
adamsoffer Oct 11, 2026
48ce0f4
governance: make the empty new-poll page a centred empty view
adamsoffer Oct 11, 2026
b23eb77
ui: set empty-state icons in a tile, with a larger title
adamsoffer Oct 11, 2026
16e66d5
governance: pay a proposal's ENS receiver at its Arbitrum address
adamsoffer Oct 12, 2026
b1ae3d6
orchestrators: date an unchanged cut from the first round, not 1970
adamsoffer Oct 12, 2026
0c5a5da
portfolio: call adding an address watching it, apart from connecting
adamsoffer Oct 12, 2026
e346ceb
safe: only describe calls the Safe makes itself, to known contracts
adamsoffer Oct 12, 2026
58d7944
governance: page votes and voter counts past 1,000
adamsoffer Oct 12, 2026
bbbd2df
contracts: re-read registry addresses after ten minutes
adamsoffer Oct 12, 2026
c6d225b
governance: wait for the receiver checks before allowing a proposal
adamsoffer Oct 12, 2026
293e729
portfolio: offer stake transfer with one wallet, and clamp the sync t…
adamsoffer Oct 12, 2026
65fa5e6
governance: on phones, put the new-poll empty state under the descrip…
adamsoffer Oct 14, 2026
a972756
portfolio: name the proposal a queued Safe vote is for
adamsoffer Oct 14, 2026
f79e8c0
safe: read a Safe's whole queue for Livepeer actions
adamsoffer Oct 14, 2026
d55a581
orchestrators: format the cut-updated note
adamsoffer Oct 19, 2026
e1fadd5
portfolio: don't count a claimed round's commission twice
adamsoffer Oct 19, 2026
b8e1025
portfolio, subgraph: keep the wallet view when storage refuses writes…
adamsoffer Oct 19, 2026
2e12ef2
subgraph: restore the paginate tests
adamsoffer Oct 19, 2026
c2017f8
build: keep local credentials out of the Docker build context
adamsoffer Oct 19, 2026
a99c20f
contracts: send only to pinned protocol addresses
adamsoffer Oct 19, 2026
7980bd0
staking: verify stake-transfer recipients, and withdraw exact fees
adamsoffer Oct 19, 2026
aca293a
portfolio: keep the wallet when switching or choosing an orchestrator
adamsoffer Oct 19, 2026
3d7d899
governance: only send poll votes to real Livepeer polls
adamsoffer Oct 19, 2026
9ac5ac9
portfolio: defuse every formula in the earnings CSV
adamsoffer Oct 19, 2026
df99073
app: survive malformed route segments and round numbers
adamsoffer Oct 19, 2026
5f44d81
ci: pin actions to commit SHAs and Lighthouse to an exact version
adamsoffer Oct 19, 2026
6839692
server: bound the work public URLs can trigger
adamsoffer Oct 19, 2026
e760d2b
search: cap and defer ENS lookups
adamsoffer Oct 19, 2026
b2a971b
prices: bound each price-history request, and flag missing ETH prices
adamsoffer Oct 19, 2026
3e73a0f
portfolio: estimate missed rewards across every wallet with the orche…
adamsoffer Oct 19, 2026
194c462
governance: pick a voter's latest vote by chain order
adamsoffer Oct 19, 2026
f919005
gateways: count payouts from the most recent tickets, not a hash sample
adamsoffer Oct 19, 2026
b81b0c5
contracts: test the pinned-address check without loading wagmi
adamsoffer Oct 19, 2026
7635161
app: give the Safe manifest its own icon path
adamsoffer Oct 20, 2026
e60ef13
ci(lighthouse): install Lighthouse CI from its own locked project (#843)
rickstaa Oct 20, 2026
54e4f13
ci(dependabot): wait a week before proposing action updates (#842)
rickstaa Oct 20, 2026
8d25082
ui: copy addresses from tables
adamsoffer Oct 20, 2026
63c6c55
app: point the Safe manifest at safe-icon.svg
adamsoffer Oct 20, 2026
5eaada2
ui: let table name links fill their cell again
adamsoffer Oct 20, 2026
a3f1303
ui: keep tags beside names, and drop copy from the vote lists
adamsoffer Oct 20, 2026
5d52089
governance: show the treasury against its ceiling
adamsoffer Oct 22, 2026
65e903e
network: add a supply chart and a treasury strip, and calm the round …
adamsoffer Oct 22, 2026
b3b6a3d
deps: update Next.js to 16.4.2 and pin follow-redirects past 1.16.1
adamsoffer Oct 22, 2026
256e523
network: show the History chart's value, and follow the pointer
adamsoffer Oct 22, 2026
a21528d
ui: give segmented controls clearer contrast in dark mode
adamsoffer Oct 22, 2026
97f98ab
governance: give the treasury chart more height
adamsoffer Oct 22, 2026
c0362b2
network: say the fee figure is a total, not a weekly rate
adamsoffer Oct 22, 2026
fd5dce4
theme: lift light mode
adamsoffer Oct 22, 2026
7a8a56d
ui: quieter addresses in the activity feed, and one font for big figures
adamsoffer Oct 22, 2026
ff8d275
portfolio: show delegations as a table more often, and a short list o…
adamsoffer Oct 22, 2026
6497a00
portfolio: give phone delegation rows one height and even spacing
adamsoffer Oct 22, 2026
080a214
theme: a lighter green for marks in light mode, and blue for the trea…
adamsoffer Oct 22, 2026
8627dab
shell: set desktop content in one inset panel, and soften light text
adamsoffer Oct 22, 2026
5673c41
ui: firmer headings and weighted names, Linear-style
adamsoffer Oct 22, 2026
0c0d2e7
ui: one caption size, and figures in the page's sans
adamsoffer Oct 22, 2026
2a349a7
ui: one row height for tables, one padding for lists
adamsoffer Oct 22, 2026
d13865a
theme: charcoal dark mode in even layers, and a pinned desktop header
adamsoffer Oct 22, 2026
63dd6cf
shell: a translucent pinned header, and jump links that clear it
adamsoffer Oct 22, 2026
07eda37
theme: softer edges and dividers in dark mode
adamsoffer Oct 23, 2026
3cd6291
shell: a calmer sidebar
adamsoffer Oct 23, 2026
ddced66
shell: anchor the sidebar's wallet and appearance as a footer
adamsoffer Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Never send local credentials or build output into the image: anything
# here would be readable in the builder stage and its cache. Build-time
# config comes in as --build-arg (see Dockerfile).
.env
.env.*
!.env.example
*.pem
.git
.github
.next
node_modules
.pnpm-store
.vercel
.claude
.playwright-mcp
coverage
*.tsbuildinfo
.DS_Store
39 changes: 25 additions & 14 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@
CHANGEFEED_ACCESS_TOKEN=
GITHUB_ACCESS_TOKEN=
LIVEPEER_COM_API_ADMIN_TOKEN=
PINATA_JWT=
# Subgraph. With a Graph API key, queries go through The Graph's gateway to
# the published subgraph's latest version (lib/config.ts); restrict the key
# to your domains in Subgraph Studio, since it's used from the browser.
# Without one, the rate-limited Studio URL is used (fine for local dev).
NEXT_PUBLIC_SUBGRAPH_API_KEY=
# Optional: pin one version by deployment id (Qm…), or a whole endpoint URL.
NEXT_PUBLIC_SUBGRAPH_DEPLOYMENT=
NEXT_PUBLIC_SUBGRAPH_ENDPOINT=

NEXT_PUBLIC_GA_TRACKING_ID=
NEXT_PUBLIC_NETWORK=ARBITRUM_ONE
# RPC. Public endpoints are used when these are empty.
NEXT_PUBLIC_INFURA_KEY=
NEXT_PUBLIC_L1_RPC_URL=
NEXT_PUBLIC_L2_RPC_URL=
NEXT_PUBLIC_GITHUB_LIP_NAMESPACE=adamsoffer
NEXT_PUBLIC_SUBGRAPH_API_KEY=
NEXT_PUBLIC_SUBGRAPH_ID=FE63YgkzcpVocxdCEyEYbvjYqEf2kb1A6daMYRxmejYC
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=
NEXT_PUBLIC_METRICS_SERVER_URL=https://leaderboard-serverless.vercel.app
NEXT_PUBLIC_AI_METRICS_SERVER_URL=https://leaderboard-api.livepeer.cloud

# Optional dev overrides (e.g. Graph Studio sandbox; leave empty in prod)
NEXT_PUBLIC_SUBGRAPH_ENDPOINT=
# Reown (formerly WalletConnect) project ID, from cloud.reown.com. Each domain
# the app runs on must be on that project's allowlist.
NEXT_PUBLIC_REOWN_PROJECT_ID=

# Public URL of this deployment, e.g. https://explorer.livepeer.org. Used for
# absolute share-image URLs. Optional on Vercel when system environment
# variables are exposed; otherwise links preview without an image.
SITE_URL=

# Creating LIP polls: the explorer pins the LIP's text to IPFS through Pinata
# before the poll is created on-chain. Without it, poll creation is disabled.
PINATA_JWT=

# Optional: raises GitHub's rate limit when reading the LIPs repository.
GITHUB_ACCESS_TOKEN=

11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,20 @@ updates:
directory: /
schedule:
interval: weekly
# Same wait as npm: a hijacked action tag is the same kind of attack.
cooldown:
default-days: 7
# One combined PR; action majors are routine tag moves and CI
# validates the grouped PR anyway.
groups:
actions:
patterns:
- "*"

# Lighthouse CI is locked on its own, away from the app's install.
- package-ecosystem: npm
directory: /tools/lhci
schedule:
interval: weekly
cooldown:
default-days: 7
28 changes: 19 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ on:
pull_request:
branches: ['*']

# Least privilege: jobs only read the repo unless they say otherwise.
permissions:
contents: read

# Actions are pinned to full commit SHAs (the tag each was at is noted), so
# a moved tag can't swap in different code. Update them deliberately.

jobs:
lint-and-test:
runs-on: ubuntu-latest
Expand All @@ -15,16 +22,18 @@ jobs:

steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: 📦 Install pnpm
uses: pnpm/action-setup@v6
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.33.0
run_install: false

- name: 🟢 Setup Node
uses: actions/setup-node@v7
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24
cache: pnpm
Expand All @@ -41,11 +50,10 @@ jobs:
- name: 🧪 Run tests
run: pnpm test

# Fails on known critical advisories in production dependencies.
# Tighten to `high` once the remaining high (sharp, pinned by next)
# clears upstream.
# Fails on known high or critical advisories in production
# dependencies.
- name: 🔒 Audit production dependencies
run: pnpm audit --prod --audit-level=critical
run: pnpm audit --prod --audit-level=high

# Fails the PR if it introduces a dependency with a known vulnerability.
dependency-review:
Expand All @@ -54,9 +62,11 @@ jobs:
contents: read
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: 🔍 Review dependency changes
uses: actions/dependency-review-action@v5
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
with:
fail-on-severity: high
31 changes: 20 additions & 11 deletions .github/workflows/lighthouse-vercel-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@ jobs:
timeout-minutes: 25

steps:
# Actions pinned to full commit SHAs, the tag noted beside each.
- name: ⬇️ Checkout
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: 🟢 Setup Node
uses: actions/setup-node@v7
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24

- name: 🔎 Wait for Vercel Deployment + grab Preview URL
id: vercel
uses: actions/github-script@v9
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
Expand Down Expand Up @@ -68,22 +71,28 @@ jobs:
throw new Error("Timed out waiting for Vercel preview deployment URL.");

- name: 📦 Install pnpm
uses: pnpm/action-setup@v6
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.33.0
run_install: false

# Lighthouse CI lives in its own locked project, so its dependencies
# are the ones in tools/lhci/pnpm-lock.yaml and the app's are not
# installed in this job.
- name: 📥 Install Lighthouse CI
run: pnpm --dir tools/lhci install --frozen-lockfile --ignore-workspace

- name: 🔎 Run Lighthouse CI against Vercel Preview
env:
PREVIEW_URL: ${{ steps.vercel.outputs.preview_url }}
run: |
echo "Running Lighthouse CI on: $PREVIEW_URL"
pnpm dlx @lhci/cli collect --config=./.lighthouserc.json \
pnpm --dir tools/lhci exec lhci collect --config="$GITHUB_WORKSPACE/.lighthouserc.json" \
--url="$PREVIEW_URL/" \
--url="$PREVIEW_URL/orchestrators" \
--url="$PREVIEW_URL/leaderboard" \
--url="$PREVIEW_URL/transactions" \
--url="$PREVIEW_URL/voting" \
--url="$PREVIEW_URL/treasury"
pnpm dlx @lhci/cli assert --config=./.lighthouserc.json
pnpm dlx @lhci/cli upload --config=./.lighthouserc.json --target=temporary-public-storage
--url="$PREVIEW_URL/network" \
--url="$PREVIEW_URL/activity" \
--url="$PREVIEW_URL/governance" \
--url="$PREVIEW_URL/gateways"
pnpm --dir tools/lhci exec lhci assert --config="$GITHUB_WORKSPACE/.lighthouserc.json"
pnpm --dir tools/lhci exec lhci upload --config="$GITHUB_WORKSPACE/.lighthouserc.json" --target=temporary-public-storage
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
node_modules
/.pnp
.pnp.js

Expand Down
4 changes: 0 additions & 4 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ node_modules
.github
.vscode
.playwright-mcp
@types
apollo
codegen.yml
data
next-env.d.ts
pnpm-lock.yaml
public
8 changes: 0 additions & 8 deletions @types/custom.d.ts

This file was deleted.

9 changes: 9 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<!-- BEGIN:nextjs-agent-rules -->

# This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.

This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.

<!-- END:nextjs-agent-rules -->
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
19 changes: 18 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,20 @@ If you find an issue you want to work on, follow the Commits and Pull Request in

### Commits

As best as possible, try to follow [Conventional Commits v1.0.0](https://www.conventionalcommits.org/en/v1.0.0/) patterns.
Start the subject with the area of the app it touches, then a short summary in the imperative:

```text
orchestrators: rank by expected yield
wallet: resume the action once the right account connects
network, docs: explain what the sparklines cover
```

- **Area:** lowercase, naming the part of the app, such as `portfolio`, `orchestrators`, `gateways`, `governance`, `network`, `wallet`, `shell`, `ui`, `data`, `build` or `docs`. Separate two with a comma, and use `app` for changes across the whole app.
- **Summary:** lowercase and imperative ("add", not "added" or "adds"), with no trailing period. Keep the whole subject under 72 characters.
- **Body:** wrapped at 72 characters. Explain why and anything that isn't obvious from the diff, rather than listing files.
- **One logical change per commit,** each building and passing tests.

PRs are squash-merged, so the PR title becomes the commit on `main`: write it the same way.

### Code Conventions

Expand All @@ -29,6 +42,10 @@ Additional conventions, not yet enforced at the time of writing, include:

Write JSDoc for all functions and methods in classes unless you have a good reason not to (e.g., NextJS route or page components). At minimum, include a general description of the functionality.

#### Lighthouse

CI runs Lighthouse CI against each Vercel preview, installed from `tools/lhci` so it stays out of the app's dependencies. To check a page yourself, use the Lighthouse tab in Chrome DevTools or `pnpm dlx lighthouse <url>`.

### Pull Requests

In general, PRs should:
Expand Down
41 changes: 13 additions & 28 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,23 @@ FROM node:24 AS builder
WORKDIR /app
RUN corepack enable

ARG CHANGEFEED_ACCESS_TOKEN
ARG GITHUB_ACCESS_TOKEN
ARG LIVEPEER_COM_API_ADMIN_TOKEN
ARG PINATA_JWT
ARG NEXT_PUBLIC_GA_TRACKING_ID
ARG NEXT_PUBLIC_NETWORK=ARBITRUM_ONE
ARG NEXT_PUBLIC_SUBGRAPH_ENDPOINT
ARG NEXT_PUBLIC_SUBGRAPH_API_KEY
ARG NEXT_PUBLIC_SUBGRAPH_DEPLOYMENT
ARG NEXT_PUBLIC_INFURA_KEY
ARG NEXT_PUBLIC_L1_RPC_URL
ARG NEXT_PUBLIC_L2_RPC_URL
ARG NEXT_PUBLIC_GITHUB_LIP_NAMESPACE=adamsoffer
ARG NEXT_PUBLIC_SUBGRAPH_API_KEY
ARG NEXT_PUBLIC_SUBGRAPH_ID
ARG NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID
ARG NEXT_PUBLIC_METRICS_SERVER_URL=https://leaderboard-serverless.vercel.app
ARG NEXT_PUBLIC_AI_METRICS_SERVER_URL=https://leaderboard-api.livepeer.cloud
ARG NEXT_PUBLIC_REOWN_PROJECT_ID
ARG SITE_URL

# Step 5: Create .env file with substituted values
RUN echo "CHANGEFEED_ACCESS_TOKEN=${CHANGEFEED_ACCESS_TOKEN}" >> .env && \
echo "GITHUB_ACCESS_TOKEN=${GITHUB_ACCESS_TOKEN}" >> .env && \
echo "LIVEPEER_COM_API_ADMIN_TOKEN=${LIVEPEER_COM_API_ADMIN_TOKEN}" >> .env && \
echo "PINATA_JWT=${PINATA_JWT}" >> .env && \
echo "NEXT_PUBLIC_GA_TRACKING_ID=${NEXT_PUBLIC_GA_TRACKING_ID}" >> .env && \
echo "NEXT_PUBLIC_NETWORK=${NEXT_PUBLIC_NETWORK}" >> .env && \
echo "NEXT_PUBLIC_INFURA_KEY=${NEXT_PUBLIC_INFURA_KEY}" >> .env && \
echo "NEXT_PUBLIC_L1_RPC_URL=${NEXT_PUBLIC_L1_RPC_URL}" >> .env && \
echo "NEXT_PUBLIC_L2_RPC_URL=${NEXT_PUBLIC_L2_RPC_URL}" >> .env && \
echo "NEXT_PUBLIC_GITHUB_LIP_NAMESPACE=${NEXT_PUBLIC_GITHUB_LIP_NAMESPACE}" >> .env && \
echo "NEXT_PUBLIC_SUBGRAPH_API_KEY=${NEXT_PUBLIC_SUBGRAPH_API_KEY}" >> .env && \
echo "NEXT_PUBLIC_SUBGRAPH_ID=${NEXT_PUBLIC_SUBGRAPH_ID}" >> .env && \
echo "NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=${NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID}" >> .env && \
echo "NEXT_PUBLIC_METRICS_SERVER_URL=${NEXT_PUBLIC_METRICS_SERVER_URL}" >> .env && \
echo "NEXT_PUBLIC_AI_METRICS_SERVER_URL=${NEXT_PUBLIC_AI_METRICS_SERVER_URL}" >> .env
ENV NEXT_PUBLIC_SUBGRAPH_ENDPOINT=${NEXT_PUBLIC_SUBGRAPH_ENDPOINT} \
NEXT_PUBLIC_SUBGRAPH_API_KEY=${NEXT_PUBLIC_SUBGRAPH_API_KEY} \
NEXT_PUBLIC_SUBGRAPH_DEPLOYMENT=${NEXT_PUBLIC_SUBGRAPH_DEPLOYMENT} \
NEXT_PUBLIC_INFURA_KEY=${NEXT_PUBLIC_INFURA_KEY} \
NEXT_PUBLIC_L1_RPC_URL=${NEXT_PUBLIC_L1_RPC_URL} \
NEXT_PUBLIC_L2_RPC_URL=${NEXT_PUBLIC_L2_RPC_URL} \
NEXT_PUBLIC_REOWN_PROJECT_ID=${NEXT_PUBLIC_REOWN_PROJECT_ID} \
SITE_URL=${SITE_URL}

COPY . .
RUN pnpm install --frozen-lockfile && pnpm run build
Expand Down
Loading
Loading