Skip to content

Run the 2.0 docs site on Solid 2 and add interactive tutorials - #1670

Merged
ryansolid merged 21 commits into
v2-rebuildfrom
claude/project-thread-fpqdr5
Oct 29, 2026
Merged

ryansolid merged 21 commits into
v2-rebuildfrom
claude/project-thread-fpqdr5

Conversation

@ryansolid

Copy link
Copy Markdown
Member
  • I have read the Contribution guide
  • This PR references an issue (except for typos, broken links, or other minor problems)

Description(required)

Spike, do not merge. This moves the v2-rebuild site from solid-js 1.9 with SolidStart onto Solid 2. The goal is to host interactive tutorials on the docs site and to find bugs in the Solid 2 ecosystem along the way.

Stack:

Code changes:

  • Solid 2 API renames throughout: Errored, Loading, onSettled, omit/merge, class arrays, For keyed={false}, split effects, and async createMemo.
  • solid-heroicons and solid-list only support Solid 1. They are replaced with ~icons/heroicons/* and a small local createList.
  • The noindex _headers file for non-production hosts is now written by a small Vite plugin.

Temporary pieces (to swap out before any merge):

Verified locally:

  • All 273 pages prerender, and the production build hydrates cleanly with no console errors.
  • Click-tested sidebar tabs, navigation (including back), the theme selector, code tabs, mobile nav, and search (against a mocked Orama response).
  • check:types and check:lint pass.

Notes:

  • The remaining dev warnings come from effects inside Kobalte alpha.4 (Tabs and Dialog).
  • Hydration hazard: a primitive called only under if (!isServer) shifts hydration ids for everything after it, so every page mismatched until I fixed that call.

Related issues & labels

  • Suggested label(s) (optional): spike

Generated by Claude Code

…rt mode)

Replace SolidStart + Nitro with @solidjs/vite-plugin start mode and
SolidBase's own prerender; port the osmium theme to Solid 2 APIs
(Errored, Loading, onSettled, omit/merge, class arrays, For keyed={false},
clientOnly from @solidjs/web), swap solid-heroicons and solid-list for
~icons/heroicons and a local list helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
- Track route changes in the sidebar tab with a derived signal (drops useBeforeLeave).
- Stop destructuring useLocale() (its getters are memos).
- untrack initial/fixed reads in TabGroup and search rows; untrack preload in the effect.
- Vendor the SolidBase #174 and filesystem-routing #36 builds under spike/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
@bolt-new-by-stackblitz

Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@ryansolid ryansolid self-assigned this Oct 27, 2026
@netlify

netlify Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for solid-docs-v2 ready!

Name Link
🔨 Latest commit f10ecac
🔍 Latest deploy log https://app.netlify.com/projects/solid-docs-v2/deploys/6ae3a87592e352bf7f7a2775
😎 Deploy Preview https://deploy-preview-1670--solid-docs-v2.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@socket-security

socket-security Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Priority Alert  (click "▶" to expand/collapse) Action
Low priority
Low adoption: npm @solid-primitives/a11y

Location: Package overview

From: pnpm-lock.yaml → npm/@kobalte/core@2.0.0-alpha.4 → npm/@solid-primitives/a11y@1.0.0-next.3

ℹ Read more on: This package | This alert | What are unpopular packages?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Unpopular packages may have less maintenance and contain other problems.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@solid-primitives/a11y@1.0.0-next.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Low adoption: npm @solid-primitives/controlled-signal

Location: Package overview

From: pnpm-lock.yaml → npm/@kobalte/core@2.0.0-alpha.4 → npm/@solid-primitives/controlled-signal@1.0.0-next.3

ℹ Read more on: This package | This alert | What are unpopular packages?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Unpopular packages may have less maintenance and contain other problems.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@solid-primitives/controlled-signal@1.0.0-next.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn
Low priority
Low adoption: npm @solid-primitives/focus

Location: Package overview

From: pnpm-lock.yaml → npm/@kobalte/core@2.0.0-alpha.4 → npm/@solid-primitives/focus@1.0.0-next.4

ℹ Read more on: This package | This alert | What are unpopular packages?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Unpopular packages may have less maintenance and contain other problems.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@solid-primitives/focus@1.0.0-next.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn

View full report

autofix-ci Bot and others added 9 commits October 27, 2026 16:57
Dev's 42-lesson Solid 2 curriculum (devagrawal09/solid-site codex/solid-v2)
rendered with the playground's solid-repl (solid-playground#201, vendored
build under spike/).

- Lesson text loads as lazy() components and the files as plain data, so
  the prerendered page hydrates without refetching.
- solidjs.com lesson ids redirect through a generated _redirects file.
- The REPL workers skip re-minification: minifying the prebuilt TypeScript
  worker again breaks its initialization order.
- Header gets a Tutorial link; the layout goes full-bleed under /tutorial.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
- Router 2 preloads links only when asked; restore SolidStart's hover/focus
  preload with intentPreload(). Page chunks match the Solid 1 build.
- The REPL's Panda layers were declared after Tailwind's, so its reset beat
  Tailwind utilities (the Solve button and docs pages lost their padding
  once the tutorial loaded). Declare the layer order up front.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
SolidBase 2.0.0 (kobaltedev/solidbase#174) replaces the vendored build. It
pins @solidjs/router 2.0.0-next.37, so an override keeps the site on one
router copy (next.42).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
Introduction (JSX and components before signals), Components, Stores,
Async, Mutations, then Effects and the DOM. Each starter shows a visible
problem the lesson's API fixes. New lessons: projections, streams,
optimistic stores, until. Former lesson ids alias to their new lesson.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
…console shows

The REPL only opens the entry file, so lesson files like card.jsx stayed
hidden, also after Solve. Remount the REPL per lesson and on Solve/Reset
with a layout that opens all files.

The playground console (chobitsu) does not forward console.count, so the
memos and projections lessons log with console.log instead; projections
now reports how many rows re-checked per click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
States load, cities load for the selected state, and the selected city
derives from the city list. Shows async writable derived state, a held
update that never tears the selection line, and isPending on the
dependent control. Course is now 35 lessons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
esm.sh serves production builds unless a URL asks for dev, so lessons
that point at a dev warning (props, loading, optimistic stores) showed
nothing. The REPL wrapper now seeds a pinned import map with the dev
builds of solid-js, solid-js/internal and @solidjs/web.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
solid-js/internal imports "solid-js" itself. Without marking it external,
esm.sh bundled its own copy, so the page ran two Solid runtimes and the
dev build warned about multiple instances. The playground's default
import map has the same gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
Drops the vendored solid-repl tarball and the import-map workaround now that
the playground externalizes solid-js and serves dev builds itself. Pins one
Solid runtime for the site and its Solid 2 libraries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
Picks up the fix for the action + refresh + isPending loop (#4349), which
the Actions lesson's solution hit on rc.19.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
@ryansolid
ryansolid marked this pull request as ready for review October 29, 2026 20:09
@ryansolid ryansolid changed the title [spike] Run the 2.0 docs site on Solid 2 Run the 2.0 docs site on Solid 2 and add interactive tutorials Oct 29, 2026
solid-repl resolves extensionless imports to jsx tabs only, so the .js
helper files in two lessons failed to import. From #1672.

Co-authored-by: Brenley Dueck <brenleydueck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
SolidBase marks dark mode with data-theme, but the REPL's dark styles need a
.dark class on an ancestor, so its panels stayed light. From #1671.

Co-authored-by: Brenley Dueck <brenleydueck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWPLXmEUSKddsQSHkzN
@ryansolid
ryansolid merged commit e7f3d56 into v2-rebuild Oct 29, 2026
7 of 8 checks passed
@ryansolid
ryansolid deleted the claude/project-thread-fpqdr5 branch October 29, 2026 20:11
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.

2 participants