From 3564392cb41eb56d871ac67859c0f895470350dc Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Wed, 24 Jun 2026 12:23:55 +0000 Subject: [PATCH] Clarify browser and desktop delivery responsibilities --- .../__tests__/public-marketing-pages.test.tsx | 4 ++ website/src/pages/public-pages-commerce.tsx | 38 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/website/src/__tests__/public-marketing-pages.test.tsx b/website/src/__tests__/public-marketing-pages.test.tsx index d6ef88d..84e1252 100644 --- a/website/src/__tests__/public-marketing-pages.test.tsx +++ b/website/src/__tests__/public-marketing-pages.test.tsx @@ -248,6 +248,8 @@ describe('public marketing pages', () => { expect(screen.getByText('SHA-256: abc123')).toBeTruthy() expect(screen.getByText('Packaged validation passed')).toBeTruthy() expect(screen.getByText(/Magic120Cell dedicated-family training map: passed/i)).toBeTruthy() + expect(screen.getByText('Generates desktop-link tokens for safe browser-to-desktop handoff')).toBeTruthy() + expect(screen.getByText('Owns the device/runtime integrations the public website does not claim')).toBeTruthy() expect(document.title).toBe('Download HyperTwist desktop | HyperTwist') expect(document.head.querySelector('meta[property="og:url"]')?.getAttribute('content')).toBe('https://hypertwist.app/download') }) @@ -614,6 +616,8 @@ describe('public marketing pages', () => { expect(await screen.findByText('$19 / month')).toBeTruthy() expect(screen.getByText('$99 / month')).toBeTruthy() expect(screen.getAllByText('What happens after access is granted').length).toBeGreaterThan(0) + expect(screen.getByText('Shows account, auth, billing, and release readiness posture')).toBeTruthy() + expect(screen.getByText('Owns recognition, replay, coaching, and packaged training behavior')).toBeTruthy() const checkoutLinks = screen.getAllByRole('link', { name: /open paddle checkout/i }) expect(checkoutLinks).toHaveLength(2) expect(checkoutLinks[0].getAttribute('href')).toBe('https://buy.paddle.com/operator-live') diff --git a/website/src/pages/public-pages-commerce.tsx b/website/src/pages/public-pages-commerce.tsx index d6b3379..441a252 100644 --- a/website/src/pages/public-pages-commerce.tsx +++ b/website/src/pages/public-pages-commerce.tsx @@ -35,6 +35,26 @@ import { studioFallbackPlan, } from './public-page-helpers' +function DeliverySurfaceResponsibilitiesGrid({ limit }: { limit?: number }) { + const surfaces = typeof limit === 'number' ? deliverySurfaceCards.slice(0, limit) : deliverySurfaceCards + + return ( +
+ {surfaces.map((surface) => ( +
+

{surface.title}

+

{surface.description}

+
    + {surface.bullets.map((bullet) => ( +
  • {bullet}
  • + ))} +
+
+ ))} +
+ ) +} + export function PricingPage() { const releaseManifestQuery = useQuery({ queryKey: ['release-manifest', 'public'], @@ -118,14 +138,7 @@ export function PricingPage() { title="Why plans live in the browser while training stays native" description="Commercial access, entitlement, and launch-readiness posture belong to the browser shell so the simulator can stay focused on training quality." > -
- {deliverySurfaceCards.slice(0, 3).map((surface) => ( -
-

{surface.title}

-

{surface.description}

-
- ))} -
+
@@ -256,14 +269,7 @@ export function DownloadPage() { title="Browser and desktop responsibilities" description="The release lane is easier to trust when the site explains why some actions stay public, some stay protected, and the simulator itself stays native." > -
- {deliverySurfaceCards.map((surface) => ( -
-

{surface.title}

-

{surface.description}

-
- ))} -
+