Clarify browser and desktop delivery responsibilities

This commit is contained in:
axiomlogicnexus 2026-06-24 12:23:55 +00:00
parent 1d70c43d3d
commit 3564392cb4
2 changed files with 26 additions and 16 deletions

View file

@ -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')

View file

@ -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 (
<div className="card-grid">
{surfaces.map((surface) => (
<article key={surface.title} className="card">
<h3>{surface.title}</h3>
<p>{surface.description}</p>
<ul className="list top-gap">
{surface.bullets.map((bullet) => (
<li key={bullet}>{bullet}</li>
))}
</ul>
</article>
))}
</div>
)
}
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."
>
<div className="card-grid">
{deliverySurfaceCards.slice(0, 3).map((surface) => (
<article key={surface.title} className="card">
<h3>{surface.title}</h3>
<p>{surface.description}</p>
</article>
))}
</div>
<DeliverySurfaceResponsibilitiesGrid limit={3} />
</Section>
<Section title="Important launch note">
@ -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."
>
<div className="card-grid">
{deliverySurfaceCards.map((surface) => (
<article key={surface.title} className="card">
<h3>{surface.title}</h3>
<p>{surface.description}</p>
</article>
))}
</div>
<DeliverySurfaceResponsibilitiesGrid />
</Section>
<Section title="Release integrity and documentation">