Skip to content

feat(app): L5 instant marketing navigations - #176

Merged
mkayander merged 11 commits into
mainfrom
cursor/l5-instant-marketing-8f0a
Aug 29, 2026
Merged

feat(app): L5 instant marketing navigations#176
mkayander merged 11 commits into
mainfrom
cursor/l5-instant-marketing-8f0a

Conversation

@mkayander

@mkayander mkayander commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Review follow-up

  • Fixed high-severity Monaco loader issue: bundled loader.config({ monaco }) without MonacoEnvironment.getWorker breaks workers under Next/Turbopack. Now pins jsDelivr to the installed monaco-editor semver from package.json so editor + workers stay aligned.
Open in Web Open in Cursor 

Suspense-split root locale headers() via RootHtmlShell and remove root
instant=false. Cache locale bundles with use cache; wrap session and
playground device hints in LocaleAppLayoutRuntime Suspense with an
instant shell fallback.

Opt marketing pages into instant=true; keep playground/profile at
instant=false. Add @next/playwright instant() e2e tests for client
navigations between /, /privacy, and /daily.
@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dstruct Ready Ready Preview Aug 29, 2026 8:16pm

Address deep review findings on L5 instant marketing:

- Remove LocaleAppLayout Suspense swap that remounted TrpcProvider/Redux
  on every hard navigation (session flash, lost client state).
- Restore single AppRootLayoutClient with parallel session/i18n/headers load.
- Drop root Suspense fallback that hardcoded lang=en/dir=ltr; read locale
  header directly in RootHtmlShell with root instant=false.
- Re-add locale layout instant=false (session/headers runtime reads).
- Add e2e regression for /ar html dir=rtl.
@mkayander
mkayander marked this pull request as ready for review August 23, 2026 20:59
Decorative home 3D models showed gray radial-gradient masks with
'THREE.WebGLRenderer: Context Lost' after navigating away and back.

Add WebGLCanvasShell: defer mount one frame, dispose renderer on
unmount, and remount on webglcontextlost. Use it from LogoModelView
and PythonLogoModelView.
Assert active WebGL canvases on home after privacy round-trip with no
Context Lost console errors, and remount after WEBGL_lose_context.
Reset isReady on WebGLCanvasShell cleanup so Cache Components Activity
boundaries recreate canvases after gl.dispose(). Defer context-loss remount
one frame and tighten e2e helpers (footer privacy link, active-canvas-only
lose_context, instant-nav WebGL assertion).
Defer Monaco mount one frame and reset on cleanup so Cache Components
Activity hide-show cycles recreate the editor instead of rendering against
a disposed InstantiationService. Clear CodePanel refs on unmount.

Add e2e that navigates home ↔ playground three times and asserts Monaco
stays visible with no dispose/domNode console errors.
Add pythonRunner.release() and usePlaygroundRuntimeRelease so Pyodide
terminates when playground hides under cacheComponents. Extract shared
useDeferredClientMount for WebGL and Monaco shells. Cancel benchmark
throttleWithRAF on unmount.

Add e2e for Pyodide playground leave/return, hero preview instant nav,
and document heavy-client lifecycle policy.
Stabilize useDeferredClientMount with a ref + useLayoutEffect so cleanup
identity changes do not remount WebGL/Monaco. Reject superseded Pyodide
inits on release(), swallow cancelled init in usePythonCodeRunner, and
tighten e2e runtime error collectors. Add unit tests.
- Run deferred-mount cleanup in useLayoutEffect so WebGL/Monaco dispose
  synchronously before Cache Components hides the route
- Expose mountKey from useDeferredClientMount for fresh client instances
- Bundle monaco-editor via loader.config instead of jsDelivr CDN
- Explicitly dispose Monaco editor on Activity hide; remount with mountKey
- Release Pyodide with useLayoutEffect for the same hide timing
Bundling monaco via loader.config({ monaco }) without MonacoEnvironment
workers breaks language services under Next/Turbopack. Pin jsDelivr to the
package.json semver instead so editor and workers stay aligned.
@mkayander
mkayander merged commit 86976aa into main Aug 29, 2026
6 of 7 checks passed
github-actions Bot pushed a commit that referenced this pull request Aug 29, 2026
# [1.388.0](v1.387.0...v1.388.0) (2026-08-29)

### Features

* **app:** L5 instant marketing navigations ([#176](#176)) ([86976aa](86976aa))
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 1.388.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants