Clarify browser and desktop delivery responsibilities
This commit is contained in:
parent
1d70c43d3d
commit
3564392cb4
2 changed files with 26 additions and 16 deletions
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue