diff --git a/app/robots.ts b/app/robots.ts new file mode 100644 index 00000000000..41482c55da6 --- /dev/null +++ b/app/robots.ts @@ -0,0 +1,28 @@ +import type { MetadataRoute } from "next" + +import { SITE_URL } from "@/lib/constants" + +export default function robots(): MetadataRoute.Robots { + let hostname = "" + try { + hostname = new URL(SITE_URL).hostname + } catch (error) { + console.error("Error getting hostname", error) + } + + const isProduction = hostname === "ethereum.org" + + if (!isProduction) { + return { + rules: [{ userAgent: "*", disallow: "/" }], + sitemap: [], + host: SITE_URL, + } + } + + return { + rules: [{ userAgent: "*", allow: "/" }], + sitemap: [`${SITE_URL}/sitemap.xml`], + host: SITE_URL, + } +} diff --git a/next-sitemap.config.js b/next-sitemap.config.js index daeba00e0d0..f669e865ff7 100644 --- a/next-sitemap.config.js +++ b/next-sitemap.config.js @@ -5,8 +5,7 @@ const defaultLocale = "en" /** @type {import('next-sitemap').IConfig} */ module.exports = { - siteUrl: process.env.SITE_URL || "https://ethereum.org", - generateRobotsTxt: true, + siteUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://ethereum.org", transform: async (_, path) => { const rootPath = path.split("/")[1] if (path.endsWith("/404")) return null diff --git a/public/content/ethereum-forks/index.md b/public/content/ethereum-forks/index.md index 0959357fbe0..03ee0a240b0 100644 --- a/public/content/ethereum-forks/index.md +++ b/public/content/ethereum-forks/index.md @@ -73,6 +73,12 @@ Looking for future protocol upgrades? [Learn about upcoming upgrades on the Ethe ## 2025 {#2025} +### Fulu-Osaka ("Fusaka", _in progress_) {#fusaka} + + + +[More on Fusaka](/roadmap/fusaka/) + ### Prague-Electra ("Pectra") {#pectra} diff --git a/src/data/networkUpgradeSummaryData.ts b/src/data/networkUpgradeSummaryData.ts index 8325faf617b..8b39b45d27c 100644 --- a/src/data/networkUpgradeSummaryData.ts +++ b/src/data/networkUpgradeSummaryData.ts @@ -1,6 +1,12 @@ import type { NetworkUpgradeData } from "@/lib/types" const networkUpgradeSummaryData: NetworkUpgradeData = { + fusaka: { + dateTimeAsString: "2025-12-03T21:49:11.000Z", + epochNumber: 411392, + slotNumber: 411392 * 32, + isPending: true, + }, pectra: { dateTimeAsString: "2025-05-07T10:05:11.000Z", ethPriceInUSD: 2222, diff --git a/src/data/roadmap/releases.tsx b/src/data/roadmap/releases.tsx index 5b6f6eab212..3e288be7349 100644 --- a/src/data/roadmap/releases.tsx +++ b/src/data/roadmap/releases.tsx @@ -10,7 +10,8 @@ import PectraImage from "@/public/images/roadmap/roadmap-pectra.png" type TranslationFunction = (key: string) => string type DateString = - `2${number}${number}${number}-${number}${number}-${number}${number}` + | `2${number}${number}${number}-${number}${number}-${number}${number}` + | `${number}${number}${number}${number}-${number}${number}-${number}${number}T${number}${number}:${number}${number}:${number}${number}.${number}${number}${number}Z` type YearString = `2${number}${number}${number}` interface BaseRelease { @@ -143,7 +144,7 @@ export const getReleasesData = (t: TranslationFunction): Release[] => [ { image: FusakaImage, releaseName: "Fusaka", - plannedReleaseYear: "2025", + releaseDate: "2025-12-03T21:49:11.000Z", content: (

{t("page-roadmap-fusaka-peerdas-title")}

diff --git a/src/lib/ab-testing/server.ts b/src/lib/ab-testing/server.ts index 8dd9032787f..34d62e6d9d4 100644 --- a/src/lib/ab-testing/server.ts +++ b/src/lib/ab-testing/server.ts @@ -1,10 +1,8 @@ -import { SITE_URL } from "@/lib/constants" - import type { ABTestAssignment, ABTestConfig } from "./types" const getABTestConfigs = async (): Promise> => { try { - const response = await fetch(`${SITE_URL}/api/ab-config`, { + const response = await fetch("https://ethereum.org/api/ab-config", { next: { revalidate: 3600 }, })