DEPLOY_TARGET now selects the adapter; Netlify stays the default and NODE_ADAPTER
keeps working. Cloudflare compresses in transit, so the Worker build aliases
$lib/server/compression to a pass-through that leaves the streaming body alone.
CI builds and dry-run deploys this target. That is compilation and packaging
coverage only, not a production compatibility gate: native sharp still blocks the
share-preview route in the Worker runtime.
- Ship one hashed Tailwind stylesheet instead of two (one render-blocking)
- Compress responses in-app (brotli/gzip, streaming-safe) and precompress
the node build so local and CI measurements match production
- Validate the Supabase session once per request
- Render the homepage immediately and stream public stats
- Stream a Pokedex's entries with the page instead of fetching after
hydration, running the rows and count queries in parallel
- Shrink the avatar and offline placeholder images, fix layout shift,
contrast, link names and missing meta descriptions
- Add Lighthouse CI (mobile + desktop) with score and metric budgets,
bundle-size budgets in the build tests, and signed-in speed scenarios
Three defects that together meant `npm run test:build` could not pass in any of
its four variants:
- svelte.config.js constructed adapter-netlify inline and never used the
`adapter` export from adapter.mjs, so NODE_ADAPTER=true still produced a flat
build/ directory while the build test expects the node adapter's build/client
layout. adapter.mjs now returns netlify (the deployment target) or node, and
svelte.config.js consumes it.
- No route is prerendered, so workbox's glob found no HTML document and a
generateSW build precached nothing navigable: the app had no offline support
in that mode at all. Adds the root entry and a navigation fallback, matching
what prompt-sw.ts already did by hand for injectManifest builds.
- The build scripts used by the tests skipped the tailwind step that `build`
runs, so static/output.css was never generated on a clean checkout and the
app under test had no stylesheet.
The offline entry point assertion now also accepts the unquoted object key that
prompt-sw.ts's own precache call survives minification as.