diff --git a/.all-contributorsrc b/.all-contributorsrc index 414e0b25446..1f7c7ee9a70 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -479,7 +479,8 @@ "avatar_url": "https://avatars3.githubusercontent.com/u/70360?v=4", "profile": "https://www.zastrin.com", "contributions": [ - "content" + "content", + "fundingFinding" ] }, { @@ -6146,7 +6147,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/4249432?v=4", "profile": "https://github.com/LingTian", "contributions": [ - "content" + "content", + "eventOrganizing" ] }, { @@ -8026,7 +8028,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/1029908?v=4", "profile": "https://github.com/nikashitsa", "contributions": [ - "bug" + "bug", + "maintenance" ] }, { @@ -8769,7 +8772,8 @@ "contributions": [ "ideas", "code", - "bug" + "bug", + "maintenance" ] }, { @@ -10278,7 +10282,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/125178349?v=4", "profile": "https://github.com/BBashh", "contributions": [ - "content" + "content", + "ideas" ] }, { @@ -10560,7 +10565,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/36084092?v=4", "profile": "https://ilanolkies.com", "contributions": [ - "content" + "content", + "maintenance" ] }, { @@ -12998,7 +13004,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/98899785?v=4", "profile": "https://mdqst.com", "contributions": [ - "bug" + "bug", + "maintenance" ] }, { @@ -13025,7 +13032,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/14212780?v=4", "profile": "https://github.com/jorgesumle", "contributions": [ - "bug" + "bug", + "maintenance" ] }, { @@ -13216,6 +13224,170 @@ "contributions": [ "maintenance" ] + }, + { + "login": "hexcow", + "name": "hexcow", + "avatar_url": "https://avatars.githubusercontent.com/u/200669683?v=4", + "profile": "https://github.com/hexcow", + "contributions": [ + "bug" + ] + }, + { + "login": "dlr-a", + "name": "dlr-a", + "avatar_url": "https://avatars.githubusercontent.com/u/116620647?v=4", + "profile": "https://github.com/dlr-a", + "contributions": [ + "content", + "maintenance" + ] + }, + { + "login": "trocher", + "name": "trocher", + "avatar_url": "https://avatars.githubusercontent.com/u/43437004?v=4", + "profile": "http://trocher.ch", + "contributions": [ + "content" + ] + }, + { + "login": "Daulox92", + "name": "CrazyFrog", + "avatar_url": "https://avatars.githubusercontent.com/u/188603830?v=4", + "profile": "https://github.com/Daulox92", + "contributions": [ + "maintenance" + ] + }, + { + "login": "ryangoree", + "name": "Ryan Goree", + "avatar_url": "https://avatars.githubusercontent.com/u/3289505?v=4", + "profile": "http://gists.github.com/ryangoree", + "contributions": [ + "maintenance", + "code" + ] + }, + { + "login": "yansq", + "name": "Siqi Yan", + "avatar_url": "https://avatars.githubusercontent.com/u/26108404?v=4", + "profile": "https://github.com/yansq", + "contributions": [ + "bug" + ] + }, + { + "login": "famouswizard", + "name": "wizard", + "avatar_url": "https://avatars.githubusercontent.com/u/112275929?v=4", + "profile": "https://github.com/famouswizard", + "contributions": [ + "maintenance" + ] + }, + { + "login": "barajeel", + "name": "Barajeel", + "avatar_url": "https://avatars.githubusercontent.com/u/185210158?v=4", + "profile": "https://zksec.io", + "contributions": [ + "maintenance" + ] + }, + { + "login": "Heartade", + "name": "Daniel Soohan Park", + "avatar_url": "https://avatars.githubusercontent.com/u/24813078?v=4", + "profile": "https://blog.heartade.dev", + "contributions": [ + "bug" + ] + }, + { + "login": "santamasa", + "name": "santamasa", + "avatar_url": "https://avatars.githubusercontent.com/u/185351323?v=4", + "profile": "http://santamasa.github.io", + "contributions": [ + "bug" + ] + }, + { + "login": "SamarthJ2004", + "name": "Samarth Jindal", + "avatar_url": "https://avatars.githubusercontent.com/u/147060088?v=4", + "profile": "https://github.com/SamarthJ2004", + "contributions": [ + "code" + ] + }, + { + "login": "AndrejZelonka", + "name": "Andrej Želonka", + "avatar_url": "https://avatars.githubusercontent.com/u/64598949?v=4", + "profile": "https://github.com/AndrejZelonka", + "contributions": [ + "tool" + ] + }, + { + "login": "maximevtush", + "name": "Maxim Evtush", + "avatar_url": "https://avatars.githubusercontent.com/u/154841002?v=4", + "profile": "https://github.com/maximevtush", + "contributions": [ + "maintenance" + ] + }, + { + "login": "lipperhey", + "name": "lipperhey", + "avatar_url": "https://avatars.githubusercontent.com/u/185240929?v=4", + "profile": "https://github.com/lipperhey", + "contributions": [ + "maintenance" + ] + }, + { + "login": "zkpepe", + "name": "zkpepe", + "avatar_url": "https://avatars.githubusercontent.com/u/202324721?v=4", + "profile": "https://github.com/zkpepe", + "contributions": [ + "bug" + ] + }, + { + "login": "nijr", + "name": "nijr", + "avatar_url": "https://avatars.githubusercontent.com/u/200988320?v=4", + "profile": "https://github.com/nijr", + "contributions": [ + "maintenance" + ] + }, + { + "login": "fredrik0x", + "name": "Fredrik", + "avatar_url": "https://avatars.githubusercontent.com/u/84518844?v=4", + "profile": "https://github.com/fredrik0x", + "contributions": [ + "maintenance" + ] + }, + { + "login": "wdpatti", + "name": "Will Patti", + "avatar_url": "https://avatars.githubusercontent.com/u/79338554?v=4", + "profile": "https://github.com/wdpatti", + "contributions": [ + "tool" + ] } ], "contributorsPerLine": 7, diff --git a/.github/ISSUE_TEMPLATE/suggest_dapp.yaml b/.github/ISSUE_TEMPLATE/suggest_dapp.yaml deleted file mode 100644 index 960b3df2137..00000000000 --- a/.github/ISSUE_TEMPLATE/suggest_dapp.yaml +++ /dev/null @@ -1,116 +0,0 @@ -name: Suggest a dapp -description: Suggest a new dapp to list on ethereum.org -title: Suggest a dapp -labels: ["product 🧰"] -body: - - type: markdown - attributes: - value: | - Before suggesting a dapp, make sure you've read [our listing policy](https://www.ethereum.org/contributing/adding-products/). - - type: markdown - attributes: - value: Only continue with the issue if your dapp meets the criteria listed there. - - type: markdown - attributes: - value: If it does, complete the following information which we need to accurately list the dapp. - - type: markdown - id: dapp_info - attributes: - value: "## Dapp info" - - type: input - id: dapp_name - attributes: - label: Name - description: Please provide the official name of the dapp - validations: - required: true - - type: input - id: dapp_url - attributes: - label: Dapp URL - description: Please provide a URL to the dapp - validations: - required: true - - type: textarea - id: dapp_description - attributes: - label: Description - description: Please provide a short 1-2 sentence description of the dapp - validations: - required: true - - type: textarea - id: dapp_logo - attributes: - label: Logo - description: | - Please provide an SVG or hi-res transparent PNG - Tip: You can attach images by clicking this area to highlight it and then dragging files in. - validations: - required: true - - type: input - id: dapp_brand_color - attributes: - label: Brand color - description: Please provide the hex code for the brand color - validations: - required: true - - type: dropdown - id: dapp_open_source - attributes: - label: Is your dapp open source? - description: Can community developers open PRs against the repo? Is your smart contract available for other developers to use? - options: - - "Yes" - - "No" - validations: - required: true - - type: input - id: dapp_source_code - attributes: - label: If open source, what is the repo for the dapp? - - type: textarea - id: dapp_security - attributes: - label: Please describe the measures taken to ensure the dapp's security and provide documentation wherever possible - description: Please provide a link to a report or repo. If you haven't been audited but think your dapp should be listed anyway, explain here - validations: - required: true - - type: textarea - id: dapp_account - attributes: - label: Can a user access the dapp without creating an account? - description: Can a user simply connect their Ethereum address? If not, explain the process - validations: - required: true - - type: textarea - id: dapp_custodial - attributes: - label: Are dapp funds non-custodial? - description: If your product frontend disappears, can users still access and move their funds? - validations: - required: true - - type: textarea - id: dapp_support - attributes: - label: Do you offer community support? - description: Please let us know about any Discord servers or other means of providing support to users - validations: - required: true - - type: textarea - id: dapp_restrictions - attributes: - label: Describe any geographical restrictions on usage of your dapp - description: Is usage globally accessible, or do you have restrictions? - validations: - required: true - - type: checkboxes - id: dapp_work_on - attributes: - label: Would you like to work on this issue? - options: - - label: "Yes" - required: false - - label: "No" - required: false - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/suggest_layer2.yaml b/.github/ISSUE_TEMPLATE/suggest_layer2.yaml index 46dd1c259b2..638e06c8c08 100644 --- a/.github/ISSUE_TEMPLATE/suggest_layer2.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_layer2.yaml @@ -100,7 +100,7 @@ body: id: layer_2_dapp_ecosystem attributes: label: Link to dapp ecosystem (if applicable) - description: "Please provide a link to the dapp ecosystem. (ex: https://portal.arbitrum.io/, https://www.optimism.io/apps)" + description: "Please provide a link to the dapp ecosystem. (ex: https://portal.arbitrum.io/)" - type: input id: layer_2_token_contract_list attributes: diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 93914a58472..3e5d49d0c00 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -17,7 +17,7 @@ jobs: # Job steps steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 # Tells the checkout which commit hash to reference diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index afd22a73d67..c8814674ba7 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -41,7 +41,7 @@ jobs: id-token: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 @@ -49,4 +49,4 @@ jobs: uses: anthropics/claude-code-action@beta with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} - timeout_minutes: "60" \ No newline at end of file + timeout_minutes: "60" diff --git a/.github/workflows/crowdin-ci.yml b/.github/workflows/crowdin-ci.yml index 29a7e66e445..d29cca5f58f 100644 --- a/.github/workflows/crowdin-ci.yml +++ b/.github/workflows/crowdin-ci.yml @@ -16,7 +16,7 @@ jobs: steps: # Set up environment - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 diff --git a/.github/workflows/generate-review-report.yml b/.github/workflows/generate-review-report.yml index dffaf59215b..6a69a604d53 100644 --- a/.github/workflows/generate-review-report.yml +++ b/.github/workflows/generate-review-report.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 @@ -37,4 +37,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: output - path: ./src/data/crowdin/bucketsAwaitingReviewReport.csv \ No newline at end of file + path: ./src/data/crowdin/bucketsAwaitingReviewReport.csv diff --git a/.github/workflows/get-crowdin-contributors.yml b/.github/workflows/get-crowdin-contributors.yml index 4c0600d9dd6..3c755c707e4 100644 --- a/.github/workflows/get-crowdin-contributors.yml +++ b/.github/workflows/get-crowdin-contributors.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 diff --git a/.github/workflows/get-leaderboard-reports.yml b/.github/workflows/get-leaderboard-reports.yml index 9f72dca61a0..4ff8374e01d 100644 --- a/.github/workflows/get-leaderboard-reports.yml +++ b/.github/workflows/get-leaderboard-reports.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 diff --git a/.github/workflows/get-translation-progress.yml b/.github/workflows/get-translation-progress.yml index 79c58555110..57c327542f9 100644 --- a/.github/workflows/get-translation-progress.yml +++ b/.github/workflows/get-translation-progress.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 diff --git a/.github/workflows/lighthouse-ci.yml b/.github/workflows/lighthouse-ci.yml index a217347d9b6..079d0a37a9a 100644 --- a/.github/workflows/lighthouse-ci.yml +++ b/.github/workflows/lighthouse-ci.yml @@ -15,7 +15,7 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Sleep for 60 minutes run: sleep 3600 - name: Wait for Netlify Deploy diff --git a/.github/workflows/lychee-cron.yml b/.github/workflows/lychee-cron.yml index d1c78dff7ad..3a522129780 100644 --- a/.github/workflows/lychee-cron.yml +++ b/.github/workflows/lychee-cron.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 ref: dev diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 58ae05e5485..ddff3f9f70b 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -10,7 +10,7 @@ jobs: env: CI: true steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Wait for Netlify Deploy id: netlify_deploy @@ -51,7 +51,7 @@ jobs: needs: playwright runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - uses: actions/setup-node@v4 diff --git a/.github/workflows/update-chains.yml b/.github/workflows/update-chains.yml index a3571c39992..edd4a08d54e 100644 --- a/.github/workflows/update-chains.yml +++ b/.github/workflows/update-chains.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v2 @@ -44,4 +44,4 @@ jobs: base: dev title: Update chains data body: Automated update of chains data from https://chainid.network/chains.json - labels: update 🔄 \ No newline at end of file + labels: update 🔄 diff --git a/README.md b/README.md index be53dcd9edb..40107ef4491 100644 --- a/README.md +++ b/README.md @@ -285,7 +285,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Kendall Cole
Kendall Cole

🖋 Brendan Lee
Brendan Lee

🖋 - Mahesh Murthy
Mahesh Murthy

🖋 + Mahesh Murthy
Mahesh Murthy

🖋 🔍 Patrick Gallagher
Patrick Gallagher

🖋 Ali Abbas
Ali Abbas

🖋 wtf
wtf

💻 👀 🚇 @@ -1063,7 +1063,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Nicola Bonsi
Nicola Bonsi

🤔 Yusuf Elnady
Yusuf Elnady

🖋 Aryan Keluskar
Aryan Keluskar

💻 - Ling
Ling

🖋 + Ling
Ling

🖋 📋 Søren Rood
Søren Rood

💻 📖 🤔 @@ -1322,7 +1322,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Deyan Shotev
Deyan Shotev

💻 Pranesh A S
Pranesh A S

📖 🐛 shir22
shir22

📖 🐛 - Nikita Verkhovin
Nikita Verkhovin

🐛 + Nikita Verkhovin
Nikita Verkhovin

🐛 🚧 Pushkar Verma
Pushkar Verma

📖 🤔 Vincent Weisser
Vincent Weisser

📖 @@ -1423,7 +1423,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Carl Lippert
Carl Lippert

📖 Tymek Majewski
Tymek Majewski

📖 Cryptolibertarian.id
Cryptolibertarian.id

📖 - browny
browny

🤔 💻 🐛 + browny
browny

🤔 💻 🐛 🚧 Marius Kjærstad
Marius Kjærstad

🤔 @@ -1637,7 +1637,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d neodaoist
neodaoist

🖋 Atharva Deosthale
Atharva Deosthale

🖋 Kartik Chopra
Kartik Chopra

🖋 - Bibash Tandon
Bibash Tandon

🖋 + Bibash Tandon
Bibash Tandon

🖋 🤔 Vaibhav Tevatia
Vaibhav Tevatia

💻 cnn-rnn
cnn-rnn

🤔 @@ -1678,7 +1678,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Bilal
Bilal

🖋 - Ilan
Ilan

🖋 + Ilan
Ilan

🖋 🚧 umede
umede

🖋 Tamino
Tamino

🖋 Katherine Champagne
Katherine Champagne

🖋 @@ -2021,10 +2021,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Reppelin Tom
Reppelin Tom

🔧 - Dmitry
Dmitry

🐛 + Dmitry
Dmitry

🐛 🚧 Sephiroth
Sephiroth

🔧 Ilya Smiyukha
Ilya Smiyukha

🚧 - Jorge
Jorge

🐛 + Jorge
Jorge

🐛 🚧 Crypto Delirium
Crypto Delirium

🖋 AK
AK

🚧 @@ -2052,6 +2052,30 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d shynur
shynur

🌍 David7877
David7877

🔧 Enes Kerem AYDIN
Enes Kerem AYDIN

🚧 + hexcow
hexcow

🐛 + dlr-a
dlr-a

🖋 🚧 + + + trocher
trocher

🖋 + CrazyFrog
CrazyFrog

🚧 + Ryan Goree
Ryan Goree

🚧 💻 + Siqi Yan
Siqi Yan

🐛 + wizard
wizard

🚧 + Barajeel
Barajeel

🚧 + Daniel Soohan Park
Daniel Soohan Park

🐛 + + + santamasa
santamasa

🐛 + Samarth Jindal
Samarth Jindal

💻 + Andrej Želonka
Andrej Želonka

🔧 + Maxim Evtush
Maxim Evtush

🚧 + lipperhey
lipperhey

🚧 + zkpepe
zkpepe

🐛 + nijr
nijr

🚧 + + + Fredrik
Fredrik

🚧 + Will Patti
Will Patti

🔧 diff --git a/app/[locale]/10years/page-jsonld.tsx b/app/[locale]/10years/page-jsonld.tsx new file mode 100644 index 00000000000..1ec697cab94 --- /dev/null +++ b/app/[locale]/10years/page-jsonld.tsx @@ -0,0 +1,143 @@ +import { getTranslations } from "next-intl/server" + +import { FileContributor } from "@/lib/types" + +import PageJsonLD from "@/components/PageJsonLD" + +import { normalizeUrlForJsonLd } from "@/lib/utils/url" + +export default async function TenYearJsonLD({ + locale, + contributors, +}: { + locale: string + contributors: FileContributor[] +}) { + const t = await getTranslations({ + namespace: "page-10-year-anniversary", + }) + + const url = normalizeUrlForJsonLd(locale, "/10years/") + + const contributorList = contributors.map((contributor) => ({ + "@type": "Person", + name: contributor.login, + url: contributor.html_url, + })) + + const webPageJsonLd = { + "@context": "https://schema.org", + "@type": "WebPage", + "@id": url, + name: t("page-10-year-anniversary-meta-title"), + description: t("page-10-year-anniversary-meta-description"), + url: url, + inLanguage: locale, + author: [ + { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + }, + ], + contributor: contributorList, + breadcrumb: { + "@type": "BreadcrumbList", + itemListElement: [ + { + "@type": "ListItem", + position: 1, + name: "Home", + item: normalizeUrlForJsonLd(locale, "/"), + }, + { + "@type": "ListItem", + position: 2, + name: t("page-10-year-anniversary-meta-title"), + item: url, + }, + ], + }, + publisher: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + logo: { + "@type": "ImageObject", + url: "https://ethereum.org/assets/eth-logo.png", + width: "256", + height: "417", + }, + }, + reviewedBy: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + logo: { + "@type": "ImageObject", + url: "https://ethereum.org/images/eth-home-icon.png", + }, + }, + mainEntity: { + "@type": "Event", + "@id": `${url}#ethereum-10-year-anniversary`, + }, + } + + const eventJsonLd = { + "@context": "https://schema.org", + "@type": "Event", + "@id": `${url}#ethereum-10-year-anniversary`, + name: t("page-10-year-anniversary-meta-title"), + description: t("page-10-year-anniversary-meta-description"), + startDate: "2024-07-30", + endDate: "2024-07-30", + eventStatus: "https://schema.org/EventCompleted", + eventAttendanceMode: "https://schema.org/OnlineEventAttendanceMode", + url: url, + organizer: { + "@type": "Organization", + name: "Ethereum Foundation", + url: "https://ethereum.org", + }, + location: { + "@type": "VirtualLocation", + url: url, + }, + image: { + "@type": "ImageObject", + url: "https://ethereum.org/assets/10-years/10-years-hero.png", + width: "1200", + height: "630", + }, + } + + const videoJsonLd = { + "@context": "https://schema.org", + "@type": "VideoObject", + name: "Ethereum: 10 Years Anniversary", + description: t("page-10-year-anniversary-meta-description"), + thumbnailUrl: "https://i.ytimg.com/vi/gjwr-7PgpTC/maxresdefault.jpg", + uploadDate: "2024-07-30", + duration: "PT5M30S", + embedUrl: "https://www.youtube.com/embed/gjwr-7PgpTC", + publisher: { + "@type": "Organization", + name: "Ethereum Foundation", + 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", + }, + }, + } + + return ( + + ) +} diff --git a/app/[locale]/10years/page.tsx b/app/[locale]/10years/page.tsx index 45b105d83e7..c151534fee7 100644 --- a/app/[locale]/10years/page.tsx +++ b/app/[locale]/10years/page.tsx @@ -5,7 +5,7 @@ import { setRequestLocale, } from "next-intl/server" -import type { Lang } from "@/lib/types" +import type { CommitHistory, Lang } from "@/lib/types" import Emoji from "@/components/Emoji" import I18nProvider from "@/components/I18nProvider" @@ -18,6 +18,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import YouTube from "@/components/YouTube" import { cn } from "@/lib/utils/cn" +import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { dataLoader } from "@/lib/utils/data/dataLoader" import { getMetadata } from "@/lib/utils/metadata" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" @@ -39,6 +40,7 @@ import { getInnovationCards, parseStoryDates, } from "./_components/utils" +import TenYearJsonLD from "./page-jsonld" import { routing } from "@/i18n/routing" import { fetch10YearEvents } from "@/lib/api/fetch10YearEvents" @@ -110,309 +112,319 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { (holder) => !isAddressFiltered(holder.address) ) + const commitHistoryCache: CommitHistory = {} + const { contributors } = await getAppPageContributorInfo( + "10years", + locale as Lang, + commitHistoryCache + ) + return ( - - - -
-
-
-

- {t("page-10-year-hero-title")} -

-
+ <> + + + + +
+
+
+

+ {t("page-10-year-hero-title")} +

+
-
-

{t("page-10-year-hero-description")}

-

{t("page-10-year-hero-tagline")}

+
+

{t("page-10-year-hero-description")}

+

{t("page-10-year-hero-tagline")}

+
+
+
+
-
- -
-
-
-
-
-

- {t("page-10-year-livestream-title")} -

+
+
+
+

+ {t("page-10-year-livestream-title")} +

+
+
-
-
- -
-
- - - {Object.entries(fetched10YearEvents).map(([key, data]) => ( - - {data.label}  - ({data.events.length}) - - ))} - - {Object.entries(fetched10YearEvents).map(([key, data]) => { - const events = data.events.sort((a, b) => - a.country.localeCompare(b.country) - ) - const eventsByCountry = events.reduce( - (acc, event) => { - if (!acc[event.country]) { - acc[event.country] = [] - } - acc[event.country].push(event) - return acc - }, - {} as Record - ) - - return ( - -
- {Object.entries(eventsByCountry).map( - ([country, countryEvents]) => ( -
-

- - - - {country} -

-
- {countryEvents.map((event, index) => ( - -
-
- - {event.city} - -
-
- {event.host} -
-
- +
+ + + {Object.entries(fetched10YearEvents).map(([key, data]) => ( + + {data.label}  + ({data.events.length}) + + ))} + + {Object.entries(fetched10YearEvents).map(([key, data]) => { + const events = data.events.sort((a, b) => + a.country.localeCompare(b.country) + ) + const eventsByCountry = events.reduce( + (acc, event) => { + if (!acc[event.country]) { + acc[event.country] = [] + } + acc[event.country].push(event) + return acc + }, + {} as Record + ) + + return ( + +
+ {Object.entries(eventsByCountry).map( + ([country, countryEvents]) => ( +
+

+ + + + {country} +

+
+ {countryEvents.map((event, index) => ( + - {t("page-10-year-event-link")} - - - ))} +
+
+ + {event.city} + +
+
+ {event.host} +
+
+ + {t("page-10-year-event-link")} + + + ))} +
-
- ) - )} -
- - ) - })} - + ) + )} +
+ + ) + })} + +
-
- -
-
-
-
-
-