refactor(website): adopt Fumadocs and Astryx#992
Conversation
Read repository Markdown directly through Fumadocs, replace shared handrolled UI with Astryx primitives, and make the social card more compression-resistant while preserving the existing visual identity.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughThe website now consumes repository Markdown through Fumadocs, adds a generated MDX documentation route, adopts Astryx shared UI components and shell styling, and updates sitemap, runtime configuration, discovery headers, and related tests. ChangesWebsite documentation migration
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Browser
participant DocsPage
participant docsSource
participant docsMdxComponents
Browser->>DocsPage: request documentation route
DocsPage->>docsSource: resolve page and navigation
DocsPage->>docsMdxComponents: render MDX content
docsMdxComponents-->>Browser: return documentation UI
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Comment |
Web Tooling Benchmark
18 pinned Web Tooling workloads; 18 workloads produced at least one Goccia sample. Raw results from 1 sample per workload; full stdout/stderr for failures and min/max/CV stay in the |
Suite TimingTest Runner (interpreted: 11,517 passed; bytecode: 11,517 passed)
MemoryGC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.
Benchmarks (interpreted: 439; bytecode: 439)
MemoryGC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.
Boot
Empty-script ( Measured on ubuntu-latest x64. |
Benchmark Results439 benchmarks · PR vs same-runner Interpreted: 🟢 66 improved · 🔴 55 regressed · 318 unchanged · avg +0.7% Typical per-run noise (median variance): interpreted ±1.7%, bytecode ±2.3%. Deltas within noise overlap and read as unchanged. arraybuffer.js — Interp: 14 unch. · avg -0.9% · Bytecode: 🔴 1, 13 unch. · avg -0.6%
arrays.js — Interp: 🟢 2, 17 unch. · avg +0.3% · Bytecode: 🟢 1, 🔴 2, 16 unch. · avg +1.1%
async-await.js — Interp: 6 unch. · avg -0.3% · Bytecode: 6 unch. · avg -1.3%
async-generators.js — Interp: 2 unch. · avg +2.9% · Bytecode: 2 unch. · avg +3.3%
atomics.js — Interp: 6 unch. · avg +1.1% · Bytecode: 🟢 1, 🔴 1, 4 unch. · avg -0.2%
base64.js — Interp: 🟢 1, 🔴 1, 8 unch. · avg +0.3% · Bytecode: 🔴 1, 9 unch. · avg -0.0%
classes.js — Interp: 🟢 2, 🔴 2, 27 unch. · avg -0.3% · Bytecode: 🟢 1, 🔴 3, 27 unch. · avg -1.1%
closures.js — Interp: 11 unch. · avg +1.1% · Bytecode: 🔴 1, 10 unch. · avg -0.6%
collections.js — Interp: 🟢 3, 9 unch. · avg +1.5% · Bytecode: 12 unch. · avg +2.6%
csv.js — Interp: 🔴 2, 11 unch. · avg -0.6% · Bytecode: 🔴 1, 12 unch. · avg +0.6%
destructuring.js — Interp: 🟢 2, 🔴 3, 17 unch. · avg -1.6% · Bytecode: 🟢 2, 20 unch. · avg -0.8%
fibonacci.js — Interp: 8 unch. · avg +0.4% · Bytecode: 8 unch. · avg -0.7%
float16array.js — Interp: 🟢 4, 🔴 3, 25 unch. · avg +0.4% · Bytecode: 🟢 6, 26 unch. · avg +2.8%
for-in/for-in.js — Interp: 3 unch. · avg +2.0% · Bytecode: 3 unch. · avg +5.1%
for-of.js — Interp: 🟢 1, 🔴 1, 5 unch. · avg -0.3% · Bytecode: 🔴 1, 6 unch. · avg -1.4%
generators.js — Interp: 🔴 1, 3 unch. · avg -1.7% · Bytecode: 🟢 1, 3 unch. · avg +3.4%
intl.js — Interp: 6 unch. · avg +0.8% · Bytecode: 6 unch. · avg -0.3%
iterators.js — Interp: 🟢 28, 14 unch. · avg +8.1% · Bytecode: 🟢 4, 38 unch. · avg +0.1%
json.js — Interp: 🔴 8, 15 unch. · avg -3.5% · Bytecode: 🟢 2, 🔴 1, 20 unch. · avg -0.9%
jsx.jsx — Interp: 🟢 2, 🔴 1, 18 unch. · avg +1.0% · Bytecode: 🟢 1, 20 unch. · avg +0.6%
modules.js — Interp: 🟢 2, 7 unch. · avg +0.5% · Bytecode: 🟢 1, 8 unch. · avg +3.1%
numbers.js — Interp: 🔴 3, 9 unch. · avg -3.3% · Bytecode: 12 unch. · avg -3.4%
objects.js — Interp: 7 unch. · avg +0.5% · Bytecode: 🔴 2, 5 unch. · avg -2.8%
promises.js — Interp: 🟢 1, 🔴 2, 9 unch. · avg +0.2% · Bytecode: 🟢 1, 11 unch. · avg -0.1%
property-access.js — Interp: 5 unch. · avg +0.5% · Bytecode: 5 unch. · avg -5.5%
regexp.js — Interp: 🔴 3, 10 unch. · avg -5.5% · Bytecode: 🟢 2, 11 unch. · avg +0.6%
strings.js — Interp: 🟢 2, 🔴 4, 13 unch. · avg -0.8% · Bytecode: 🔴 1, 18 unch. · avg -1.3%
temporal.js — Interp: 🟢 1, 5 unch. · avg +1.4% · Bytecode: 6 unch. · avg +0.4%
tsv.js — Interp: 🟢 3, 6 unch. · avg +9.3% · Bytecode: 🔴 1, 8 unch. · avg -4.0%
typed-arrays.js — Interp: 🔴 18, 4 unch. · avg -18.1% · Bytecode: 🟢 5, 🔴 3, 14 unch. · avg -2.9%
uint8array-encoding.js — Interp: 🟢 4, 🔴 1, 13 unch. · avg +6.7% · Bytecode: 🟢 5, 🔴 4, 9 unch. · avg -1.5%
weak-collections.js — Interp: 🟢 8, 🔴 2, 5 unch. · avg +22.9% · Bytecode: 🟢 5, 10 unch. · avg +30.2%
Deterministic profile diffDeterministic profile diff: no significant changes. Measured on ubuntu-latest x64. Each PR run also builds the |
JetStream 3 Performance Barometer
Geomean reference ratio: QuickJS 26.54×; Node.js 309.41×. 1.00× means aligned; values above 1.00× mean Goccia was proportionally slower after normalizing JetStream’s higher-is-better score. This is a directional barometer across runtimes with different goals, not a product ranking. Raw samples and failure details remain in the |
test262 Conformance
Areas closest to 100%
Per-test deltas (+0 / -0 / timeout +0 / -6)Resolved timeouts (6):
Steady-state failures and timeouts are non-blocking; PASS → non-timeout failure transitions fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached |
AWFY Results
Geomean Ratios
14 pinned AWFY benchmarks. Medians from 5 interleaved samples per engine; raw JSON includes min/max/CV and is attached as the |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@website/src/components/docs-nav.tsx`:
- Around line 14-63: Update the DocsNav grouping logic around GROUPS so every
page is rendered in a SideNavSection. Add a final catch-all “Other” group whose
matcher accepts paths not matched by the preceding groups, preserving the
existing group ordering and avoiding duplicate entries.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ba3ddb40-05f7-4928-b918-3c8e2eb2f082
⛔ Files ignored due to path filters (12)
docs/assets/website-fumadocs-astryx/after-desktop-docs.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-desktop-home.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-mobile-docs-dark.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-mobile-docs-navigation.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-mobile-docs.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-mobile-home.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/after-opengraph.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/before-desktop-docs.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/before-desktop-home.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/before-mobile-docs.pngis excluded by!**/*.pngdocs/assets/website-fumadocs-astryx/before-mobile-home.pngis excluded by!**/*.pngwebsite/bun.lockis excluded by!**/*.lock
📒 Files selected for processing (36)
website/.gitignorewebsite/README.mdwebsite/next.config.d.mtswebsite/next.config.mjswebsite/package.jsonwebsite/scripts/sync-docs.mjswebsite/source.config.tswebsite/src/__tests__/agent-discovery.test.tswebsite/src/__tests__/markdown.test.tswebsite/src/__tests__/sitemap.test.tswebsite/src/app/docs/[[...slug]]/page.tsxwebsite/src/app/docs/[id]/page.tsxwebsite/src/app/docs/page.tsxwebsite/src/app/globals.csswebsite/src/app/opengraph-image.tsxwebsite/src/app/sitemap.tswebsite/src/components/command-tabs.tsxwebsite/src/components/docs-mdx.tsxwebsite/src/components/docs-nav.tsxwebsite/src/components/docs.tsxwebsite/src/components/landing.tsxwebsite/src/components/markdown.tsxwebsite/src/components/numbered-code.tsxwebsite/src/components/performance-dashboard.tsxwebsite/src/components/playground.tsxwebsite/src/components/sandbox.tsxwebsite/src/components/site-shell.tsxwebsite/src/components/test262-dashboard.tsxwebsite/src/lib/agent-discovery-header.mjswebsite/src/lib/agent-discovery.tswebsite/src/lib/doc-source.tswebsite/src/lib/docs-data.tswebsite/src/lib/docs-source.tswebsite/src/lib/goccia-api.tswebsite/src/lib/site-markdown.tswebsite/src/lib/vendor-manifest-server.ts
💤 Files with no reviewable changes (9)
- website/src/app/docs/page.tsx
- website/scripts/sync-docs.mjs
- website/src/lib/doc-source.ts
- website/src/lib/docs-data.ts
- website/src/components/docs.tsx
- website/src/tests/markdown.test.ts
- website/src/components/numbered-code.tsx
- website/src/app/docs/[id]/page.tsx
- website/src/components/markdown.tsx
Summary
README.mdanddocs/**/*.mddirectly through Fumadocs, removing the sync script, copied-content pipeline, registry, and custom Markdown renderer.Visual evidence
Additional checks: espresso docs theme, mobile docs navigation, and revised social card.
Testing
Validation performed:
cd website && bun run lintcd website && bunx tsc --noEmitcd website && bun run test— 158 passedcd website && bun run build— 156 pages generated under Bun./build.pas testrunner && ./build/GocciaTestRunner tests && ./build/GocciaTestRunner tests --mode=bytecode— 11,517 tests and 25,735 assertions passed in each mode./format.pas --check— 428 files formatted