From a4e917fe39b07bd738af9a01705eedac477ce48e Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Wed, 4 Feb 2026 17:18:02 +0100 Subject: [PATCH 1/2] Remove completed HomepagePersonaCTAs A/B test The A/B test is complete, keeping the original variant (4 CTAs grid). Removes ABTestWrapper usage and force-dynamic directive, restoring static rendering for the homepage. --- app/[locale]/page.tsx | 97 ++++++++++---------------- src/components/Hero/HomeHero/index.tsx | 48 +++---------- 2 files changed, 47 insertions(+), 98 deletions(-) diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 2bdbdb895c6..a48003ed660 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -12,14 +12,12 @@ import type { } from "@/lib/types" import { CodeExample } from "@/lib/interfaces" -import ABTestWrapper from "@/components/AB/TestWrapper" import ActivityStats from "@/components/ActivityStats" import { ChevronNext } from "@/components/Chevron" import HomeHero from "@/components/Hero/HomeHero" import BentoCard from "@/components/Homepage/BentoCard" import CodeExamples from "@/components/Homepage/CodeExamples" import HomepageSectionImage from "@/components/Homepage/HomepageSectionImage" -import PersonaModalCTA from "@/components/Homepage/PersonaModalCTA" import { getBentoBoxItems } from "@/components/Homepage/utils" import ValuesMarqueeFallback from "@/components/Homepage/ValuesMarquee/Fallback" import BlockHeap from "@/components/icons/block-heap.svg" @@ -92,9 +90,6 @@ import { } from "@/lib/data" import EventFallback from "@/public/images/events/event-placeholder.png" -// Force dynamic rendering to enable A/B testing (requires headers()) -export const dynamic = "force-dynamic" - const BentoCardSwiper = nextDynamic( () => import("@/components/Homepage/BentoCardSwiper"), { @@ -455,60 +450,44 @@ const Page = async ({ params }: { params: PageParams }) => {
- - {subHeroCTAs.map( - ({ label, description, href, className, Svg }, idx) => { - const Link = ( - props: Omit< - SvgButtonLinkProps, - "Svg" | "href" | "label" | "children" - > - ) => ( - -

{description}

-
- ) - return ( - - - - - ) - } - )} -
, - // Variation1: "Start here" button with persona modal -
- -
, - ]} - /> +
+ {subHeroCTAs.map( + ({ label, description, href, className, Svg }, idx) => { + const Link = ( + props: Omit< + SvgButtonLinkProps, + "Svg" | "href" | "label" | "children" + > + ) => ( + +

{description}

+
+ ) + return ( + + + + + ) + } + )} +
{/* What is Ethereum */}
- - -
-

{t("page-index-title")}

-

- {t("page-index-description")} -

-
-
, - // Variation1: New title/subtitle for persona modal -
- -
-

- The internet -
- that belongs to you -

-

- Create, own, build, connect, and transact. -
- Ethereum is a network that everyone can use and anyone can - build on. -

-
-
, - ]} - /> +
+ +
+

{t("page-index-title")}

+

+ {t("page-index-description")} +

+
+
) From dee8e381dad2c7f4b6fcbcb382f68a62717ebcbf Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Thu, 5 Feb 2026 09:11:08 +0100 Subject: [PATCH 2/2] remove orphaned PersonaModalCTA component --- src/components/Homepage/PersonaModalCTA.tsx | 173 -------------------- 1 file changed, 173 deletions(-) delete mode 100644 src/components/Homepage/PersonaModalCTA.tsx diff --git a/src/components/Homepage/PersonaModalCTA.tsx b/src/components/Homepage/PersonaModalCTA.tsx deleted file mode 100644 index aedc5b6a994..00000000000 --- a/src/components/Homepage/PersonaModalCTA.tsx +++ /dev/null @@ -1,173 +0,0 @@ -"use client" - -import { useState } from "react" -import { BookOpen, Building2, Code, ExternalLink } from "lucide-react" - -import { ChevronNext } from "@/components/Chevron" -import { Button } from "@/components/ui/buttons/Button" -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog-modal" -import { BaseLink } from "@/components/ui/Link" - -import { cn } from "@/lib/utils/cn" -import { trackCustomEvent } from "@/lib/utils/matomo" - -type PersonaLink = { - label: string - href: string - isExternal?: boolean -} - -type PersonaCategory = { - id: string - label: string - Icon: React.FC<{ className?: string }> - iconBgClass: string - iconColorClass: string - links: PersonaLink[] -} - -const categories: PersonaCategory[] = [ - { - id: "beginners", - label: "For beginners", - Icon: BookOpen, - iconBgClass: "bg-accent-a/20", - iconColorClass: "text-accent-a", - links: [ - { label: "What is Ethereum?", href: "/what-is-ethereum/" }, - { label: "Get a wallet", href: "/wallets/find-wallet/" }, - ], - }, - { - id: "developers", - label: "For developers", - Icon: Code, - iconBgClass: "bg-primary-low-contrast", - iconColorClass: "text-primary", - links: [ - { label: "Developer Hub", href: "/developers/" }, - { label: "Docs", href: "/developers/docs/" }, - ], - }, - { - id: "enterprise", - label: "For enterprise", - Icon: Building2, - iconBgClass: "bg-accent-c/20", - iconColorClass: "text-accent-c", - links: [ - { label: "Founders", href: "/founders/" }, - { - label: "Institutions", - href: "https://institutions.ethereum.org/", - isExternal: true, - }, - ], - }, -] - -type PersonaModalCTAProps = { - eventCategory: string -} - -const PersonaModalCTA = ({ eventCategory }: PersonaModalCTAProps) => { - const [isOpen, setIsOpen] = useState(false) - - const handleOpenChange = (open: boolean) => { - if (open) { - trackCustomEvent({ - eventCategory, - eventAction: "start here", - eventName: "start here", - }) - } - setIsOpen(open) - } - - const handleLinkClick = (label: string) => { - trackCustomEvent({ - eventCategory, - eventAction: "modal", - eventName: label, - }) - setIsOpen(false) - } - - return ( - - - - - - - - What brings you here? - - -
- {categories.map( - ({ id, label, Icon, iconBgClass, iconColorClass, links }) => ( -
- {/* Icon and Category Label */} -
-
- -
-

- {label} -

-
- - {/* Links */} -
- {links.map(({ label: linkLabel, href, isExternal }, idx) => ( -
- {idx > 0 &&
} - handleLinkClick(linkLabel)} - hideArrow - className="group flex items-center justify-between text-xl font-bold text-primary no-underline transition-colors hover:text-primary-hover md:text-3xl" - {...(isExternal && { - target: "_blank", - rel: "noopener noreferrer", - })} - > - - {linkLabel} - {isExternal && ( - - )} - - - -
- ))} -
-
- ) - )} -
- -
- ) -} - -export default PersonaModalCTA