Add localized Concierge product page - #114
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 49e7bbeb9b
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| window.requestAnimationFrame(() => { | ||
| if (!this.scrollSpyReady) { | ||
| this.setupScrollSpy(); | ||
| } | ||
| }); |
There was a problem hiding this comment.
Cancel the pending scroll-spy setup on teardown
If the user leaves /concierge before the next animation frame, this callback runs after ngOnDestroy(), finds the detached pageRoot, and installs the window scroll/resize/hashchange listeners after the teardown loop has already completed. Those listeners retain the destroyed component indefinitely and accumulate on repeated rapid visits; store and cancel the setup frame or guard it with a destroyed flag.
Useful? React with 👍 / 👎.
| if (this.browser && navigator.clipboard?.writeText) { | ||
| void navigator.clipboard.writeText(block.innerText).catch(() => undefined); | ||
| } | ||
|
|
||
| this.copied = true; |
There was a problem hiding this comment.
Report copy success only after the clipboard write succeeds
When the Clipboard API is unavailable or writeText() rejects—for example in a restricted browser context—the rejection is discarded and copied is still set to true, so the button tells the user the example was copied even though the clipboard was unchanged. Set the success state only after the promise resolves and provide failure or fallback behavior for the other paths.
Useful? React with 👍 / 👎.
| @@ -0,0 +1,1503 @@ | |||
| @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&family=Poppins:wght@100;200;900&family=Space+Mono:wght@400;700&display=swap'); | |||
There was a problem hiding this comment.
Allow the page's Google Fonts through production CSP
In the deployed Express environment, showcase/server/server.js sends a CSP whose style-src allows only self, cdnjs, and unpkg and whose font-src likewise omits Google, so this fonts.googleapis.com import—and the resulting fonts.gstatic.com font files—is blocked. Consequently the new page always falls back from Outfit, Poppins, and Space Mono in production; either self-host these fonts or add both required origins to the production policy.
Useful? React with 👍 / 👎.
Adds a fully responsive Concierge product page with package guidance, quick start, security/runtime sections, route metadata, JSON-LD, canonical/hreflang output, and component coverage.
Publishes the page throughout prerendering, server allowlists, navigation/footer links, sitemap, LLM crawler docs, and all five translated catalogs while refreshing translation audit artifacts.
Consolidates shared footer layout and fixes dashboard QR scanner CDN/startup lifecycle handling with regression tests.
Verification: production build, focused Karma tests (8), i18n lint, translation drift/quality/tooling, hreflang (601 assertions), and local crawler smoke (133 assertions); the production crawler smoke only reports the not-yet-deployed
/conciergeroute.