Skip to content

Performance: make ArSonKuPik landing static-first and Core Web Vitals friendly - #42

Merged
masarray merged 5 commits into
mainfrom
perf/modern-landing-seo-v7
Sep 12, 2026
Merged

masarray merged 5 commits into
mainfrom
perf/modern-landing-seo-v7

Conversation

@masarray

Copy link
Copy Markdown
Owner

Goal

Harden the ArSonKuPik public landing after the Google site-name fix, using current Google Search, web.dev and Cloudflare Pages guidance: keep the preferred brand identity static and crawlable, reduce startup main-thread work, prioritize the likely LCP image, defer offscreen rendering, and keep sitemap freshness truthful.

Changes

  • Defer the larger release-enrichment runtime until browser idle; the reviewed static HTML remains the safe first-paint/fallback experience.
  • Replace the decorative-heavy landing enhancement runtime with a static-first version: no runtime mutation of title/description metadata, no hero entrance animation, no pointer-depth effect, no scroll-reveal orchestration, and no repeated full-page offsetTop probing.
  • Preserve useful progressive enhancements (product preview, preset filtering, lightweight nav state), initialized during idle time.
  • Add content-visibility: auto + contain-intrinsic-size to long below-the-fold sections so modern browsers can skip initial layout/paint work.
  • Add Cloudflare Pages Link preload headers for the hero WebP on EN/ID homepages, enabling Pages Early Hints before the HTML response completes.
  • Refresh homepage <lastmod> to 2026-09-12 because the homepage structured data/performance behavior changed significantly.

Performance impact from source size/work

  • experience-v4.js: 17,283 B -> 8,311 B (~52% smaller raw).
  • site-v6-core.js (21,994 B) is no longer requested/parsed on the immediate critical path; it is scheduled for browser idle.
  • Critical SEO/title/description content remains in static HTML instead of being rewritten by JavaScript.
  • Hero image remains same-origin WebP, eager, width/height declared, fetchpriority=high, HTML-preloaded, now additionally eligible for Cloudflare Early Hints.

SEO / trust invariants preserved

  • Preferred site name remains ArSonKuPik with the lowercase arsonkupik.pages.dev fallback introduced in SEO: harden ArSonKuPik site-name signals for Google #41.
  • Cloudflare Pages remains canonical; GitHub Pages remains a mirror.
  • Canonical/hreflang/robots/schema/release/download/legal/privacy semantics are unchanged.
  • No fake review/rating schema, no analytics, no third-party font/script dependency, and no aggressive custom cache headers.

Rationale

Google says WebSite structured data is the strongest site-name preference signal and that homepage signals should be consistent. Google also says sitemap lastmod should represent significant changes such as structured-data updates. web.dev recommends making LCP resources discoverable/prioritized, reducing main-thread work, and using content-visibility where appropriate. Cloudflare Pages automatically supports Early Hints and can derive them from Link preload headers.

Validation expected

Existing Pages CI should run P0 release-boundary, SEO, global-discovery P1/P2, rendered canonical artifact, and live SEO validation. No release binary or release manifest changes are included.

@masarray
masarray merged commit 9af3c36 into main Sep 12, 2026
4 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fb313f1e94

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread site/site-v6.js
Comment on lines +42 to +45
if ('requestIdleCallback' in window) {
window.requestIdleCallback(loadCore, { timeout: 1400 });
} else {
window.requestAnimationFrame(() => window.setTimeout(loadCore, 0));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Lock download CTAs before deferring release validation

When the local manifest pauses distribution, users can still click the initially active /releases/latest download links before this idle callback loads site-v6-core.js; the synchronous lockDirectDownloadCtas() that previously enforced the pause is now delayed for up to 1.4 seconds and potentially longer under throttling. Keep the lightweight CTA lock in the immediate loader and defer only release enrichment so a paused or stale release cannot remain temporarily advertised.

AGENTS.md reference: AGENTS.md:L57-L59

Useful? React with 👍 / 👎.

Comment thread site/experience-v4.js
Comment on lines +195 to +199
const initializeEnhancements = () => {
setupPresetExplorer();
setupProductPreview();
setupNavigationState();
root.setAttribute('data-experience-layer', 'v7-static-first');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update validators for the static-first feature set

This replacement removes setupCrossPlatformCopy, setupScrollReveals, setupPointerDepth, and setupSignalAccent, but the repository validators still require those exact tokens. Running python3 tools/validate-premium-landing.py on this commit fails with Audio experience is missing setupCrossPlatformCopy, and the documented validate-public-release.ps1 invokes that validator, so the standard validation suite cannot pass until its assertions are updated to describe the new contract.

AGENTS.md reference: AGENTS.md:L137-L150

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant