Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
afa717d
page setup
corwintines Sep 9, 2025
51c0522
Implement sections for what-is-ethereum-network
corwintines Sep 10, 2025
b26d637
finish content
corwintines Sep 11, 2025
2c3e041
nav bar
corwintines Sep 11, 2025
f07cf76
init translations
corwintines Sep 11, 2025
f39f547
translations
corwintines Sep 11, 2025
02adc8f
/what-is-ethereum-network -> /what-is-the-ethereum-network
corwintines Sep 15, 2025
0f09f7b
Update src/intl/en/common.json
corwintines Sep 15, 2025
fd5fd4b
add production environment conditional to contributors.ts for FileCon…
corwintines Sep 15, 2025
660debe
abstract out LinkWithArrow
corwintines Sep 15, 2025
5198ae7
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 15, 2025
581381b
Merge branch 'dev' into what-is-ethereum-network
corwintines Sep 15, 2025
92e5df8
update TableOfContents variant based off dev refactor
corwintines Sep 15, 2025
3843f1b
Merge branch 'what-is-ethereum-network' of https://github.com/ethereu…
corwintines Sep 15, 2025
af3e7d5
refactor: replace Card components with CommentCard for consistency in…
corwintines Sep 16, 2025
63abc4b
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
3503042
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
7399baa
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
28adbdd
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
d86d6fe
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
3f2d4c6
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
b47aaa9
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
36edbbd
Update src/intl/en/page-what-is-ethereum-network.json
corwintines Sep 16, 2025
a1fa7c1
refactor: update namespace and improve image handling in Ethereum net…
corwintines Sep 16, 2025
6c469fc
Merge remote-tracking branch 'origin/what-is-ethereum-network' into w…
corwintines Sep 16, 2025
b9b04a0
fix: correct label key for Ethereum network in navigation and update …
corwintines Sep 18, 2025
8e68bb1
Merge branch 'dev' into what-is-ethereum-network
corwintines Sep 18, 2025
8007548
feat: add JSON-LD structured data component for Ethereum network page
corwintines Sep 18, 2025
adb3626
Update src/intl/en/page-what-is-the-ethereum-network.json
corwintines Sep 19, 2025
a5a5134
refactor: replace anchor tags with Link component for improved naviga…
corwintines Sep 19, 2025
f6ffc6f
some content cleanup
corwintines Sep 19, 2025
a77f7b9
Merge branch 'dev' into what-is-ethereum-network
wackerow Sep 22, 2025
09075b9
refactor: inline named export
wackerow Sep 22, 2025
552471f
chore: apply suggestions from code review
wackerow Sep 22, 2025
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
22 changes: 6 additions & 16 deletions app/[locale]/founders/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { getTranslations } from "next-intl/server"

import type { CommitHistory, Lang, SectionNavDetails } from "@/lib/types"

import CommentCard from "@/components/CommentCard"
import ContentHero from "@/components/Hero/ContentHero"
import { CheckCircle } from "@/components/icons/CheckCircle"
import MainArticle from "@/components/MainArticle"
Expand Down Expand Up @@ -509,27 +510,16 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

<div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
{stories.map(({ name, affiliation, content, className }) => (
<Card
<CommentCard
key={name}
description={content}
name={name}
title={affiliation}
className={cn(
"h-fit space-y-1 rounded-2xl border bg-background p-6",
className
)}
>
<div className="space-y-6">{content}</div>
<div className="flex items-center gap-x-2">
<div
data-label="avatar"
className="grid size-8 place-items-center rounded-full text-body-inverse"
>
{name[0].toUpperCase()}
</div>
<div>
<p className="font-bold">{name}</p>
<p className="text-sm text-body-medium">{affiliation}</p>
</div>
</div>
</Card>
/>
))}
</div>
</Section>
Expand Down
23 changes: 3 additions & 20 deletions app/[locale]/what-is-ethereum/page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import {
ArrowRight,
Castle,
Landmark,
LockKeyhole,
Shield,
SquareCode,
User,
} from "lucide-react"
import { getLocale, getTranslations } from "next-intl/server"
import { getTranslations } from "next-intl/server"

import type { CommitHistory, Lang, ToCItem } from "@/lib/types"

Expand All @@ -22,13 +21,12 @@ import MainArticle from "@/components/MainArticle"
import TableOfContents from "@/components/TableOfContents"
import { ButtonLink } from "@/components/ui/buttons/Button"
import { Card, CardContent, CardTitle } from "@/components/ui/card"
import Link, { LinkProps } from "@/components/ui/Link"
import Link, { LinkWithArrow } from "@/components/ui/Link"
import { ListItem, OrderedList, UnorderedList } from "@/components/ui/list"
import { Section } from "@/components/ui/section"

import { cn } from "@/lib/utils/cn"
import { getAppPageContributorInfo } from "@/lib/utils/contributors"
import { getDirection } from "@/lib/utils/direction"
import { getMetadata } from "@/lib/utils/metadata"
import { screens } from "@/lib/utils/screen"

Expand Down Expand Up @@ -86,21 +84,6 @@ const HighlightCardContent = ({
<div className={cn("space-y-6 text-body-medium", className)} {...props} />
)

const LinkWithArrow = async ({ href, className, children }: LinkProps) => {
const locale = await getLocale()
const { twFlipForRtl } = getDirection(locale as Lang)
return (
<Link
href={href}
className={cn("group block w-fit no-underline", className)}
>
<ArrowRight className={cn("mb-1 inline size-[1em]", twFlipForRtl)} />
&nbsp;
<span className="group-hover:underline">{children}</span>
</Link>
)
}

const Page = async ({ params }: { params: { locale: Lang } }) => {
const { locale } = params
const t = await getTranslations({
Expand Down Expand Up @@ -353,7 +336,7 @@ const Page = async ({ params }: { params: { locale: Lang } }) => {
</div>
</div>

<LinkWithArrow href="/layer-2/networks/">
<LinkWithArrow href="/what-is-the-ethereum-network/">
{t("page-what-is-ethereum-network-learn-more")}
</LinkWithArrow>
</Section>
Expand Down
125 changes: 125 additions & 0 deletions app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import { getTranslations } from "next-intl/server"

import { FileContributor, Lang } from "@/lib/types"

import PageJsonLD from "@/components/PageJsonLD"

import { normalizeUrlForJsonLd } from "@/lib/utils/url"

export default async function WhatIsTheEthereumNetworkPageJsonLD({
locale,
lastEditLocaleTimestamp,
contributors,
}: {
locale: Lang | undefined
lastEditLocaleTimestamp: string
contributors: FileContributor[]
}) {
const t = await getTranslations({
namespace: "page-what-is-the-ethereum-network",
})

const url = normalizeUrlForJsonLd(locale, `/what-is-the-ethereum-network/`)

const contributorList = contributors.map((contributor) => ({
"@type": "Person",
name: contributor.login,
url: contributor.html_url,
}))

// JSON-LD structured data for the What is the Ethereum Network page
const webPageJsonLd = {
"@context": "https://schema.org",
"@type": "WebPage",
"@id": url,
name: t("page-what-is-ethereum-network-meta-title"),
description: t("page-what-is-ethereum-network-meta-description"),
url: url,
inLanguage: locale,
contributor: contributorList,
author: [
{
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
},
],
breadcrumb: {
"@type": "BreadcrumbList",
itemListElement: [
{
"@type": "ListItem",
position: 1,
name: "Home",
item: normalizeUrlForJsonLd(locale, "/"),
},
{
"@type": "ListItem",
position: 2,
name: "Learn",
item: normalizeUrlForJsonLd(locale, "/learn/"),
},
{
"@type": "ListItem",
position: 3,
name: t("page-what-is-ethereum-network-meta-title"),
item: url,
},
],
},
publisher: {
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
},
reviewedBy: {
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
logo: {
"@type": "ImageObject",
url: "https://ethereum.org/images/eth-home-icon.png",
},
},
}

// JSON-LD for the ethereum network article content
const articleJsonLd = {
"@context": "https://schema.org",
"@type": "Article",
headline: t("page-what-is-ethereum-network-title"),
description: t("page-what-is-ethereum-network-meta-description"),
image: "https://ethereum.org/images/what-is-ethereum-network.png",
author: [
{
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
},
],
publisher: {
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
},
contributor: contributorList,
reviewedBy: {
"@type": "Organization",
name: "ethereum.org",
url: "https://ethereum.org",
logo: {
"@type": "ImageObject",
url: "https://ethereum.org/images/eth-home-icon.png",
},
},
about: {
"@type": "Thing",
name: "Ethereum Network",
description:
"Comprehensive guide to the Ethereum network, including fees, staking, layer 2 solutions, and live network data",
},
dateModified: lastEditLocaleTimestamp,
}

return <PageJsonLD structuredData={[webPageJsonLd, articleJsonLd]} />
}
Loading