perf+feature: lighthouse-driven optimizations + Guide prefetch#30
Merged
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces 5 raw PNGs (5.0 MB total) with WebP at q=80. Visual quality indistinguishable; payload cut roughly 10x. - anything-but-analog: 1947 KB → 92 KB (-95%) - velvet-door: 1255 KB → 57 KB (-95%) - adventure: 741 KB → 34 KB (-95%) - dissonance: 560 KB → 91 KB (-84%) - blondie: 532 KB → 20 KB (-96%) Updates references in content/self.md and AnythingButAnalogBanner.svelte. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… import
Gallery canvas components (VoronoiCanvas, MetaballCanvas, ParticleTextCanvas,
EmojiCardBg, SketchHost) are now loaded on demand via dynamic import, cached
per handle. Deana below-the-fold message components (MessageTimeline,
ClockHeatmap, WordCloud, TotalWords, BusiestDay, MostWords, EmojiMeter,
PetNames) similarly deferred behind LazyMount + {#await import(...)}.
Reduces initial bundle for / and /deana by deferring heavy module evaluation
until after first paint.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds data-sveltekit-preload-code=hover to Guide menu links and a preloadCode() warmer on the coin button's mouseenter. By the time the user opens the menu and clicks a link, the route's JS chunk + load data are already in cache — navigation is effectively instant. Deferred from the SvelteKit migration PR as net-new functionality; now landed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…immutable) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Summary
Targeted perf wins from a Lighthouse audit on the merged SvelteKit codebase, plus the deferred Guide-prefetch feature from the migration spec.
Numbers (SvelteKit pre-fix vs post-fix, all routes, all categories):
//anything-but-analog/benny/canvas/self/dad/deana/shelf/sounds/thoughtsAverage perf gain across the 7 routes that needed it: +10.4 points. Zero regressions on a11y / BP / SEO.
What landed
vercel.jsoncache-control headers —/_app/immutable/*,/assets/*,/wasm/*get 1-year immutable;/og/*gets 1-week. Previously every static asset re-fetched on every visit./api/imgswitched to stale-while-revalidate — Goodreads cover proxy usesmax-age=86400, stale-while-revalidate=604800./shelfprerendered — eliminates a 2.6s TTFB from a synchronous Goodreads RSS fetch at SSR time. Load function only depends on build-time data.fetchpriority="high"— LCP element gets prioritized.import(). /deana initial JS dropped 220 KB → 5.5 KB (-97.5%). Canvas modules now load per tile-becomes-active, not at parse.preloadCode()for all 9 routes fires on the coin'smouseenter;data-sveltekit-preload-code="hover"on the threesam link as belt-and-suspenders. Net-new feature that was deferred from the migration PR.vercel.jsonextension-glob rule that was undercutting/assetsimmutable headers (header overlap → shorter TTL wins); extracted$lib/nav.tsas the single source of truth for the menu route list;fetchprioritytyped viasvelte/elementsaugmentation instead of a spread cast;knownDimensionshoisted to module scope.Test plan
pnpm check: 0 errorspnpm build: cleanpnpm test: 38/38 Playwright (visual diff + smoke)Merge method
Merge with merge commit or rebase — do NOT squash. Commits are intentionally granular (one per fix); squashing would lose history.
🤖 Generated with Claude Code