Conversation
…racking, and scaffolds for 17 new topics
Replace per-topic page files with a single [category]/[topic] route driven by the topic registry, add the shared visualization primitives (toolbar, example picker, source panel, explanation toggle, flow connector), the step audit script, and the docs and skills that describe them. Content review fixes: - Garbage collection: rewrite the forgotten timer example so the leak is real (closure over a local that outlives its frame, not a nulled binding) - Modules: circular import example uses var and explains the let/const TDZ case - Debounce/throttle: a wrapper recreated per render fires too often, it does not stop firing - Context: memoize the consumer re-render example so the parent re-render does not mask the context effect - Hooks, virtual DOM, suspense, server components, concurrent rendering, Angular, type coercion, scope chain: wording and accuracy corrections - Remove hidden em dashes from promises and generators Playback: reset the step index synchronously when the example changes and derive the playing flag so playback stops at the last step without a setState inside the effect.
Set up Vitest with jsdom and React Testing Library, covering the topic and category registries, metadata, sitemap and robots, the sandbox parser and generators, the progress and explanation stores, shared hooks, and the shared visualization primitives. A convention suite sweeps every topic for folder shape, step data, and copy rules. Move the step audit rules into scripts/lib/stepAudit.ts so they can be unit tested and reused by the convention suite. Harden registry lookups against prototype keys with Object.hasOwn, and validate stored topic progress so non-object JSON falls back to an empty map. CI now runs the suite on Node 22 between the format check and the step audit. Document the setup in docs/testing.md.
Category pages get All, Beginner, Intermediate, and Advanced chips with a count per level. The selected level lives in the level query parameter so a filtered view can be shared, written with replaceState so it adds no history entries. Pages stay static: the server render lists every topic and the URL value is applied after hydration through useSyncExternalStore. Levels with no topics in a category render disabled rather than hidden, empty groups collapse, and filtered cards keep their registry index.
A sidebar link clicked with the mouse keeps focus after navigation, so the first arrow key painted the focus ring on it. Playback shortcuts now blur a focused link before acting; buttons and inputs keep their focus.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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
Verification