From 8e3ffa5cbd24c6030d722861bb23aebbc341a4eb Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 4 May 2026 20:41:12 -0500 Subject: [PATCH] Hero: engineering-first masthead, retire A/B test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the marketing-firm headline ("Turn Marketing Into a Machine.") with engineering-first copy aligned to the May 2026 reposition: "Founders ship MVPs. We ship them to production." Subline foregrounds AWS, Next.js, Python, and AI agent systems as the technical anchor. Kill the hero_headline_v1 A/B test entirely. The traffic volume here was never going to reach significance, and the direction is now decided. Drop the dynamic(ssr: false) wrapper and loading fallback in HeroSection — no longer needed without a client-side variant decision. Drop the getVariant call from tracking.ts session init; the experiment field stays optional on SessionContext so old stored sessions still parse. Co-Authored-By: Claude Opus 4.7 (1M context) --- components/HeroHeadline.tsx | 31 ++++++------------------------- components/HeroSection.tsx | 16 +--------------- lib/tracking.ts | 4 +--- 3 files changed, 8 insertions(+), 43 deletions(-) diff --git a/components/HeroHeadline.tsx b/components/HeroHeadline.tsx index 7f21c02..771ca6d 100644 --- a/components/HeroHeadline.tsx +++ b/components/HeroHeadline.tsx @@ -1,36 +1,17 @@ -'use client'; - -import { getVariant } from '@/lib/ab-test'; - -const HERO_VARIANTS = { - A: { - headline: 'Turn Marketing Into a Machine.', - subline: - 'Custom digital systems that capture leads, nurture prospects, and measure what matters.', - }, - B: { - headline: 'Your Marketing, on Autopilot.', - subline: - 'Digital marketing systems that run while you run your business.', - }, -}; - /** - * Renders hero headline and subline with the correct A/B variant. - * Must be loaded with dynamic(ssr: false) so getVariant() runs during - * first client render (before paint), avoiding content flash and CLS. + * Static hero headline. Engineering-first positioning, May 2026 reposition. + * (Previous A/B test on marketing-firm framing was retired alongside the + * positioning shift — there wasn't enough traffic for an A/B to reach + * significance, and the direction was already decided.) */ export default function HeroHeadline() { - const { variant } = getVariant('hero_headline_v1'); - const copy = HERO_VARIANTS[variant]; - return ( <>

- {copy.headline} + Founders ship MVPs. We ship them to production.

- {copy.subline} + Senior engineering for AWS, Next.js, Python, and AI agent systems — the work that actually has to last.

); diff --git a/components/HeroSection.tsx b/components/HeroSection.tsx index fab8a7d..395ea7c 100644 --- a/components/HeroSection.tsx +++ b/components/HeroSection.tsx @@ -1,26 +1,12 @@ 'use client'; import { useState, useCallback } from 'react'; -import dynamic from 'next/dynamic'; import Image from 'next/image'; import { ArrowRight } from 'lucide-react'; import { trackEvent } from '@/lib/tracking'; import TurnstileField from './TurnstileField'; import ReviewStrip from './ReviewStrip'; - -const HeroHeadline = dynamic(() => import('./HeroHeadline'), { - ssr: false, - loading: () => ( -
-

- Turn Marketing Into a Machine. -

-

- Custom digital systems that capture leads, nurture prospects, and measure what matters. -

-
- ), -}); +import HeroHeadline from './HeroHeadline'; export default function HeroSection() { const [email, setEmail] = useState(''); diff --git a/lib/tracking.ts b/lib/tracking.ts index 3bb7b2c..60e6319 100644 --- a/lib/tracking.ts +++ b/lib/tracking.ts @@ -9,7 +9,7 @@ * so it persists across soft navigations but resets on new tabs. */ -import { getVariant, type ExperimentResult } from './ab-test'; +import { type ExperimentResult } from './ab-test'; // --------------------------------------------------------------------------- // Types @@ -89,7 +89,6 @@ export function initSession(): SessionContext { } const utms = parseUTMs(); - const experiment = getVariant('hero_headline_v1'); const ctx: SessionContext = { session_id: generateSessionId(), @@ -99,7 +98,6 @@ export function initSession(): SessionContext { ...(utms.utm_campaign && { utm_campaign: utms.utm_campaign }), ...(utms.utm_term && { utm_term: utms.utm_term }), ...(utms.utm_content && { utm_content: utms.utm_content }), - experiment, }; try {