Files
open-design/plugins/_official/examples
e02a36f51c feat(examples): add Open Design homepage — interactive 3D showcase (#5355)
* feat(examples): add Open Design homepage — interactive 3D showcase

Adds the live open-design.ai homepage as a first-party, self-contained
example: an interactive React Three Fiber / Next.js hero with a real-time
3D "Open Design" wordmark, sticker collage, variable fonts, cursor
parallax, and scroll-driven motion. Renders in the sandboxed powered
preview.

Made repo- and preview-safe without touching the app's runtime:
- 3D geometry Draco-compressed (KHR_draco_mesh_compression): hero wordmark
  4.4MB -> 300KB, cnt 2.2MB -> 548KB, decoded by the bundled DRACOLoader.
  Visually identical (verified).
- Work/sticker imagery converted to LOSSLESS WebP: pixel-identical to the
  source PNGs (alpha + visible-pixel diff = 0), 12.2MB -> 7.1MB.
- Every file now < 1MB, so the template is fully self-contained in-repo
  with no external asset host.
- Path-portable so it renders from the nested preview subpath, not just
  the site root: absolute asset paths made relative; font/bgm URLs derived
  from document.baseURI instead of window.location.origin; App-Router
  createHrefFromUrl pinned to "/" and history push/replaceState URL
  neutralized so hydration matches and baseURI stays put (fixes the
  React #418 + broken relative-asset resolution seen when serving a
  Next RSC bundle from a subpath).

Verified end-to-end from a deep subpath: 3 Draco models + 41 WebP + 3
fonts load, zero 404s, zero console errors, no hydration error,
interactive (scroll/cursor).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(examples): list the full asset set in open-design homepage manifest

Addresses review: od.context.assets previously listed only the design
assets (models, fonts, imagery, bgm) and omitted the Next runtime chunks
under assets/_next/. Applying the plugin would stage an incomplete copy
of the static export, missing the runtime files example.html needs to
render. Now lists every file the entry requires (example.html + all 54
files under assets/, including the _next chunks + css). Also cleaned up
the truncated od.useCase.query text into a complete sentence.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(examples): complete the open-design homepage asset closure

Addresses the review's local-asset-closure blocker (three dangling
references the mirror never captured):
- Restore the Next polyfills chunk assets/_next/.../a6dad97d9634a72d.js
  (referenced by the noModule fallback script; modern browsers skip it,
  so it never 404'd at runtime but left the closure incomplete).
- The work grid's passcode-protected /2026 tile pointed at
  work/tt01|tt02 images that were never in any mirror source (they 404
  on the live site too). Add lockscreen placeholder images in the site
  palette so the reference resolves and — importantly — the client work
  data still matches the server-rendered HTML (removing the tile instead
  reintroduced a React #418 text hydration mismatch).
- od.context.assets now lists the full closure (58 entries).

Also corrected the manifest/SKILL 'zero external dependencies' wording:
the Draco decoder is fetched from Google's gstatic CDN on demand (same
pattern as the other WebGL examples); everything else is bundled locally.

Re-verified from a preview subpath: 3 Draco models + fonts + imagery
load, zero local 404s, zero console errors, no #418.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(examples): remove third-party network calls + committed key from homepage bundle

Addresses review: the bundled preview shipped two undisclosed external
requests, contradicting the manifest/SKILL 'only Draco loads externally'.

- useWeather() made a live QWeather request with a hardcoded API key
  (devapi.qweather.com/...&key=...) to append a live temperature to the
  clock HUD. Replaced the fetch with static data ({now:{temp:"19"}}) —
  no network call, key removed from the bundle. The HUD still shows a
  temperature (static, as befits a mirror showcase).
- Removed the Vercel toolbar injection IIFE (vercel.live/_next-live/
  feedback/feedback.js + a data-deployment-id). It was cookie-gated to
  Vercel team members so it never fired in preview, but it left a
  committed external endpoint in a first-party plugin.

Re-verified from a preview subpath: the ONLY external request is now the
gstatic Draco decoder (as the manifest states); 3 models + fonts +
imagery load, zero local 404s, zero console errors, no #418.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Tuola Ge <gexingli@refly.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 12:42:32 +00:00
..