Document the frontend migration options - #28
Merged
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Records the phases, the SSR boundary and what the spike established, so the decision is reviewable rather than living in a conversation. Framed as a proposal throughout — phase 1 stands on its own merits, everything after it is contingent on a redesign actually happening. Notes two things the plan got wrong on the first pass. SSR replaces the crawler prerender but NOT the /og-image screenshots, which are a separate use of Browser Rendering and a feature loss if simply deleted; Satori + resvg-wasm is the intended replacement, at the cost of embedded fonts and a designed card rather than a screenshot. And the homepage has nothing data-driven to server-render: all four of its fetches are auth-gated or DOMParser-based. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
playforge-coding
force-pushed
the
docs-sveltekit-migration
branch
from
August 6, 2026 01:10
ff32a77 to
8af8b64
Compare
Renames sveltekit-migration.md to frontend-migration.md and restructures it as a decision record rather than a plan for one framework: what phase 1 established, the SSR boundary (which is framework-independent), four options with their costs, and what two spikes actually showed. Records a negative result worth keeping. @rsbuild/plugin-solid 1.2.2 did not transform JSX under @rsbuild/core 2.1.10 — in a shared config or a dedicated one — emitting React's JSX runtime instead, with no babel loader in the resolved Rspack config. Vite with vite-plugin-solid compiled the identical source correctly. So a Solid app needs Vite today, which removes the "keep your build config, one package, two entries" advantage Solid otherwise had over SvelteKit and lands it on the same two-package shape. oxfmt/oxlint are still preserved, since .jsx stays .jsx. Also keeps the SvelteKit spike's positive findings: a +page.server.js can import @spelling-creator/core/users directly and server-render it with no JavaScript executed, and no browser-tier module leaks into the server bundle. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Stacked on #27. Documentation only.
Renames
sveltekit-migration.md→frontend-migration.mdand restructures it as a decision record rather than a plan for one framework: what phase 1 established, the SSR boundary (framework-independent), four options with their real costs, and what two spikes actually showed.The finding that changed the recommendation
I'd claimed Solid's advantage over SvelteKit was that you keep Rsbuild — one package, two entries, no toolchain churn. The spike disproved it.
@rsbuild/plugin-solid1.2.2 did not transform JSX under@rsbuild/core2.1.10, in a shared config or a dedicated one. Output was React's JSX runtime both times:rsbuild inspectshowed no babel loader in the resolved Rspack config — the plugin is silently a no-op. ScopingpluginReactwithexcludedid not hand the file over. Peer ranges are compatible, so this looks like a v1-era plugin against the v2 plugin API rather than a hard incompatibility, but I could not resolve it.vite8.2.0 +vite-plugin-solid2.11.14 compiled the identical source correctly — Solid'stemplate/insertoutput with getter-based props.Consequence: a Solid app needs Vite today, so it lands on the same two-package, two-build-tool, route-split shape as SvelteKit. oxfmt/oxlint are still preserved, since
.jsxstays.jsx— that advantage survives.Kept from the SvelteKit spike
A
+page.server.jsimporting@spelling-creator/core/usersserver-rendered real data with no JavaScript executed, and no browser-tier module leaked into the server bundle — so thecore/browser/*split holds under a real SSR build, not just under the lint rule.Also recorded
/has nothing data-driven to render (all four fetches auth-gated orDOMParser-based)./og-imagescreenshots; Satori +@resvg/resvg-wasmis the replacement, at the cost of embedded fonts and a designed card rather than a screenshot.useState, 107 destructured props, 70.map(), 44 router sites, and 58forwardRefs that disappear.Verification
pnpm lint,pnpm build:docspass; the page builds and the overview link is updated. No stale references to the old filename. Lockfile untouched.