Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
187 commits
Select commit Hold shift + click to select a range
7cab2e6
docs: correct Github typo across whole website
Uaitt Feb 26, 2026
e38cf14
feat: text version of ef mandate
wackerow Mar 16, 2026
26505fe
feat: update intro copy
wackerow Mar 18, 2026
507c0e4
patch: extract cta link below text
wackerow Mar 18, 2026
0bf34c1
feat: update meta description
wackerow Mar 18, 2026
0c391a8
feat(i18n): localize event location country names
myelinated-wackerow Apr 3, 2026
5cd3d91
Merge branch 'dev' into location-translations
wackerow Apr 8, 2026
75cc49b
content: update future-proofing page + add post-quantum cryptography …
konopkja Apr 8, 2026
17486f0
fix: remove blanket redirect blocking future-proofing subpages
konopkja Apr 8, 2026
7a905af
refactor: descriptive thumbnail naming
wackerow Apr 8, 2026
45a5e95
content: apply PR review feedback from myelinated-wackerow and mnelsonBT
konopkja Apr 9, 2026
76f7b1d
content: add data availability bullet per mnelsonBT suggestion
konopkja Apr 9, 2026
ac5f6fd
content: apply remaining mnelsonBT review suggestions
konopkja Apr 9, 2026
ec2b7c1
content: apply second round of mnelsonBT review suggestions
konopkja Apr 9, 2026
d61e4e6
refactor: migrate Tailwind CSS v3 to v4
pettinarip Apr 10, 2026
c178fd8
fix: remove invalid leading-1 class causing text overlap in tailwind v4
pettinarip Apr 10, 2026
90467d8
fix: remove translate/transform classes conflicting with orbit animat…
pettinarip Apr 10, 2026
0c73783
fix: replace var(--color-*) refs with hsla(var(--token)) for @theme i…
pettinarip Apr 10, 2026
4c90fbc
fix(docs): correct PoA concurrent blocks example
Ale-Bv-Dev Apr 12, 2026
7e6747a
style: run prettier formatting across components and pages
pettinarip Apr 13, 2026
1713b6a
fix: resolve swiper dot colors and urdu list numbering regressions in…
pettinarip Apr 13, 2026
65612ab
Merge branch 'dev' into refactor/tailwind-v4-migration
pettinarip Apr 13, 2026
69c3830
trailing Ethereum keyword optimization
mnelsonBT Apr 14, 2026
9eacfcb
Merge remote-tracking branch 'origin/dev' into refactor/tailwind-v4-m…
pettinarip Apr 14, 2026
0e3411e
fix(seo): resolve critical 404 and routing errors across translated c…
mnelsonBT Apr 14, 2026
286630c
content: add /use-cases/ landing page as central hub
konopkja Apr 14, 2026
6075d73
content: refresh Learn hub as guided learning journey
konopkja Apr 14, 2026
2f63cda
trailing SEO degrade missing apps to 404 to stop serverless 502 casca…
mnelsonBT Apr 14, 2026
20f687c
content: restructure Learn hub with card design fixes and motivation-…
konopkja Apr 14, 2026
95557e4
ci: trigger rebuild
konopkja Apr 14, 2026
2a43170
fix: inline button styles to fix server component build error
konopkja Apr 14, 2026
138cae2
fix: use founders-page card pattern instead of hardcoded overrides
konopkja Apr 14, 2026
f316f11
fix: restructure Learn hub per user feedback
konopkja Apr 14, 2026
43d0ae6
content: convert use-cases from markdown to React page with card design
konopkja Apr 14, 2026
0ded07a
fix: solid CTA buttons, consistent padding, no hover underline on title
konopkja Apr 14, 2026
1979240
fix: solid CTA buttons, consistent padding, no hover underline on title
konopkja Apr 14, 2026
2c10acf
fix: bottom-aligned buttons with unique CTA labels per card
konopkja Apr 14, 2026
f68074b
fix: bottom-aligned buttons with unique CTA labels per card
konopkja Apr 14, 2026
2141a0a
fix: use subgrid for cross-card button alignment
konopkja Apr 15, 2026
fddd73c
fix: use subgrid for cross-card button alignment
konopkja Apr 15, 2026
624a349
implement dynamic MapPin UI fallbacks in EventCard to catch broken im…
mnelsonBT Apr 15, 2026
719c1b2
fixing broken redirect relative link
mnelsonBT Apr 15, 2026
0899bcb
bulk update to replace http with https
mnelsonBT Apr 15, 2026
2484178
content: refine Learn hub structure per feedback
konopkja Apr 15, 2026
560bd0f
content: copywriter rewrites, new hero image, ready-to-start section
konopkja Apr 15, 2026
467f68e
context: update PBS explanation in index.md
rayjun Apr 16, 2026
a8a67e2
content: apply feedback on Learn hub headings and copy
konopkja Apr 16, 2026
6f437cc
content: hero copy update, intro paragraph, SEO meta tags
konopkja Apr 16, 2026
3854c27
content: hero CTA "Start exploring" (translation-friendly, no jargon)
konopkja Apr 16, 2026
e7f7718
content: restructure use cases with novel uses, AI banner, full DAO t…
konopkja Apr 16, 2026
442f816
content: replace restaking with institutions, fix AI banner spacing
konopkja Apr 16, 2026
f690949
content: shorten DAO title to "Decentralized organizations (DAOs)"
konopkja Apr 16, 2026
bc08dae
content: add restaking as DocLink under financial tools
konopkja Apr 16, 2026
7809385
build(deps): bump protobufjs from 7.5.4 to 7.5.5
dependabot[bot] Apr 17, 2026
0bcd972
fix(scripts): route prepare-release logs to stderr
pettinarip Apr 17, 2026
fcd1cb4
fix(scripts): redirect setup_worktree stdout to stderr in cmd_version
pettinarip Apr 17, 2026
94e8911
Add NFT Standards wiki link to resources
anettrolikova Apr 17, 2026
35f1b2b
feat(seo): add KNOWN_AUTHORS profile registry
myelinated-wackerow Apr 17, 2026
ad36c72
feat(seo): wire known authors into page JSON-LD
myelinated-wackerow Apr 17, 2026
ebc1d78
content(seo): add authors frontmatter to 10 pages
myelinated-wackerow Apr 17, 2026
2ee82cc
Merge branch 'dev' into jsonld-authors
myelinated-wackerow Apr 17, 2026
b4e8d5a
refactor: "author" to "Person" for schema semantics
myelinated-wackerow Apr 17, 2026
297e34a
docs(intl-pipeline): add orchestration section
myelinated-wackerow Apr 19, 2026
3b794ee
fix(intl-pipeline): use pending as baseline on re-run
myelinated-wackerow Apr 19, 2026
44f2992
Merge pull request #17984 from ethereum/dependabot/npm_and_yarn/proto…
wackerow Apr 20, 2026
1fa630b
refactor(tailwind): drop remaining theme() calls and consolidate vend…
pettinarip Apr 20, 2026
4d99f25
docs(intl): refresh pipeline and review docs
myelinated-wackerow Apr 20, 2026
b9e69b8
Merge branch 'dev' into intl-pipeline-v6-1
myelinated-wackerow Apr 20, 2026
b1be2dc
chore(intl-pipeline): prune FUTURE.md
myelinated-wackerow Apr 20, 2026
e8fe0a9
Merge pull request #17986 from ethereum/fix/prepare-release-stdout-leak
wackerow Apr 20, 2026
49aaa83
Merge remote-tracking branch 'origin/dev' into location-translations
myelinated-wackerow Apr 20, 2026
99d6cd6
fix: localize event locations server-side
myelinated-wackerow Apr 20, 2026
749fdd7
Merge branch 'location-translations' of https://github.com/ethereum/e…
myelinated-wackerow Apr 20, 2026
3e15f96
fix: treat "Remote" location as online event
myelinated-wackerow Apr 20, 2026
c0fead3
Merge branch 'master' into dev
wackerow Apr 20, 2026
7c061da
feat(seo): expand to Organizations, add Anders, videos wiring
myelinated-wackerow Apr 20, 2026
c83fea3
Merge remote-tracking branch 'origin/dev' into jsonld-authors
myelinated-wackerow Apr 20, 2026
0138c54
Merge remote-tracking branch 'origin/dev' into location-translations
myelinated-wackerow Apr 20, 2026
3d1f52f
fix(seo): drop /en/ prefix from JSON-LD URLs
myelinated-wackerow Apr 20, 2026
89b18aa
refactor: use ui/card sub-components
wackerow Apr 20, 2026
f88bd74
refactor(seo): extract deposit-contract JSON-LD to sibling file
myelinated-wackerow Apr 20, 2026
0bf33da
refactor(seo): DRY common @graph entities across page JSON-LD
myelinated-wackerow Apr 20, 2026
cb928c5
refactor(ui): CalloutBannerSSR variants
wackerow Apr 20, 2026
197184e
refactor(ui): standardize ui component usage
wackerow Apr 20, 2026
2f8df0a
Merge pull request #17925 from ethereum/location-translations
wackerow Apr 20, 2026
d5423d3
Add new bounty hunter 'InfiniteSec' to JSON
0xMushow Apr 20, 2026
c4a3b01
fix: typos in Korean whitepaper translation
kangbaek324 Apr 21, 2026
8fad997
feat: add geodelabs ethstars attribution
myelinated-wackerow Apr 21, 2026
4a7a66e
refactor(ui/link): extract http→https normalization to url.normalizeHref
pettinarip Apr 21, 2026
77efcc4
add stories for broken image fallbacks in avatar and eventcard
pettinarip Apr 21, 2026
fe515e7
align apps generateMetadata fallback with homepage pattern
pettinarip Apr 21, 2026
034eea6
Merge remote-tracking branch 'origin/dev' into trailingSEO
pettinarip Apr 21, 2026
00d1920
fix(content): update broken nethereum docs link
pettinarip Apr 21, 2026
13e8fd8
fix(content): update broken nethereum/playground links on dot-net page
pettinarip Apr 21, 2026
77ee46c
fix(stories): add required locale prop to EventCard stories
pettinarip Apr 21, 2026
1fbdf82
fix(Simulator): use live gas price for send transaction fee
pettinarip Apr 21, 2026
3178712
fix(seo): wrap dev-tools category generatemetadata in try/catch to av…
pettinarip Apr 21, 2026
e1e90d1
fix(seo): wrap apps categories generatemetadata in try/catch to avoid…
pettinarip Apr 21, 2026
db975b9
fix: ssr h1 on /layer-2/networks for seo
pettinarip Apr 21, 2026
1893e54
perf: lazy-load layer-2 networks table
pettinarip Apr 21, 2026
66ecbde
Merge remote-tracking branch 'origin/dev' into refactor/tailwind-v4-m…
pettinarip Apr 21, 2026
3d8c0a0
Update redirects.config.js
mnelsonBT Apr 21, 2026
3dddb6a
Update public/content/roadmap/future-proofing/index.md
mnelsonBT Apr 21, 2026
0230d00
Merge pull request #17905 from ethereum/refactor/tailwind-v4-migration
pettinarip Apr 21, 2026
2147375
Merge branch 'master' into dev
wackerow Apr 21, 2026
74260bc
Merge remote-tracking branch 'origin/dev' into trailingSEO
pettinarip Apr 21, 2026
1b1166e
fix(seo): correct reviewedBy domain on JSON-LD nodes
myelinated-wackerow Apr 21, 2026
9f556cc
Merge branch 'dev' into jsonld-patches
myelinated-wackerow Apr 21, 2026
9655836
patch(ui): p-4 padding on cards content
wackerow Apr 21, 2026
d741bb6
Merge pull request #17946 from konopkja/content/update-future-proofin…
wackerow Apr 21, 2026
fa58aa9
Merge branch 'dev' into content/use-cases-landing-page-17973
wackerow Apr 21, 2026
f1e8732
patch: reword attribution copy
wackerow Apr 21, 2026
c9ab04d
patch(ui): full width buttonlink on mobile
wackerow Apr 21, 2026
04b9e86
Merge pull request #17975 from konopkja/content/use-cases-landing-pag…
wackerow Apr 21, 2026
7c98707
Merge branch 'dev' into content/refresh-learn-hub-17974
wackerow Apr 21, 2026
979903b
refactor(ui): standardize ui component usage
wackerow Apr 21, 2026
7d3788d
Merge pull request #18003 from ethereum/geode-eth-stars
wackerow Apr 21, 2026
dc1c95e
Merge branch 'dev' into seo/h1-layer-2-networks
wackerow Apr 21, 2026
9a7fff5
Merge pull request #18007 from ethereum/seo/h1-layer-2-networks
wackerow Apr 21, 2026
b4320b4
refactor: jsonld constants organization
myelinated-wackerow Apr 21, 2026
ccdeb6d
fix(seo): remove `editor` on Article/VideoObject nodes
myelinated-wackerow Apr 22, 2026
8c4858c
refactor(seo): single-path entity alias lookup, warn on collisions
myelinated-wackerow Apr 22, 2026
991d796
Merge remote-tracking branch 'origin/dev' into trailingSEO
pettinarip Apr 22, 2026
4f1f12a
Docs hub and intro: add goal-based wayfinding
franrob-projects Apr 22, 2026
9ff07c0
Merge pull request #17782 from ethereum/mandate
pettinarip Apr 22, 2026
63ddaad
Merge pull request #17978 from ethereum/trailingSEO
pettinarip Apr 22, 2026
b14efc6
Merge pull request #17976 from konopkja/content/refresh-learn-hub-17974
wackerow Apr 22, 2026
9d0a9e0
Merge branch 'dev' into jsonld-patches
myelinated-wackerow Apr 22, 2026
75a8139
Merge branch 'dev' into jsonld-authors
myelinated-wackerow Apr 22, 2026
9c33555
fix: use-cases/ JSONLD references
myelinated-wackerow Apr 22, 2026
2bc5786
Merge remote-tracking branch 'origin/dev' into fix/simulator-live-gas…
pettinarip Apr 22, 2026
81b5fbf
Merge pull request #18005 from ethereum/fix/simulator-live-gas-price
pettinarip Apr 22, 2026
f027e11
Merge pull request #18011 from ethereum/jsonld-patches
wackerow Apr 22, 2026
92cccdd
Merge branch 'dev' into jsonld-authors
myelinated-wackerow Apr 22, 2026
0f19a66
refactor: use First Last names for authors; add EF to mandate
myelinated-wackerow Apr 22, 2026
a8aa09f
refactor: support items to data list
myelinated-wackerow Apr 22, 2026
f3c5fcb
feat(seo): add JSON-LD for community subpages
myelinated-wackerow Apr 22, 2026
5146757
build(deps): pnpm update fast-xml-parser @aws-sdk/client-s3
wackerow Apr 22, 2026
bdc3c73
Merge branch 'dev' into fallback-placeholder
wackerow Apr 22, 2026
4d58f20
Merge pull request #17962 from Ale-Bv-Dev/fix/poa-concurrent-blocks-e…
wackerow Apr 22, 2026
5f5b5fe
docs: update README.md [skip ci]
allcontributors[bot] Apr 22, 2026
9065535
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 22, 2026
7c035ad
Merge pull request #18018 from ethereum/all-contributors/add-Ale-Bv-Dev
wackerow Apr 22, 2026
93f3037
Merge pull request #17979 from rayjun/context/update-pbs-fee-structure
wackerow Apr 22, 2026
4d0c73c
docs: update README.md [skip ci]
allcontributors[bot] Apr 22, 2026
383c908
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 22, 2026
d8cdbe8
Merge pull request #18019 from ethereum/all-contributors/add-rayjun
wackerow Apr 22, 2026
e42b2bf
Merge pull request #17987 from anettrolikova/patch-2
wackerow Apr 22, 2026
d4d61a3
docs: update README.md [skip ci]
allcontributors[bot] Apr 22, 2026
4b16749
docs: update README.md [skip ci]
allcontributors[bot] Apr 23, 2026
b3b6db9
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 23, 2026
87ba1e4
Merge pull request #18020 from ethereum/all-contributors/add-anettrol…
wackerow Apr 23, 2026
cee7281
Merge pull request #17999 from 0xMushow/patch-11
wackerow Apr 23, 2026
8d961af
Merge pull request #18002 from kangbaek324/dev
wackerow Apr 23, 2026
c027802
docs: update README.md [skip ci]
allcontributors[bot] Apr 23, 2026
55cca39
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 23, 2026
1c13754
Merge pull request #18021 from ethereum/all-contributors/add-kangbaek324
wackerow Apr 23, 2026
35aa5c5
Revert translation files to dev state
myelinated-wackerow Apr 23, 2026
45fcee4
Merge remote-tracking branch 'origin/dev' into pr-17671-github-casing
myelinated-wackerow Apr 23, 2026
cb1ceaa
Merge pull request #17671 from Uaitt/docs/github-typo
wackerow Apr 23, 2026
9a3a468
fix: miss heading id
Apr 23, 2026
4662921
fix(seo): preserve request locale in generateMetadata fallbacks
pettinarip Apr 23, 2026
b5dd2b4
Merge pull request #18006 from ethereum/fix/dev-tools-category-metada…
pettinarip Apr 23, 2026
46ed2ab
chore: code clean up
wackerow Apr 23, 2026
2e8a4c3
Merge pull request #18012 from ethereum/security/fast-xml-parser-ghsa…
pettinarip Apr 23, 2026
525019d
Merge pull request #18017 from ethereum/jsonld-community
pettinarip Apr 23, 2026
64ce242
chore: eslint cleanup
wackerow Apr 23, 2026
885d1a7
fix: use community as baseline contributor
wackerow Apr 23, 2026
e9af6f3
patch: persons.ts name
wackerow Apr 23, 2026
ad38e50
Merge pull request #17948 from ethereum/fallback-placeholder
pettinarip Apr 23, 2026
9dc14f0
Merge pull request #17997 from ethereum/intl-pipeline-v6-1
pettinarip Apr 23, 2026
8edc692
patch(jsonld): use VideoGallery, rm slice
wackerow Apr 23, 2026
e0add53
patch(jsonld): add base nodes/WebPage, isPartOf
wackerow Apr 23, 2026
3dbf3cf
Merge pull request #18016 from franrob-projects/docs/developer-wayfin…
wackerow Apr 23, 2026
1a8c3bb
docs: update README.md [skip ci]
allcontributors[bot] Apr 23, 2026
935b6da
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 23, 2026
85b00dd
Merge pull request #18027 from ethereum/all-contributors/add-franrob-…
wackerow Apr 23, 2026
06a6d61
Merge pull request #18024 from jzhishu/fix/issue-18023
wackerow Apr 23, 2026
6526b84
docs: update README.md [skip ci]
allcontributors[bot] Apr 23, 2026
603b929
docs: update .all-contributorsrc [skip ci]
allcontributors[bot] Apr 23, 2026
5926244
Merge pull request #18028 from ethereum/all-contributors/add-jzhishu
wackerow Apr 23, 2026
93e2cec
refactor: semantic naming adjustment
wackerow Apr 23, 2026
1f594f9
Merge pull request #18026 from ethereum/jsonld-videos
wackerow Apr 23, 2026
7780bfb
Merge branch 'dev' into jsonld-authors
myelinated-wackerow Apr 23, 2026
0ce4532
patch: add community ref to bug-bounty page
myelinated-wackerow Apr 24, 2026
6db03fb
Merge pull request #17988 from ethereum/jsonld-authors
wackerow Apr 24, 2026
f996339
11.5.0
wackerow Apr 24, 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
  •  
  •  
  •  
48 changes: 47 additions & 1 deletion .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -1501,7 +1501,8 @@
"avatar_url": "https://avatars1.githubusercontent.com/u/44020788?v=4",
"profile": "https://twitter.com/AnettRolikova",
"contributions": [
"content"
"content",
"tool"
]
},
{
Expand Down Expand Up @@ -14149,6 +14150,51 @@
"contributions": [
"maintenance"
]
},
{
"login": "Ale-Bv-Dev",
"name": "Ale-Bv-Dev",
"avatar_url": "https://avatars.githubusercontent.com/u/214505223?v=4",
"profile": "https://github.com/Ale-Bv-Dev",
"contributions": [
"bug"
]
},
{
"login": "rayjun",
"name": "rayoo",
"avatar_url": "https://avatars.githubusercontent.com/u/7517993?v=4",
"profile": "https://github.com/rayjun",
"contributions": [
"bug"
]
},
{
"login": "kangbaek324",
"name": "BaekHo Kang",
"avatar_url": "https://avatars.githubusercontent.com/u/162931494?v=4",
"profile": "https://github.com/kangbaek324",
"contributions": [
"translation"
]
},
{
"login": "franrob-projects",
"name": "Fran Roberts",
"avatar_url": "https://avatars.githubusercontent.com/u/111994975?v=4",
"profile": "https://franrob-projects.github.io/portfolio/",
"contributions": [
"content"
]
},
{
"login": "jzhishu",
"name": "JH",
"avatar_url": "https://avatars.githubusercontent.com/u/39545185?v=4",
"profile": "https://github.com/jzhishu",
"contributions": [
"bug"
]
}
],
"contributorsPerLine": 7,
Expand Down
66 changes: 28 additions & 38 deletions .claude/commands/review-translations.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,38 +224,39 @@ Read `.claude/translation-review/known-patterns.md` — this contains all issue

### Translation Glossary (AUTHORITATIVE SOURCE)

The EthGlossary API (`https://ethereum.org/api/glossary`) is the **authoritative source** for all Ethereum term translations across the entire pipeline. Community-voted glossary terms are not suggestions — they are the required translations.
**ETHGlossary** is the authoritative source for Ethereum term translations. Deviations are critical issues, not warnings.

**Fetch live from the API first, fall back to cache only if the API is unreachable:**
Resolve the base URL from the pipeline config (env var wins; default lives in `src/scripts/intl-pipeline/config.ts` under `GLOSSARY_API_URL`):

```bash
# Fetch live glossary
GLOSSARY_CACHE="$HOME/.claude/translation-review/fetch-translation-glossary.json"
GLOSSARY_URL="https://ethereum.org/api/glossary"

# Try live fetch first
if curl -sf "$GLOSSARY_URL" -o "$TMPDIR/glossary-live.json" 2>/dev/null; then
# Update cache with fresh data
cp "$TMPDIR/glossary-live.json" "$GLOSSARY_CACHE"
echo "Glossary fetched live from API and cache updated."
else
echo "WARNING: API unreachable, using cached glossary."
fi
GLOSSARY_API_URL="${GLOSSARY_API_URL:-$(grep -oE 'https://[^"]+/api/v[0-9]+' "$WORKTREE_PATH/src/scripts/intl-pipeline/config.ts" | head -1)}"
GLOSSARY_HOST="${GLOSSARY_API_URL%/api/*}"
```

Schema: `Array<{ string_term, translation_text, language_code, total_votes }>`.
Fetch `llms.txt` first as the canonical reference for endpoints and languages; if examples below disagree, llms.txt wins:

For each language being reviewed, extract relevant glossary terms:
```bash
curl -sf "$GLOSSARY_HOST/llms.txt" \
-o "$TMPDIR/ethglossary-llms.txt" \
&& cp "$TMPDIR/ethglossary-llms.txt" "$HOME/.claude/translation-review/ethglossary-llms.txt"
```
Filter entries where language_code matches the target locale.
Sort by total_votes descending.
Include ALL terms for the language (not just top 50) — these are authoritative.

**Preferred — per-file filter** (`POST /filter`): returns only the glossary terms that appear in the English source, with translations sorted by occurrence. Avoids pulling hundreds of irrelevant terms into agent context.

```bash
ENGLISH_SOURCE=$(cat "$WORKTREE_PATH/public/content/{path}.md")
curl -sf -X POST "$GLOSSARY_API_URL/filter" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg text "$ENGLISH_SOURCE" --arg lang "{LANGUAGE_CODE}" '{text: $text, language: $lang}')"
```

**Fallback — full language** when filtering per file is impractical or the endpoint is unreachable:

```bash
curl -sf "$GLOSSARY_API_URL/translations/{LANGUAGE_CODE}"
```

**The glossary is used in every subsequent phase:**
- **Phase 3 (Review):** Agents treat glossary deviations as CRITICAL, not warnings
- **Phase 5 (Auto-Fix):** Glossary deviations are auto-corrected to the top-voted translation
- **Phase 8 (Knowledge Base):** New deviations discovered are logged for future reviews
Used in Phase 3 (review — deviations are CRITICAL), Phase 5 (auto-fix corrects to ETHGlossary translation), Phase 8 (new deviations logged).

### Per-Language Prior Findings
Check if `.claude/translation-review/per-language/{LANGUAGE_CODE}.md` exists. If so, read it and inject relevant prior findings into the agent prompt.
Expand Down Expand Up @@ -331,22 +332,11 @@ The community has voted on these translations for key Ethereum terms. Use these
- Review the entire current content of each file
- Compare against English source files from the worktree

## MANDATORY: Fetch Ethereum Glossary FIRST

**Before reviewing ANY translation, you MUST fetch the official Ethereum glossary for the language(s) being reviewed.** This is non-negotiable. The glossary contains community-approved translations for key terms.

```bash
# Fetch full glossary (all languages):
curl -s "https://ethereum.org/api/glossary/"

# Fetch glossary for a specific language (optional lang param, one at a time):
curl -s "https://ethereum.org/api/glossary/?lang=fr"
curl -s "https://ethereum.org/api/glossary/?lang=ja"
```
## MANDATORY: Use ETHGlossary for the target language

The glossary returns approved translations per language. Use these as the authority for how technical terms SHOULD be translated. Flag any deviations as warnings with "Glossary mismatch" in the issue column.
Use the ETHGlossary terms fetched in Phase 2 as the authority for technical term translations. Report deviations as **critical** issues (not warnings), with the current (wrong) translation and the expected (ETHGlossary) translation so Phase 5 can auto-fix them.

**If you skip the glossary, the entire review is invalid.**
**If you skip ETHGlossary, the entire review is invalid.**

## Review Checklist

Expand Down Expand Up @@ -733,6 +723,6 @@ ETH, Wei, Gwei, Gas
- Use `--model=sonnet` or `--model=haiku` for faster reviews
- Build verification is opt-in: `--build-local` for local scoped builds, `--netlify-check` for Netlify deploy preview checks
- If an agent exceeds context limits with Opus, fall back to Sonnet with Grep-based file inspection
- **EthGlossary API** (`https://ethereum.org/api/glossary`) is fetched live in Phase 2 and is the authoritative source for term translations across the entire pipeline — review (Phase 3), auto-fix (Phase 5), and knowledge base (Phase 8). The local cache at `~/.claude/translation-review/fetch-translation-glossary.json` is a fallback only.
- **ETHGlossary** is the authoritative source for term translations across review (Phase 3), auto-fix (Phase 5), and knowledge base (Phase 8). See Phase 2 for usage; `llms.txt` is the canonical endpoint reference.
- Knowledge base at `.claude/translation-review/` accumulates findings across reviews (committed to repo)
- `gh` CLI commands require `dangerouslyDisableSandbox: true` due to TLS certificate verification issues in sandbox mode
7 changes: 7 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const config: StorybookConfig = {
"../src/components/**/*.stories.{ts,tsx}",
"../src/layouts/stories/*.stories.tsx",
"../src/styles/*.stories.tsx",
"../app/**/*.stories.{ts,tsx}",
],

addons: [
Expand Down Expand Up @@ -68,6 +69,12 @@ const config: StorybookConfig = {
use: ["@svgr/webpack"],
})

// .all-contributorsrc is JSON without a .json extension
config.module.rules.push({
test: /\.all-contributorsrc$/,
type: "json",
})

return config
},

Expand Down
3 changes: 0 additions & 3 deletions .storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ import nextIntl, { baseLocales } from "./next-intl"
import { withNextThemes } from "./withNextThemes"

import "../src/styles/global.css"
import "../src/styles/docsearch.css"

import "@docsearch/css"

const inter = Inter({
subsets: ["latin"],
Expand Down
10 changes: 5 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ This is the official Ethereum.org website - a Next.js application that serves as
- **Next.js 14.2+** - React framework with App Router
- **React 18** - UI library
- **TypeScript 5.5+** - Type safety and development experience
- **Tailwind CSS 3.4+** - Utility-first CSS framework
- **Tailwind CSS 4+** - Utility-first CSS framework (CSS-first config in `src/styles/global.css`)

### Key Dependencies

Expand Down Expand Up @@ -119,10 +119,10 @@ pnpm events-import # Import community events

### Internationalization

- **25 languages** supported via Crowdin (canonical list: `i18n.config.json`)
- **RTL support** for Arabic, Urdu
- Translation files (JSON format) in `src/intl/[locale]/`
- Content translations managed through Crowdin platform
- **25 languages** supported (canonical list: `i18n.config.json`); **RTL support** for Arabic, Urdu
- JSON UI strings in `src/intl/[locale]/`; translated markdown content in `public/content/translations/[locale]/`
- Non-English markdown is propagated by the **intl-pipeline** (`src/scripts/intl-pipeline/`, entry `main.ts`). **Do not hand-propagate English changes into non-English files** -- let the pipeline run, or trigger `intl-pipeline.yml` with `stamp_only: true` if manifests must catch up urgently (e.g. unblocking a build). Hand-fixing a translation error is fine when the English side hasn't moved, since the manifest mapping stays valid. Spec: `tests/specs/PIPELINE-SPEC.md`.
- Glossary: base URL from `GLOSSARY_API_URL` env var; default in `src/scripts/intl-pipeline/config.ts`. ETHGlossary is authoritative for Ethereum term translations.

### Markdown Content

Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/evertonfraga"><img src="https://avatars2.githubusercontent.com/u/47108?v=4?s=100" width="100px;" alt="Ev"/><br /><sub><b>Ev</b></sub></a><br /><a href="#ideas-evertonfraga" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Aevertonfraga" title="Bug reports">🐛</a> <a href="#content-evertonfraga" title="Content">🖋</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://discord.gg/5W5tVb3"><img src="https://avatars2.githubusercontent.com/u/6251510?v=4?s=100" width="100px;" alt="Ivan Martinez"/><br /><sub><b>Ivan Martinez</b></sub></a><br /><a href="#content-0xKiwi" title="Content">🖋</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sebastiantf"><img src="https://avatars3.githubusercontent.com/u/36922376?v=4?s=100" width="100px;" alt="Sebastian T F"/><br /><sub><b>Sebastian T F</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=sebastiantf" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/AnettRolikova"><img src="https://avatars1.githubusercontent.com/u/44020788?v=4?s=100" width="100px;" alt="Anett Rolikova "/><br /><sub><b>Anett Rolikova </b></sub></a><br /><a href="#content-anettrolikova" title="Content">🖋</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/AnettRolikova"><img src="https://avatars1.githubusercontent.com/u/44020788?v=4?s=100" width="100px;" alt="Anett Rolikova "/><br /><sub><b>Anett Rolikova </b></sub></a><br /><a href="#content-anettrolikova" title="Content">🖋</a> <a href="#tool-anettrolikova" title="Tools">🔧</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://etherworld.co"><img src="https://avatars0.githubusercontent.com/u/29681685?v=4?s=100" width="100px;" alt="Pooja Ranjan"/><br /><sub><b>Pooja Ranjan</b></sub></a><br /><a href="#content-poojaranjan" title="Content">🖋</a></td>
Expand Down Expand Up @@ -2203,6 +2203,11 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://linktr.ee/jadijadi"><img src="https://avatars.githubusercontent.com/u/1290639?v=4?s=100" width="100px;" alt="Jadi"/><br /><sub><b>Jadi</b></sub></a><br /><a href="#maintenance-jadijadi" title="Maintenance">🚧</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Ale-Bv-Dev"><img src="https://avatars.githubusercontent.com/u/214505223?v=4?s=100" width="100px;" alt="Ale-Bv-Dev"/><br /><sub><b>Ale-Bv-Dev</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3AAle-Bv-Dev" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rayjun"><img src="https://avatars.githubusercontent.com/u/7517993?v=4?s=100" width="100px;" alt="rayoo"/><br /><sub><b>rayoo</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Arayjun" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kangbaek324"><img src="https://avatars.githubusercontent.com/u/162931494?v=4?s=100" width="100px;" alt="BaekHo Kang"/><br /><sub><b>BaekHo Kang</b></sub></a><br /><a href="#translation-kangbaek324" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://franrob-projects.github.io/portfolio/"><img src="https://avatars.githubusercontent.com/u/111994975?v=4?s=100" width="100px;" alt="Fran Roberts"/><br /><sub><b>Fran Roberts</b></sub></a><br /><a href="#content-franrob-projects" title="Content">🖋</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jzhishu"><img src="https://avatars.githubusercontent.com/u/39545185?v=4?s=100" width="100px;" alt="JH"/><br /><sub><b>JH</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Ajzhishu" title="Bug reports">🐛</a></td>
</tr>
</tbody>
</table>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Skeleton } from "@/components/ui/skeleton"

const Loading = () => (
<div className="flex w-full flex-col items-center gap-6 md:hidden">
<div className="flex w-full max-w-[550px] flex-col gap-6 rounded-2xl bg-card-gradient-secondary p-4 sm:p-6 xl:max-w-[700px]">
<div className="bg-card-gradient-secondary flex w-full max-w-[550px] flex-col gap-6 rounded-2xl p-4 sm:p-6 xl:max-w-[700px]">
<Skeleton className="mx-auto size-36 rounded-4xl" />
<Skeleton className="h-8 w-1/2" />
<div className="space-y-1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const InnovationSwiper = ({ innovationCards }: InnovationSwiperProps) => (
({ image, title, date, description1, description2 }, index) => (
<SwiperSlide
key={index}
className="mx-auto flex w-full max-w-[550px] flex-col gap-4 rounded-lg bg-card-gradient-secondary p-4 sm:p-6 xl:max-w-[700px]"
className="bg-card-gradient-secondary mx-auto flex w-full max-w-[550px] flex-col gap-4 rounded-lg p-4 sm:p-6 xl:max-w-[700px]"
>
<Image
src={image}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Skeleton } from "@/components/ui/skeleton"

const Loading = () => (
<div className="flex w-full flex-col items-center gap-6">
<div className="flex w-full max-w-[550px] flex-col gap-6 rounded-lg bg-card-gradient-secondary p-4 sm:p-6 xl:max-w-[700px]">
<div className="bg-card-gradient-secondary flex w-full max-w-[550px] flex-col gap-6 rounded-lg p-4 sm:p-6 xl:max-w-[700px]">
<Skeleton className="mx-auto size-48 rounded-4xl" />
<Skeleton className="h-8 w-1/2" />
<Skeleton className="h-5 w-1/4" />
Expand Down
6 changes: 3 additions & 3 deletions app/[locale]/10years/_components/NFTMintCard/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
return (
<Card
className={cn(
"w-full overflow-hidden rounded-3xl bg-gradient-to-b from-[#A66BFF20] to-[#EED9FE16] shadow-lg",
"w-full overflow-hidden rounded-3xl bg-linear-to-b from-[#A66BFF20] to-[#EED9FE16] shadow-lg",
className
)}
>
Expand All @@ -30,7 +30,7 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
<div className="flex items-center justify-center pt-12">
<div className="relative max-h-[200px] max-w-[200px] overflow-hidden rounded-full border-4 border-white bg-white">
<video
className="pointer-events-none h-full w-full select-none rounded-full object-cover"
className="pointer-events-none h-full w-full rounded-full object-cover select-none"
src="/videos/10y-video.mp4"
aria-label={t("page-10-year-video-aria-label")}
autoPlay
Expand All @@ -47,7 +47,7 @@ const NFTMintCard = ({ className }: NFTMintCardProps) => {
{/* Curved text */}
<Curved10YearsText
viewBox="0 0 313 186"
className="absolute left-1/2 top-0 h-min w-full max-w-[300px] -translate-x-1/2 fill-primary"
className="fill-primary absolute top-0 left-1/2 h-min w-full max-w-[300px] -translate-x-1/2"
width="100%"
height="auto"
/>
Expand Down
6 changes: 3 additions & 3 deletions app/[locale]/10years/_components/TenYearHero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,20 @@ const TenYearHero = async () => {
<ParallaxImage
src={TenYearGraphicImage}
alt={t("page-10-year-anniversary-meta-title")}
className="absolute left-0 top-0 max-h-[350px] object-contain transition-transform duration-200 ease-out"
className="absolute top-0 left-0 max-h-[350px] object-contain transition-transform duration-200 ease-out"
priority
/>
</div>
<p className="text-center text-3xl">
{t("page-10-year-celebrating")}{" "}
<span className="relative max-md:block md:w-fit">
<span
className="select-none opacity-0 max-md:hidden"
className="opacity-0 select-none max-md:hidden"
data-label="space-holder"
>
{WORDS[0]}
</span>
<span className="text-3xl font-bold text-accent-b md:absolute md:start-0 md:text-nowrap">
<span className="text-accent-b text-3xl font-bold md:absolute md:start-0 md:text-nowrap">
{/* CLIENT SIDE, lazy loaded */}
<Morpher words={WORDS} charSet="abcdfgijklnopqsvwxyz" />
</span>
Expand Down
7 changes: 3 additions & 4 deletions app/[locale]/10years/_components/TorchHistoryCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,9 @@ const TorchHistoryCard: React.FC<TorchHistoryCardProps> = ({
return (
<Card
className={cn(
"flex flex-col rounded-xl border border-gray-100/50 bg-gradient-to-b from-white to-gray-100 px-6 py-12 shadow-lg dark:text-body-inverse",
isCurrentHolder && "bg-gradient-to-b from-[#B38DF0] to-[#DED4ED]",
isPlaceholder &&
"bg-gradient-to-b from-gray-100 to-gray-200 opacity-50",
"dark:text-body-inverse flex flex-col rounded-xl border border-gray-100/50 bg-linear-to-b from-white to-gray-100 px-6 py-12 shadow-lg",
isCurrentHolder && "bg-linear-to-b from-[#B38DF0] to-[#DED4ED]",
isPlaceholder && "bg-linear-to-b from-gray-100 to-gray-200 opacity-50",
className
)}
>
Expand Down
Loading
Loading