feat(app): L5 instant marketing navigations - #176
Merged
Conversation
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.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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
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.
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))
|
🎉 This PR is included in version 1.388.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Review follow-up
loader.config({ monaco })withoutMonacoEnvironment.getWorkerbreaks workers under Next/Turbopack. Now pins jsDelivr to the installedmonaco-editorsemver frompackage.jsonso editor + workers stay aligned.