Skip to content

feat: staking pages redesign - #19030

Merged
pettinarip merged 50 commits into
devfrom
staking-redesign
Aug 20, 2026
Merged

feat: staking pages redesign#19030
pettinarip merged 50 commits into
devfrom
staking-redesign

Conversation

@myelinated-wackerow

@myelinated-wackerow myelinated-wackerow commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Rebuilds the /staking landing page and its subpages (solo, saas, pools, withdrawals, dvt) from the Figma redesign: four colored staking-option boxes replacing the old hierarchy diagram, a new at-a-glance comparison table covering bonded node operation and custodial exchanges, and rewritten copy framing the options from protocol-native to most abstracted. Considerations move into a TabNav, alert and card glyphs move from emoji to lucide icons throughout, StakingCommunityCallout renders from the markdown rather than being injected by the topic layout, and /staking/dvt/ declares template: staking so it picks up the shared staking dropdown instead of the docs-style ToC.

Supersedes #18741, which will close in favor of this branch — its content pass is incorporated here: FAQ questions and answers across every staking page, the rewritten dvt page (DVT in production, DKG and middleware detail, four FAQ entries plus a new one clarifying that cluster sizes are configurable rather than fixed at 3 of 4), and current hardware and bandwidth guidance on run-a-node. Review feedback from that PR is applied too: EIP references now lead with a name and cite the number parenthetically, each page's [Ethereum](/) link sits on its first plain mention, and the emoji and alt frontmatter keys are gone (nothing reads either; the hero images are decorative and dvt has none).

Three silent bugs turned up along the way and are fixed here: glossary tooltips on the landing page rendered raw message keys (an app-router page needs its own I18nProvider, and a nested one replaces rather than merges the namespaces it is given), cn() was dropping text-h* sizes because tailwind-merge classified them as text colors, and a horizontally scrollable tab row shoved the ToC off-screen just above lg on every staking page. The FAQ structured data was also incomplete, declaring five questions where the page renders eight.

Two things to know before merging. The page-staking namespace is fully migrated off the deprecated Translation component to t/t.rich, with link hrefs moved out of the catalog strings into tag handlers — so the intl pipeline needs to re-translate this namespace before launch, or the retagged strings render key tails in the other locales. And the shared-primitive changes are isolated in their own commits for easier review: an AlertIcon size variant (with AlertEmoji deprecated), the tailwind-merge fix, callout banner padding, and a one-shade darker --warning in light mode.

Preview link

https://deploy-preview-19030.ethereum.it/staking

myelinated-wackerow and others added 6 commits August 10, 2026 16:21
AlertIcon sizes its child SVG at 24px by default; `size="lg"` (40px) and `size="xl"` (48px) replace the `[&>svg]:size-*` overrides that five call sites were hand-rolling. Marks AlertEmoji deprecated in favor of AlertIcon with a lucide icon, as alert glyphs move away from emoji.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
tailwind-merge classified `text-h1`-`text-h6` as text-color, so `cn("text-h2", "text-primary")` silently dropped the size and the element fell back to its default. Grouping them under font-size makes them conflict with other sizes instead, matching the existing `bg-tint-*`/`bg-fade-*` treatment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Adds inline-end padding to CalloutBanner at the wide container breakpoint so the image stops sitting flush against the callout edge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Replaces the StakingHierarchy diagram with four colored option boxes (home, delegated, pooled, centralized), adds an at-a-glance comparison table covering bonded node operation and custodial exchanges, and reworks the copy around the protocol-native-to-abstracted framing. Option and comparison glyphs are lucide icons; the custom staking glyphs they replaced are removed along with the grid-area utilities the old diagram used.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Rewrites the three sub-pages around home staking, delegated staking and liquid/pooled staking, adding sections on the delegation spectrum, trust models, liquid staking tokens and opaque pooled products. Considerations move into a TabNav with the attribute glyph beside each tab label, the launchpad widget drops its network Select for two direct links, and card and callout glyphs move to lucide icons. StakingCommunityCallout is now an MDX component rendered from each page rather than injected by the topic layout, so the withdrawals page keeps it too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Records the AlertIcon size variant and AlertEmoji deprecation, plus two gotchas found during the staking work: a horizontal scroller in the article column pushes the ToC off-screen unless it carries `contain-inline-size`, and `cn()` silently drops a custom utility whose name pattern-matches a native Tailwind group.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
@netlify

netlify Bot commented Aug 10, 2026

Copy link
Copy Markdown

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 762137c
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/6a86e556ae8e050008103b09
😎 Deploy Preview https://deploy-preview-19030.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 65 (🟢 up 2 from production)
Accessibility: 96 (no change from production)
Best Practices: 100 (no change from production)
SEO: 98 (no change from production)
PWA: 60 (no change from production)
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added content 🖋️ This involves copy additions or edits tooling 🔧 Changes related to tooling of the project translation 🌍 This is related to our Translation Program labels Aug 10, 2026
myelinated-wackerow and others added 13 commits August 10, 2026 16:31
The centralized exchange box pointed at the pools page root; there is no CEX page, so it now lands on that page's opaque pooled products section, which is what the box describes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Light mode `--warning` moves from yellow-400 to yellow-500, which reads better against the warning wash. Dark mode keeps yellow-300, where a lighter value is what carries on a dark background.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
The product disclaimer and the remaining markdown alerts on the pools and withdrawals pages now use AlertIcon with TriangleAlert or Clock instead of AlertEmoji, completing the move away from emoji glyphs in staking alerts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Without a `template`, the dvt page fell through to the static layout and rendered the docs table of contents. Declaring `template: staking` gives it the same ContentLayout, card ToC and shared staking dropdown as the other subpages.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
The text column and rhino image sat side by side from lg, which left the copy cramped through the lg-xl range. The row layout, its padding and the prose cap now all switch at xl.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Glossary tooltips mount client-side, but the root layout only ships `common` to the client, so every tooltip on this page rendered its raw message keys. An I18nProvider now wraps the article body (not the hero, ToC or JSON-LD) with `common` and `glossary-tooltip`; a nested provider replaces rather than merges messages, so `common` has to be re-listed or ExpandableCard loses its "More" label.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Drops the redundant lead-in above the solo comparison section, spells out the FAQ table of contents label, and removes the per-item vertical margin on product card attribute lists.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Adds two gotchas surfaced by the staking work: a nested I18nProvider replaces the outer messages instead of merging, so `common` has to be re-listed or client labels fall back to raw keys; and a markdown page without `template:` silently lands on the static layout rather than inheriting its topic siblings'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Ports the copy pass from the parallel revamp, which will close in favor of this branch: FAQ answers across the landing page's subpages, the rewritten dvt page (production DVT networks, four FAQ entries, DKG and middleware detail), and current hardware guidance on run-a-node. Adds a FAQ entry clarifying that cluster sizes are configurable rather than fixed at 3 of 4, flips EIP references to lead with a name and cite the number parenthetically, moves each page's `[Ethereum](/)` link to its first plain mention, and drops the `emoji` and `alt` frontmatter keys, which nothing reads. The dvt page keeps no hero image, so its metadata falls back to the staking section's OG image.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Brings the landing page's FAQ into line with #18741 (paragraph splits on questions 6-8, Pectra detail, a fixed "principal" typo) and, per review there, migrates every remaining `Translation` usage to `t.rich`. Link hrefs move out of the catalog strings into tag handlers -- `TooltipLink` for glossary terms, `InlineLink` otherwise -- with `link1`/`link2` where a string carries two. Non-English catalogs still hold the old `<a href>` markup and will render key tails for these strings until the intl pipeline re-translates them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
The FAQPage node declared five questions while the page rendered eight, leaving the "how much ETH", "how long" and restaking entries out of search results.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
StakingHowSoloWorks becomes an async server component reading `t`/`t.rich`, WithdrawalsTabComparison uses its existing bound translator, and StakingConsiderations renders its indicator label directly -- that one passed already-translated text back through `Translation`, which only worked because the missing-key fallback echoes the key.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
@wackerow
wackerow marked this pull request as ready for review August 17, 2026 19:39
@wackerow wackerow changed the title Staking pages redesign feat: staking pages redesign Aug 17, 2026
@wackerow

Copy link
Copy Markdown
Member

pinging @konopkja and @mnelsonBT for review

Noting the hero/Leslie images are not updated... not sure if we wanted to include that in this PR or not. cc: @nloureiro

@github-actions

Copy link
Copy Markdown
Contributor

🔎 First-pass review — ✅ Looks mergeable

Redesign of /staking and its subpages: four staking-option boxes replacing the hierarchy diagram, a new at-a-glance comparison table, page-staking migrated off Translation to t/t.rich, emoji→lucide glyphs, and the DVT/pools/saas/solo content rewrites from #18741 folded in. Lane is code + content (large app/[locale]/staking/page.tsx rewrite, shared-primitive tweaks, and heavy markdown). Lint/type-check and unit tests are green; Chromatic and the Netlify deploy are still building. The isolated shared-primitive changes hold up on a direct read — the cn.ts tailwind-merge fix correctly regroups text-h* under font-size and bg-tint/fade-* under bg-image, the AlertIcon size variant is clean tv, and the client/server boundary is handled right (clientMessages re-lists common alongside glossary-tooltip, matching the documented nested-provider gotcha). No nested-anchor trap either — the only glossary-tooltip benefit card has no href.

Nothing blocking. Two things for human reviewers to gate on before this merges, both already called out by the author:

  • Translation re-run required before launch. page-staking moved its link hrefs out of catalog strings into tag handlers, so every non-en locale renders key tails until the intl pipeline re-translates the namespace. This is a launch-coordination item, not a defect.
  • Design + technical-content signoff. It's a visual redesign, and the staking content makes dense, current claims (Pectra, EIP-7002/7870, 0x02 compounding, LSTs, opaque products) that warrant a technical-content pass. All read accurately to me, but that's above a first-pass bar.
Analysis

Checked: shared primitives (cn.ts, alert.tsx, callout.tsx, semantic-tokens.css) read directly since they fall past the 3000-line diff cap; bg-tint-staking-* resolves via the --color-staking-* tokens (present in theme.css); useStakingConsiderations — the now-unguarded pageData.map is safe (data[page] is always defined for a valid StakingPage), and the still-returned dropdownLinks is a live return field, not an unused var. Conventions: tv for new variants ✓, cn() ✓, no raw Intl.* ✓, strings translatable ✓, AlertEmoji deprecated rather than deleted ✓.

Non-blocking notes: AlertEmoji is retained (correctly) for un-migrated content; the removed StakingHierarchy component and glyph SVGs are fully cleaned up. dev base branch is correct for a feature.

Existing type labels (content / translation / tooling) all match the changed paths — none stale. Added routing labels for the humans this needs.

Generated by PR Reviewer (team) for #19030 · 229.2 AIC · ⌖ 27.8 AIC · ⊞ 5.2K ·

wackerow and others added 24 commits August 19, 2026 19:31
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
Co-Authored-By: Gemini <gemini@google.com>
The pipeline output broke the Netlify build in 72 of the 144 translated markdown files (all 24 languages x staking/pools, staking/saas, staking/solo). Three distinct artifacts, all absent from the English sources:

1. `</ExpandableCard>` emitted as a duplicate `</ButtonLink>` immediately after a self-contained `<ButtonLink>...</ButtonLink>` line, leaving every affected file exactly one `</ExpandableCard>` short. This is a recurrence of the "duplicated inner closer over a wrapper" pattern already catalogued from PR 18375, so the sanitizer gap is still open.

2. bn/staking/pools collapsed `<ExpandableCard>` opening tags and one closing tag onto content lines, turning block-level JSX into inline JSX and orphaning the closer at the next blank line. Block structure restored to match the English source.

3. ur/staking/solo nested a `<span dir="ltr">` bidi wrapper inside a JSX `description="..."` attribute, whose inner quote terminated the attribute early. Wrapper removed; the `100%` value is retained.

Verified by compiling all 144 changed files through `@mdx-js/mdx` with the site's remark/rehype plugin chain: 72 failures before, 0 after, with the 6 English sources passing as a control.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Repairs the structural damage this pipeline run did to all 24 locales, and recovers the translated strings it dropped.

Heading anchors in `developers/docs/nodes-and-clients/run-a-node/index.md` were rotated out of alignment in every locale: 33 of 44 headings carried the wrong `{#id}`, the last 11 h2-h4 headings had none at all, and four in-page links plus the sidebar TOC resolved to the wrong section in every language. The base branch and dev were both correct, so this was introduced here. Cause: the model is asked to hand-carry anchors through translation, and `extractSections()` in `incremental-translate.ts` drops unanchored headings from its index entirely (`if (customId)`), so the redesign's three new unanchored `#####` headings desynced the sequence by exactly three. Fixed by reassigning each heading the anchor of the English heading at the same index, which restores a byte-identical match to both English and the base branch.

`<Card title="...">` had reverted to English at 8 of 9 sites in all 24 locales while the `description` on the same tag stayed translated. Where the English title is unchanged since the last release the previously shipped translation is still correct, so 120 of these were restored verbatim from `origin/dev` and another 23 from the same page's own translated `h2`; only the 49 genuinely-new strings were written fresh. Japanese additionally shipped all 14 section headings of `staking/pools` and `staking/saas` in English -- six came back from `origin/dev`, the rest were translated. Image `alt` text was untranslated in all 24 locales on both files that have one; the pipeline does not extract it at all.

Hindi had 18 markdown links and inline JSX spans wrapped in backticks in `staking/saas`, which rendered them as literal code and killed every link on the page, plus a table header reverted to English. Arabic and Urdu had U+2066 isolates wrapping whole RTL frontmatter values, forcing LTR direction over Arabic and Urdu text.

Also applies the per-locale findings from the review: meaning inversions in es, fr, bn, hi, uk, ko, ta and sw (a fault-tolerance claim, EOA custody, a withdrawal condition, two risk disclosures, chain head, and three custody strings), a proof-of-work/proof-of-stake inversion in zh-tw calling Rocket Pool a mining pool, security-sense "compromise" rendered as negotiated concession in seven locales, the JWT auth token given the crypto-token glossary word in ta/zh/zh-tw, and ETHGlossary deviations across the fleet. Swahili needed the largest single fix: software `client` was rendered with the animate noun class (`mteja`, a customer) at roughly 85 sites, corrected to `kiteja`/`viteja` with concord while preserving the 27 occurrences ETHGlossary itself mandates as `mteja wa mwafaka` and `anuwai ya wateja`.

`src/intl/te/common.json` is included because the Telugu nav dropdown label read "stacking as a service"; it renders on these staking pages, and the English side has not moved so the manifest mapping stays valid.

Verified: 144/144 markdown files compile through `@mdx-js/mdx` with the site's plugin chain, all 24 JSON files parse with full key and ICU-placeholder parity, and the structural gate reports zero errors across all 168 files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Asserts the invariants the pipeline currently asks the LLM to carry and never checks.

Every recurring defect class in these imports is the same failure: something mechanically derivable from the English source was delegated to the model and then never verified. `prompt-builder.ts` tells the model to preserve components, attributes and heading anchors exactly; `output-validation.ts` checks refusals, truncation, frontmatter translation and code-fence placeholders, and nothing checks heading/anchor correspondence, JSX tag balance, component-name preservation, attribute coverage, internal-href parity, or whether the file compiles. So each run rolls dice on hundreds of structural details per file and a green run only means the dice landed well.

This compares a translated file against its English source and asserts what must hold regardless of target language: positional heading level and anchor correspondence, JSX open/close tag multisets, internal href multisets, code-fence counts, translatable-attribute coverage, image alt coverage, placeholder residue, empty `{#}` anchors, tags illegally nested inside attribute values, and for JSON, key parity plus ICU and rich-text tag parity. Meaning is never checked -- only structure.

Findings are split by severity, which is what makes it usable as a hard gate. Invariants that can never legitimately differ are errors and fail the run. Coverage heuristics are warnings, because a translation can legitimately be byte-identical to English -- "Maintenance" is a French word. A gate that false-fails gets switched off, which is how a pipeline runs a year without one.

Run against the pre-fix state of PR 19115 it reproduces every defect class that shipped, from the English source alone, with no model involved: 33 heading-anchor errors, 8 reverted attributes, 3 tag-multiset mismatches and 2 untranslated alt texts in German alone. It belongs between the sanitize and commit steps, where a bad generation costs one retry instead of a 24-locale triage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Adds known-patterns 60-65 from the PR 19115 review: positional anchor assignment desyncing when English gains an unanchored heading, translatable JSX attributes reverting to English when a block is retranslated, whole heading-block translation misses, links and JSX wrapped in backticks, bidi isolates wrapping pure-RTL frontmatter, and a methodology note on why prompt tuning cannot fix any of them.

Pattern 61 also records the recovery order that avoided a second machine-translation run: the previous release first, then an equivalent string already translated elsewhere in the same file, then the glossary. That recovered 143 of 192 lost strings in this PR at no cost.

Adds a normalization queue for defects in ETHGlossary's own term data. These matter more than per-file fixes, because the glossary is authoritative and a bad entry is re-injected on every future run -- the Telugu "stacking as a service" misspelling reached a page title and the site nav that way, and Vietnamese entries that ship capitalized guarantee mid-sentence capitals forever. It also lists the missing entries that caused real errors: no `cold storage` entry let Italian invent "refrigerated cold rooms" in a key-custody sentence, and no auth-token sense let three locales apply the crypto-token term to `jwtsecret`.

Records per-locale scores and findings for all 24 languages. Fleet average 7.8, the lowest in this series, though the prose itself held up -- numerals were digit-exact everywhere and the slashing, custody and withdrawal distinctions survived in all 24. The gap was structural.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
An unquoted YAML scalar containing ": " parses as a mapping, so `summaryPoints[2]` in ru and uk `staking/saas` became an object instead of a string and Next.js failed prerendering `/uk/staking/saas` with "Objects are not valid as a React child". English punctuates that sentence with a comma; both locales translated it as a colon, which is a legitimate stylistic choice, so the values are quoted rather than repunctuated.

The MDX compiled cleanly, which is why the first fix round missed it -- the defect lives in the frontmatter and only surfaces when React renders the value. Extends the structural gate to parse frontmatter with the same `gray-matter` the site uses and compare each field's shape against English, element-wise for arrays. Against the pre-fix content it now reports both files as errors and names the cause. Recurrence of the colon defect from PR 18868, logged as known-pattern 66.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
@@ -1,98 +1,88 @@
"use client"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could probably turn this into a sc now

Suggested change
"use client"

Comment thread src/lib/utils/cn.ts
],
},
],
"font-size": [{ text: [(value: string) => /^h[1-6]$/.test(value)] }],

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏼

"page-staking-faq-5-answer-link": "More on staking withdrawals",
"page-staking-faq-6-question": "How much ETH do I need to stake?",
"page-staking-faq-6-answer-p1": "As little as 0.01 ETH through a staking pool, or at least 32 ETH to run your own validator. A single validator can hold up to 2048 ETH: with compounding (0x02) withdrawal credentials, rewards are automatically added to your stake and you earn rewards on every whole ETH above the 32 ETH minimum.",
"page-staking-faq-6-answer-p2": "You can participate with less. Bonded node operation lets you run validators on your own hardware for a staking protocol with a bond of roughly 1.5–4 ETH, and staking pools accept almost any amount, some as little as 0.01 ETH.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p1 already gives the 0.01 ETH pool floor, so "You can participate with less" reads as less than that, and the closing clause repeats it. The only new info here is the 1.5–4 ETH bond.

}),
t.rich("page-staking-section-comparison-solo-requirements-li3", {
a: (chunks) => (
<InlineLink href="https://hoodi.launchpad.ethereum.org">

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one's hardcoded, but StakingLaunchpadWidget builds the same URL from CANONICAL_STAKING_TESTNET. Next testnet rotation will update the widget and leave this link on a dead host.

- **`config.hubHero`** — Swap `PageHero` for `HubHero` on a specific slug (used by Roadmap on `/roadmap/`). Declarative; lives in the topic config.
- **`config.editBanner`** — Render the top-of-page "edit this page" banner on every page in the topic. Used by UseCases and AiAgents. Per-page opt-out via frontmatter `hideEditBanner: true` if a specific page needs to suppress.
- **`afterContent` prop** — Render arbitrary JSX after the markdown content. Used by Staking for its community callout. Passed by the slug router for the one or two topics that need it. If you find yourself wanting a *third* `afterContent` consumer, consider promoting it to `config.afterContent` (still keyed by topic data).
- **`afterContent` prop** — Render arbitrary JSX after the markdown content. Used by Staking for its community callout. Passed by the slug router for the one or two topics that need it. If you find yourself wanting a _third_ `afterContent` consumer, consider promoting it to `config.afterContent` (still keyed by topic data).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR removes the only afterContent implementation (the callout moved into the markdown), so this is now describing code that's gone. Same for the slot list up at line 28 and cleanup-playbook.md:464. While in here, a11y.md:36 still lists StakingHierarchy, which this PR deletes.

i18n: translation pipeline (staking pages)
@pettinarip
pettinarip merged commit a980151 into dev Aug 20, 2026
12 of 13 checks passed
@pettinarip
pettinarip deleted the staking-redesign branch August 20, 2026 11:30
@pettinarip pettinarip mentioned this pull request Aug 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

content 🖋️ This involves copy additions or edits tooling 🔧 Changes related to tooling of the project translation 🌍 This is related to our Translation Program

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants