# HyperTwist Website First-party `hypertwist.app` surface for HyperTwist: - public homepage, about, resources, pricing, support, and legal pages - dedicated public `/getting-started` onboarding route for the first real browser-to-desktop operator journey - dedicated public `/launch-status` route for the canonical preview-versus-launch rollout checklist - public feature-atlas route for current capability and boundary truth - shared public-manual route atlas across homepage, docs, and resources so each major public page explains its exact job - browser-facing operator/account dashboard - protected launch-status, browser-access, account, and notices routes backed by live auth-health and release-manifest authority - shared SuperTokens auth posture reused from the FamiliarOS and ScriptoriumAI website lane - route-aware SuperTokens wrapping so public brochure routes do not pay for auth chrome unnecessarily while `/app`, `/login`, `/register`, `/auth/*`, and stored-session continuity still do - FamiliarOS-style first-party auth-shell backdrop for login/register/auth callback posture, including first-paint HTML fallback plus route-synced runtime ownership - desktop download posture and desktop-link handshake endpoints - server-backed release-manifest authority shared by public and protected download surfaces - Paddle-ready pricing/check-out wiring - dashboard-side plus dedicated protected launch-status surfaces for download, checkout, auth, and notice configuration - public launch-status callouts across pricing, download, and notices surfaces - route-aware metadata, canonical, Open Graph, Twitter-card, and protected-route noindex posture for the live `hypertwist.app` surface - first-party `robots.txt` plus `sitemap.xml` for the public crawlable route set while keeping `/app`, `/login`, and `/register` out of crawler posture - a shared public-route registry that now drives marketing navigation, footer links, router entries, and sitemap generation from one source of truth - top-level browser-shell runtime recovery through a first-party `ErrorBoundary` so unexpected React route failures degrade into a HyperTwist-owned recovery surface instead of a blank shell - runtime diagnostics that distinguish local, mixed, and public auth deployment posture - public open-source notices surface required by HyperTwist's MPL distribution doctrine ## Why this app exists HyperTwist already ships an embedded browser runtime inside Unreal under `Content/Browser/`. That runtime is not the same thing as a public website, checkout surface, or browser account shell. This `website/` directory is the dedicated public and operator-facing web surface for: - marketing and product positioning - account/authentication - billing/pricing posture - browser dashboard access - desktop distribution - public legal and open-source notices The website is therefore complementary to the desktop build, not a substitute for it: - use `website/` for account, release, pricing, notices, support, and browser operator access - use `UnrealHyperTwist/` for the real simulator, native runtime behavior, and higher-dimensional packaged execution - do not present the public site as proof that the optional full-browser simulator branch is live The public pages now also double as a professional public-facing operator manual: - homepage and about explain why both browser and desktop surfaces exist - the feature-atlas route condenses current capability, retained branches, and release boundaries into one public authority page - resources and docs describe the safe public learning and rollout lanes - pricing and download explain entitlement, package proof, and legal posture - release notes, notices, privacy, terms, and shipping/payment pages now also explain the real browser-versus-desktop delivery model instead of carrying generic brochure/legal filler - support and legal pages clarify rollout, pairing, and distribution duties - the docs and resources pages now also carry a practical simulator-use manual for recognition, replay, higher-dimensional runtime ownership, and operator diagnostics without overclaiming browser or VR parity - the website now also ships a same-origin downloadable operator manual at `website/public/manual/hypertwist-operator-manual.md` so the desktop-first onboarding and boundary truth can travel offline with the product - the protected release-reference surfaces now also expose that same downloadable operator manual beside docs, release notes, source, and notices so signed-in operators can carry one offline guide through launch, account, and download follow-through instead of dropping back to public-only route fragments - the public browser-account method lineup is now also visible on the homepage, pricing, download, support, docs, and getting-started routes so high-traffic decision pages no longer hide provider truth until the auth entry forms - the homepage, docs, and resources surfaces now also share a route atlas that explains what each major public page owns, so the site reads more like a professional operator manual than a flatter brochure shell - the shared-auth lane now also keeps its optional ORCID provider honest end-to-end: the auth server owns the bounded provider, the same-origin manifest emits matching runtime env truth, and the browser client registers ORCID through the supported third-party recipe contract instead of only exposing the provider in docs or button copy - the about, feature-atlas, resources, and docs surfaces now also expose a concrete shipped control-profile and settings roster for the desktop lane, including the current `classic-wca-keyboard/v1` profile, scenic immersive preset families, dedicated-family selector/view ownership, bounded selector-recall persistence truth, and the still-unfinished XR/controller-rebinding boundary - those same public-manual and protected-dashboard roster surfaces now also state the explicit XR reopen gate rather than only the broad `No-Go` boundary: dedicated runtime owners, user-facing settings/rebinding ownership, and Windows packaged controller validation with controller truth would all still be required before native XR/controller widening could be reopened honestly - the protected dashboard, browser-access, and account routes now also mirror that same native control/settings roster after sign-in, so entitled users do not lose the current simulator-control truth when they move from the public manual into the operator shell - the homepage, docs, and download surfaces now also share a tighter first serious-session quickstart, and the protected dashboard mirrors that same end-to-end operator path after sign-in so access, pairing, first launch, and the current XR/controller boundary do not have to be reconstructed from scattered cards - that same first-session story is now also anchored at a dedicated public `/getting-started` route so the shortest complete onboarding/manual lane is crawlable, canonical, and easier to hand off than the broader page set alone - the same launch-authority story is now also anchored at a dedicated public `/launch-status` route so preview-versus-launch truth, rollout blockers, packaged proof, and release references have one canonical authority surface - the protected operator shell now also mirrors that same launch-authority posture on a dedicated signed-in `/app/launch-status` route, so rollout truth no longer collapses back down to a single dashboard panel after sign-in - the surrounding protected release, account, browser-access, download, and notices surfaces now also keep direct follow-through back to that same signed-in launch-authority route, so rollout truth does not disappear once the operator leaves the overview page - the protected app shell now also carries richer operator-facing browser boundary, account, entitlement, and notices guidance instead of treating those routes as thin placeholders beside the main dashboard - the auth shell now also behaves more like the sibling first-party sites at the route/bootstrap layer: auth-specific chrome appears on login/register posture without wrapping every anonymous public route in the same session shell ## Local development ```bash cd /home/dev/src/HyperTwist/website npm install npm run dev ``` Frontend default URL: - `http://localhost:4273` Environment templates: - local development: `website/.env.example` plus `website/server/.env.example` - public deployment scaffold: `website/.env.production.example` plus `website/server/.env.production.example` - live preview scaffold: `website/.env.preview.example` plus `website/server/.env.preview.example` - same-origin bundle examples: `website/deploy/hypertwist.same-origin.bundle.example.json` for launch-tier placeholders and `website/deploy/hypertwist.same-origin.preview.bundle.example.json` for the current honest preview lane ## Validation ```bash scripts/run-hypertwist-web-surface-validation.sh npm run type-check npm run test npm run build npm run test:e2e:responsive npm run test:e2e:protected-responsive npm run check:runtime-readiness -- --frontend-env .env --server-env server/.env --health-url https://hypertwist.app npm run check:runtime-readiness:preview-live ``` Related validation and audit commands for the adjacent owned surfaces: ```bash npm --prefix server run type-check npm --prefix server test -- --run npm --prefix ../Content/Browser run verify:shell npm --prefix ../Content/Browser run build npm audit --omit=dev --audit-level=high npm --prefix server audit --omit=dev --audit-level=high npm --prefix ../Content/Browser audit --omit=dev --audit-level=high ``` The preferred current repo-owned umbrella gate is: ```bash scripts/run-hypertwist-web-surface-validation.sh ``` That command runs the current website type-check, focused auth or release or route tests, deployment/readiness tooling tests, website build, auth-server type-check and tests, browser-shell verify/build, and production audits together. It accepts the current exact upstream `supertokens-node -> nodemailer` auth-server residual in default mode and supports `--strict-auth-server-audit` when that residual should block. It now also checks that the website-facing Windows packaged-validation summary is fresh against the checked-in authoritative higher-dimensional package report. The browser-runtime build config now also suppresses the previously noisy upstream Radix `use client` bundler warnings so real regressions remain visible; the one remaining accepted browser-build warning is the current upstream `@khronosgroup/gltf-viewer` `mikktspace_bg.wasm` Vite asset-resolution message, which does not currently break the owned shell verification or production build. When responsive browser proof is needed too, pass `scripts/run-hypertwist-web-surface-validation.sh --with-responsive-e2e` to run the bounded Playwright public-route and protected-route viewport checks. Repo-owned structural-tool posture: - `scripts/bootstrap-hypertwist-gitnexus.sh` now gives HyperTwist a repo-owned GitNexus runtime landing zone under `tools/gitnexus/runtime/` - `scripts/run-hypertwist-sentrux-source-only.sh` still prefers `HYPERTWIST_SENTRUX_BINARY`, repo-local `./sentrux` or `./sentrux.exe`, then `tools/sentrux/bin/`, then `PATH` - `scripts/run-hypertwist-gitnexus-analyze.sh` and `scripts/run-hypertwist-gitnexus-status.sh` now prefer the repo-owned GitNexus runtime under `tools/gitnexus/runtime/gitnexus`, auto-bootstrap it through `scripts/bootstrap-hypertwist-gitnexus.sh --if-missing`, then only fall back to the retained mirror and finally `npx gitnexus@latest` if no usable local runtime exists - the current Linux host still shows a fresh-local-analyze post-index quirk (`free(): invalid pointer` after a correct index write), so the analyze wrapper now treats that exact case as success when the follow-up local status proof confirms the fresh index instead of needlessly dropping to `npx` - `scripts/run-hypertwist-sentrux-gate.sh` now gives the website lane the same bounded source-only before/after regression loop through the HyperTwist-owned mirror and a persisted repo baseline at `.sentrux/source-only-baseline.json` - `scripts/bootstrap-hypertwist-sentrux.sh` now keeps sibling-repo seed lookup opt-in behind `HYPERTWIST_ALLOW_SIBLING_SENTRUX_BOOTSTRAP=1`, so ordinary HyperTwist analyzer recovery does not silently drift back into cross-repo ownership Latest refactor-tool ownership follow-up on `2026-06-30`: - `scripts/run-hypertwist-gitnexus-analyze.sh` now completes locally on this host through the repo-owned GitNexus runtime path and the new post-index salvage check instead of defaulting back to `npx` - `scripts/run-hypertwist-gitnexus-status.sh` then reports the bounded mirror up to date from that same repo-owned runtime path - `scripts/run-hypertwist-sentrux-source-only.sh` stayed green at: - `Quality: 6248` - the full owned web-surface umbrella also stayed green again under: - `scripts/run-hypertwist-web-surface-validation.sh` - focused website route/auth/release suite: `14` files, `84` tests passed - deployment/readiness tooling suite: `4` files, `34` tests passed - website/server suite: `10` files, `36` tests passed - successful website and `Content/Browser` production builds - clean website and `Content/Browser` production audits - the same already-documented upstream auth-server residual: `supertokens-node -> nodemailer` Latest same-family offline-manual and protected-reference continuity follow-up on `2026-06-30`: - the public website now exposes one same-origin downloadable operator manual across homepage, docs, resources, getting-started, and download so the desktop-first product story can leave the browser intact - the protected release-reference bundle now also surfaces that same downloadable manual inside the signed-in dashboard and protected launch, browser-access, account, download, and notices lanes beside docs, release notes, corresponding source, and notices links - focused continuity validation stayed green under: - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx src/__tests__/protected-app-pages.test.tsx` - `npm --prefix website run type-check` - `npm --prefix website run build` - the owned continuity/tooling rerun also stayed green under: - `scripts/run-hypertwist-sentrux-source-only.sh` -> `Quality: 6248` - `scripts/run-hypertwist-gitnexus-analyze.sh` -> `Indexed commit: 1b4adda` with the already-documented local post-index non-zero exit salvaged by follow-up status proof - `scripts/run-hypertwist-gitnexus-status.sh` -> `Status: up-to-date` - `scripts/run-hypertwist-web-surface-validation.sh` - focused website route/auth/release suite: `14` files, `84` tests passed - website deployment/readiness tooling suite: `4` files, `34` tests passed - website/server suite: `10` files, `36` tests passed - successful website and `Content/Browser` production builds Latest auth-shell hardening follow-up on `2026-06-24`: - the website now carries a first-party HyperTwist auth-shell backdrop module and route sync layer derived from the FamiliarOS/ScriptoriumAI auth shell posture, but adapted to HyperTwist truth: - `/login` - `/register` - `/auth/*` - `App.tsx` no longer wraps the entire website in `SuperTokensWrapper` just because auth is configured; it now wraps only: - `/app*` - `/login*` - `/register*` - `/auth/*` - or public routes when a stored local platform session already exists - `website/index.html` now also carries a first-paint auth-backdrop fallback so auth-shell chrome is present before React route effects settle - focused website auth/bootstrap validation stayed green under: - `npm --prefix website test -- --run src/__tests__/App.bootstrap.test.tsx src/__tests__/auth-shell-backdrop.test.ts src/__tests__/public-auth-pages.test.tsx src/__tests__/route-shells.test.tsx` - `4` test files passed - `21` tests passed - the broader owned web-surface umbrella then stayed green again under: - `scripts/run-hypertwist-web-surface-validation.sh` - focused website route/auth/release suite: `12` files, `62` tests passed - website/server suite: `10` files, `36` tests passed - website and `Content/Browser` production audits: `found 0 vulnerabilities` - website/server retained only the already-documented upstream `supertokens-node -> nodemailer` residual Latest runtime-recovery hardening follow-up later on `2026-06-24`: - `App.tsx` now wraps the route tree in a first-party HyperTwist `ErrorBoundary` so unexpected browser-shell render failures fall back to a product-owned recovery card instead of a blank route - the default fallback keeps product truth explicit: - it describes the browser shell as the operator/distribution surface rather than the simulator itself - it offers both in-place retry and safe return-to-homepage actions - focused validation for the new recovery seam stayed green under: - `npm --prefix website test -- --run src/__tests__/ErrorBoundary.test.tsx src/__tests__/App.bootstrap.test.tsx src/__tests__/auth-shell-backdrop.test.ts src/__tests__/public-auth-pages.test.tsx src/__tests__/route-shells.test.tsx` - `5` test files passed - `25` tests passed - the broader current website suite also stayed green under: - `npm --prefix website test -- --run` - `41` test files passed - `168` tests passed - the owned umbrella and structural gates then stayed green again under: - `scripts/run-hypertwist-web-surface-validation.sh` - `scripts/run-hypertwist-sentrux-source-only.sh` - `Quality: 6189` - `All rules pass` Latest public-manual control-roster follow-up later on `2026-06-24`: - the public pages now answer the concrete “what can users actually choose today?” question more directly instead of only speaking in broad control/XR categories - the about, feature-atlas, resources, and docs surfaces now all project a first-party selectable control/settings roster covering: - the shipped `classic-wca-keyboard/v1` profile - the current scenic immersive preset families - dedicated `Magic120Cell` and `MagicCube5D` selector/view ownership - current persisted selector-recall truth - the still-unfinished XR/controller-rebinding boundary - the focused public-marketing suite stayed green under: - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx` - `1` test file passed - `11` tests passed - the broader current website suite then stayed green again under: - `npm --prefix website test -- --run` - `41` test files passed - `168` tests passed Latest protected control-roster follow-up later on `2026-06-24`: - the protected operator shell now mirrors the same native control/settings truth after sign-in instead of leaving that detail only on the public manual - `/app`, `/app/browser-access`, and `/app/account` now each carry the shipped desktop roster and the explicit XR/controller boundary: - the shipped `classic-wca-keyboard/v1` profile - the scenic immersive preset families - current `Magic120Cell` and `MagicCube5D` selector/view ownership - persisted selector-recall truth - the still-unfinished XR/controller-rebinding boundary - focused protected validation stayed green under: - `npm --prefix website test -- --run src/__tests__/protected-app-pages.test.tsx src/__tests__/DashboardOverviewPage.test.tsx` - `2` test files passed - `9` tests passed - the broader current website suite stayed green again under: - `npm --prefix website test -- --run` - `41` test files passed - `168` tests passed Latest browser-versus-desktop reality follow-up on `2026-06-28`: - the shared browser-versus-desktop public-manual copy now says more directly why the browser lane is narrower instead of relying only on abstract boundary language: - low-latency simulator input remains native - packaged runtime ownership remains native - higher-dimensional scene execution remains native - any future serious controller or VR completion remains native - that wording now propagates automatically anywhere the shared `BrowserDesktopRealitySection` is rendered, including homepage, about, features, pricing, docs, resources, launch-status, and the mirrored protected operator surfaces Latest first-session quickstart/manual follow-up on `2026-06-27`: - the public and protected manual lane now explains the first real operator journey more directly instead of forcing users to stitch it together from several adjacent page sections: - homepage, docs, and download now share a reusable first-session quickstart covering release-target choice, protected pairing, first native classic-cube verification, higher-dimensional verification, and the explicit XR/controller `No-Go` boundary - the protected dashboard now mirrors that same first-session path after sign-in so browser account work, desktop-link pairing, first launch, and runtime-boundary truth remain visible together - focused validation for that continuation stayed green under: - `npm --prefix website test -- --run src/__tests__/DashboardOverviewPage.test.tsx src/__tests__/public-marketing-pages.test.tsx` - `2` test files passed - `16` tests passed - `npm --prefix website run type-check` - the same-family umbrella, structural, and analysis gates then stayed green again under: - `scripts/run-hypertwist-web-surface-validation.sh` - website focused route/auth/release suite: `12` files, `68` tests passed - website/server suite: `10` files, `36` tests passed - website and `Content/Browser` production audits: `found 0 vulnerabilities` - `scripts/run-hypertwist-sentrux-source-only.sh` - `Quality: 6217` - `All rules pass` - `scripts/run-hypertwist-gitnexus-analyze.sh` - `16,312` nodes, `38,387` edges, `672` clusters, `300` flows - `scripts/run-hypertwist-gitnexus-status.sh` - `Status: up-to-date` Latest shared-auth ORCID frontend-closure follow-up on `2026-06-29`: - the remaining browser-side ORCID provider drift is now closed end to end: - `website/src/auth/supertokens-client.ts` now passes ORCID into the SuperTokens third-party recipe as a bounded custom-provider config object instead of depending on a guessed runtime helper export - the helper remains isolated in `buildEnabledThirdPartyProviders`, so GitHub/Google ordering stays stable while ORCID is added only when intentionally enabled - focused regression coverage now exists in `src/__tests__/supertokens-client.test.ts` - focused validation for that closure stayed green under: - `npm --prefix website run type-check` - `npm --prefix website test -- --run src/__tests__/supertokens-client.test.ts src/__tests__/public-auth-pages.test.tsx src/__tests__/platform-auth.bootstrap.test.tsx` - `3` test files passed - `15` tests passed - the broader current website lane stayed green again under: - `scripts/run-hypertwist-web-surface-validation.sh` - website focused route/auth/release suite: `14` files, `81` tests passed - website/server suite: `10` files, `36` tests passed Latest responsive proof and live preview-readiness revalidation later on `2026-06-29`: - the owned browser/public/product lane was then rechecked under the broader responsive umbrella instead of relying only on route-unit coverage - `npm --prefix website run check:runtime-readiness:preview-live` passed again against `https://hypertwist.app`, confirming: - live `/health` check green - live anonymous release-manifest check green - live first-party website-shell marker check green - current truthful preview posture remained explicit during that live check: - Windows download URL still missing in preview env - operator and studio Paddle checkout URLs still missing in preview env - Paddle webhook secret still missing in preview env - `SUPERTOKENS_CORE_URI` still points at a loopback/local-development host - billing plan maps still rely on webhook `custom_data` - the broader owned web-surface umbrella then reran green with responsive browser proof enabled: - `scripts/run-hypertwist-web-surface-validation.sh --with-responsive-e2e` - focused website route/auth/release validation: - `14` files passed - `81` tests passed - deployment/readiness tooling validation: - `3` files passed - `30` tests passed - responsive public-route Playwright proof: - `34` tests passed - responsive protected-route Playwright proof: - `12` tests passed - `website/server` validation: - `10` files passed - `36` tests passed - website plus `Content/Browser` production builds passed - `website/` and `Content/Browser/` production audits stayed at `found 0 vulnerabilities` - `website/server/` again retained only the already-documented upstream `supertokens-node -> nodemailer` residual advisory - the public launch-status surface now also names the concrete live preview blockers from auth-health and billing/runtime posture instead of reducing the whole state to generic missing-label prose - the protected dashboard and protected `/app/launch-status` route now mirror that same concrete blocker detail too, so signed-in operators no longer have to infer the real preview gap only from the public page or the readiness CLI - current truthful reading after that rerun: - the public and protected browser surfaces now have fresh practical mobile/tablet proof rather than only desktop/unit confidence - the live site is healthy and real, but it still honestly remains a preview deployment until checkout, Windows download, billing secret, and non-loopback shared-auth core posture are configured Latest exact-source proof and owned validation refresh later on `2026-06-29`: - the public/browser lane was then re-synced against the refreshed exact-source native proof instead of leaving the website on older packaged-validation metadata - the public packaged-desktop summary was refreshed from the checked-in higher-dimensional package report, so the website no longer points at the older June 24 package timestamp - the HyperTwist-owned analyzer loop stayed green on the same state: - `scripts/run-hypertwist-sentrux-source-only.sh` - `Quality: 6235` - all `7` rules passing - `scripts/run-hypertwist-gitnexus-analyze.sh` - bounded mirror refreshed at: - `16,400` nodes - `38,759` edges - `675` clusters - `300` flows - retained local GitNexus runtime remained unusable on this Linux host with the known `invalid ELF header` `LadybugDB` mismatch, so the wrapper truthfully fell back to `npx gitnexus@latest` - `scripts/run-hypertwist-gitnexus-status.sh` - bounded mirror `Status: up-to-date` - the owned web-surface umbrella then reran cleanly against that refreshed package proof: - `scripts/run-hypertwist-web-surface-validation.sh` - focused website route/auth/release validation: - `14` files passed - `81` tests passed - deployment/readiness tooling validation: - `3` files passed - `30` tests passed - `website/server` validation: - `10` files passed - `36` tests passed - website plus `Content/Browser` production builds passed - `website/` and `Content/Browser/` production audits stayed at `found 0 vulnerabilities` - `website/server/` again retained only the already-documented upstream `supertokens-node -> nodemailer` residual advisory - current truthful reading after that refresh: - the browser shell remains justified and non-superfluous because it owns account, rollout, billing, release posture, notices, and browser-to- desktop handoff while the simulator remains package-validated and desktop-first - the native XR/controller lane still remains an explicit desktop-hosted `No-Go` rather than something the public site or protected dashboard should market as finished Current dependency-health truth from the `2026-06-23` hardening pass: - `website/` production audit is clean - `Content/Browser/` production audit is clean and now has a checked-in `package-lock.json` - `website/server/` was upgraded to `supertokens-node@24.0.2` - `website/server/` still carries one upstream production advisory through the supported `supertokens-node -> nodemailer@8.0.11` chain - no unsupported forced major `nodemailer` override was landed just to hide that remaining upstream advisory ## Release-manifest authority The website now treats `GET /api/releases/manifest` from `website/server` as the shared runtime authority for desktop release metadata. - the public `/download` page reads live version, channel, build, size, checksum, and release-reference metadata from that manifest - the public marketing page still keeps raw download URLs behind the protected dashboard even when a platform is configured - the protected `/app/downloads` surface reads the same manifest but receives session-backed download URLs when the current user is actually entitled - the public `/resources` page now also surfaces the current Windows packaged validation summary so the live higher-dimensional desktop proof is visible on a public reference page even before launch-tier release URLs are configured - the same manifest now also carries public commerce config for operator/studio checkout URLs plus live plan-price strings, so pricing, notices, and dashboard launch-readiness surfaces can follow auth-server runtime truth instead of depending only on frontend build-time config - the protected dashboard launch-readiness panel and the public launch-status callouts now also use that manifest-backed Windows download truth instead of only static frontend config - the public launch-status surface now also consumes live auth-health webhook and public-origin readiness truth, so homepage/pricing/download/notices copy no longer treats static checkout/download config alone as sufficient for external launch posture - the same manifest now also carries first-party packaged-validation summary truth for the Windows higher-dimensional desktop lane, so public and protected release cards can surface real package proof even before launch download URLs are configured The first-party website shell now also carries an explicit deployment marker in `website/index.html`: - `` The runtime-readiness verifier uses that marker to distinguish the real deployed website from the earlier placeholder rollout page. Relevant server env keys now include: - `RELEASE_MANIFEST_VERSION` - `RELEASE_MANIFEST_CHANNEL` - `SUPPORT_EMAIL` - `PUBLIC_DOCS_URL` - `RELEASE_NOTES_URL` - `MPL_SOURCE_URL` - `OPEN_SOURCE_REPO_URL` - `_DOWNLOAD_URL` - `_RELEASE_VERSION` - `_RELEASE_CHANNEL` - `_RELEASE_BUILD_ID` - `_RELEASE_PUBLISHED_AT` - `_RELEASE_FILE_NAME` - `_RELEASE_FILE_SIZE_BYTES` - `_RELEASE_SHA256` ## Related surfaces - frontend app: `website/src/` - auth server: `website/server/` - deployment templates: `website/deploy/` - embedded Unreal browser runtime: `Content/Browser/` - HyperTwist feature authority: `docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md` - HyperTwist roadmap authority: `docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md` ## Deployment note Before public launch, configure: - SuperTokens frontend/backend env vars - production download URLs - production Paddle checkout URLs - the public corresponding-source URL for MPL-covered shipped material For non-public rehearsal, the same bundle/readiness lane also supports an explicit preview posture through `deploymentTier: "preview"` in the manifest or `VITE_PUBLIC_DEPLOYMENT_TIER=preview` plus `DEPLOYMENT_TIER=preview` in env. That preview tier may honestly leave operator checkout, Windows download, and Paddle webhook-secret values empty while the public launch lane still requires real values. Do not launch the public pricing/download pages without a valid open-source notices and corresponding-source destination. Recommended production posture is documented in: - `docs/ops/HYPERTWIST_WEBSITE_RUNTIME_CONFIGURATION_GUIDE_2026-06-22.md` Use the runtime-readiness command before public launch or deployment approval: - in `launch` tier, it fails if required public launch values are still missing - in `preview` tier, it accepts honest empty operator checkout, Windows download, release-manifest, and billing-webhook values as warnings while still rejecting placeholder strings - the checked-in preview example env pair now mirrors the current live `hypertwist.app` preview posture, and `npm run check:runtime-readiness:preview-live` replays that proof directly against the public origin - it can optionally verify live `/api/auth/health` posture from the deployed site - it now also verifies the anonymous public `GET /api/releases/manifest` route and the deployed website root shell marker - it now fails explicitly when the live origin is still serving the placeholder rollout page instead of the first-party website/auth-server lane - same-origin preview proof may remain in runtime mode `mixed` when public origin readiness is true and the only remaining warning is the loopback SuperTokens-core notice - the shared marketing shell now also carries a compact first-party public-site-status banner across public pages, while the homepage keeps a fuller public-site-status section for the same preview-versus-launch truth - the website-facing Windows packaged proof now comes from the sanitized generated file `website/src/shared/generated/windows-package-validation-summary.json`, rendered from `docs/generated/higher_dimensional_training_maps/phase6c_dedicated_family_package_validation_report.json` by `scripts/render-hypertwist-web-package-validation-summary.mjs` - that generated summary now carries both the package-helper `skip_build` posture and the surrounding same-packet `pre_package_editor_build` truth, so public download and release surfaces do not flatten a fresh editor rebuild plus receipt-reuse package proof into one misleading build label - the auth server can now also serve the built `website/dist` bundle directly for same-origin `hypertwist.app` deployment when that build output is present - the repo now also includes first-party same-origin `nginx` and `systemd` handoff templates under `website/deploy/` - the repo now also includes `npm run render:same-origin-deployment` to render resolved `systemd` and `nginx` files from checkout/user/host inputs instead of hand-editing deployment examples - the repo now also includes `npm run render:same-origin-bundle` so one deployment manifest can own the public origin and emit validated frontend env, server env, `systemd`, and `nginx` outputs together before VPS cutover - the shared-VPS deployment defaults now use upstream port `3011` because the current host already has FamiliarOS bound to `3001` - the repo now also includes `npm run run:vps-same-origin-staging-proof` so the current committed `website/` tree can be staged into a temporary VPS checkout and proven on the real shared host before any root-owned live cutover, with optional `--archive-source worktree` support when the proof should validate the in-progress local packet before commit rather than `HEAD` - the repo now also includes `npm run run:vps-same-origin-live-deploy` so the same manifest/bundle lane can stage the committed checkout, install env, build the site, replace the `systemd` plus `nginx` files, and validate the public origin in one bounded root-owned flow - it now warns when same-origin public deployment leaves static website serving mode ambiguous - request-level server tests now also pin that same-origin shell behavior instead of relying only on helper-level assertions - the public pricing/download/notices pages now also surface preview-versus-launch posture directly from the same bounded launch checklist - the real `check-runtime-readiness` CLI is now also exercised against the checked-in `.env.production.example` files so placeholder launch scaffolds cannot silently drift away from the documented command Live site status on `2026-06-22`: - `https://hypertwist.app` now serves the first-party same-origin preview lane instead of the older placeholder rollout page - live `/health`, `/api/auth/health`, `/api/releases/manifest`, and root-shell verification are green on that public origin - the new live-deploy helper has also been re-proved idempotently against that already-cut-over host The repo bootstrap CI now also validates this lane through: - frontend `npm ci`, `npm run type-check`, `npm test`, and `npm run build` - auth-server `npm ci`, `npm run type-check`, and `npm test` The focused frontend test coverage now also pins: - route-guard redirect preservation for pathname, query, and hash deep links - safe `next`-path normalization across custom auth pages and SuperTokens redirect handoff - auth-bootstrap normalization when fallback/email sessions are re-hydrated - login/register page continuation behavior and protected-dashboard download gating on the public download page - platform-preserving `/download -> /app/downloads?platform=...` continuation plus requested-target surfacing inside the protected release lane - support-topic fallback routing for pricing and launch-readiness actions when live checkout is not configured yet - protected-route loading/redirect behavior plus auth-aware marketing/app shell actions - real `AppRouteTree` smoke coverage for `/`, `/features`, `/pricing`, `/download`, `/login`, `/app`, `/app/launch-status`, and `/app/downloads` - top-level `App` bootstrap coverage for unknown-route redirect and SuperTokens wrapper on/off posture - login/register unhappy-path coverage for returned form errors, auth-runtime warning callouts, and OAuth-button visibility/invocation - dashboard launch-readiness plus desktop-link verify-url behavior - route-aware metadata behavior for public versus protected surfaces plus richer download-lane guidance on both the public and protected release pages - spawned `website/server` bootstrap proof from production-shaped same-origin env into live `/health`, `/api/auth/health`, static public/app shell delivery, verified webhook reflection into billing state, and bounded session-backed `/api/auth/me` plus `/api/auth/desktop-link` behavior under `TEST_MODE=testing` The later shared public-launch-status banner continuation on `2026-06-22` then also passed the full frontend `npm test` suite and a fresh `npm run build` after an older auth-page mock was widened to include the new shared `getAuthHealth` dependency used by the marketing shell. The later launch-summary continuity refinement on `2026-06-29` then also kept that always-visible marketing-shell banner from drifting back into generic missing-label prose: when the live site is still in preview posture, the banner now names the first concrete auth-health or billing-runtime blockers and a remaining-count summary, while the deeper `/launch-status` surfaces still carry the full blocker list. The latest legal/distribution continuity follow-up on `2026-06-30` then also kept the deeper public commerce pages inside that same richer manual lane: - `/open-source-notices` now also carries the shared browser-versus-desktop reality explanation, a live surface-authority map, and the same offline operator-manual continuity instead of acting like an isolated compliance stub - `/shipping-payment` now also carries the shared auth-method lineup, the same surface-authority map, and the same offline operator-manual continuity so the purchase/delivery lane does not fall back to a thinner shell than the homepage, pricing, and download routes - focused validation stayed green under: - `npm --prefix website test -- --run src/__tests__/public-marketing-pages.test.tsx` - `npm --prefix website run type-check` The follow-on public-manual widening on `2026-06-22` then also passed: - `npm run type-check` - `npm test -- --run src/__tests__/public-marketing-pages.test.tsx` - `npm run build` - `npm test -- --run` - `npm run type-check` in `website/server` - `npm test -- --run` in `website/server` The same-day validation hardening also gave the live-spawned `website/server` bootstrap suite an explicit `15s` timeout so child-process boot plus same-origin HTTP proof does not fail spuriously under heavier host load while keeping the coverage itself unchanged. Canonical same-origin cutover guide: - `docs/ops/HYPERTWIST_WEBSITE_SAME_ORIGIN_DEPLOYMENT_HANDOFF_2026-06-22.md` Latest public manual verification/reporting continuity follow-up on `2026-06-30`: - the public `/download`, `/getting-started`, `/docs`, and `/support` routes now carry a stronger same-family first-session verification and issue-reporting packet instead of leaving that operational guidance scattered across adjacent sections only - the same-origin downloadable operator manual at `public/manual/hypertwist-operator-manual.md` now also mirrors the explicit browser-limitations truth, the first-session verification checklist, and the higher-signal reporting checklist so the offline manual no longer trails the stronger live public routes - focused validation stayed green under: - `npm test -- --run src/__tests__/public-marketing-pages.test.tsx src/__tests__/offline-operator-manual.test.ts` - `npm run type-check` - `npm run build` - `../scripts/run-hypertwist-sentrux-source-only.sh`