Fix website labels, hero console alignment, and example file extensions#423
Conversation
- Update installation page and nav copy to use "Installation" - Show example file extensions in the playground and hero - Adjust hero layout and example metadata for typed samples
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✅ Files skipped from review due to trivial changes (2)
📝 WalkthroughWalkthroughRenames "Install" to "Installation" across UI and metadata, adds an optional Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
website/src/app/installation/page.tsx (1)
7-23:⚠️ Potential issue | 🟠 MajorFix inconsistent social/OG titles (“Install” vs “Installation”).
metadata.titleis updated to "Installation", but bothopenGraph.titleandtwitter.titleremain "Install · GocciaScript". This will produce inconsistent titles in social previews and potentially for bots/SEO.Suggested patch
export const metadata: Metadata = { title: "Installation", description: "Install GocciaScript — one-line installer, prebuilt binaries, or build from source. Single self-contained runtime, no Node.js required.", alternates: { canonical: "/installation" }, openGraph: { - title: "Install · GocciaScript", + title: "Installation · GocciaScript", description: "Install GocciaScript — one-line installer, prebuilt binaries, or build from source.", url: "/installation", }, twitter: { - title: "Install · GocciaScript", + title: "Installation · GocciaScript", description: "Install GocciaScript — one-line installer, prebuilt binaries, or build from source.", }, };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@website/src/app/installation/page.tsx` around lines 7 - 23, The metadata object has inconsistent titles: metadata.title is "Installation" while openGraph.title and twitter.title are "Install · GocciaScript"; update openGraph.title and twitter.title to match metadata.title (e.g., "Installation · GocciaScript" or simply "Installation") so social/OG and Twitter previews are consistent; change the values in the metadata.openGraph.title and metadata.twitter.title properties to the same canonical title used in metadata.title.
🧹 Nitpick comments (3)
website/src/components/playground.tsx (1)
382-389: Good: render filename suffix viaexample.extwith fallback.The updated header (
{example.id}.{example.ext ?? "js"}) is correct given the newExample.ext?: stringfield and preserves backward compatibility for examples withoutext.Optional: if you want extra safety against misconfigured empty strings, consider
example.ext?.trim() || "js"instead of nullish-only fallback.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@website/src/components/playground.tsx` around lines 382 - 389, The header rendering currently uses {example.id}.{example.ext ?? "js"} which is fine; to guard against empty-string ext values, change the fallback to use a trimmed truthy check: treat example.ext trimmed as the extension or fall back to "js". Update the expression where the header is rendered (referencing example.id and example.ext) so it uses the trimmed-or-default logic (e.g., check example.ext?.trim() and default to "js").website/src/lib/examples.ts (1)
6-12: Clarify/guard theextcontract (expected format).
Example.extis currentlystring, and the playground renders it asexample.id.{example.ext ?? "js"}(so it assumesextis something like"ts"/"js"without a leading dot). Ifextever becomes""or".ts"by mistake, the UI could showcoffee-typed.orcoffee-typed..ts.Consider either:
- constraining the type (e.g., union of allowed extensions), or
- documenting/normalizing (e.g., ensure no leading
.and non-empty).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@website/src/lib/examples.ts` around lines 6 - 12, Example.ext's contract is unclear: the UI expects a non-empty extension without a leading dot (rendered as example.id.{example.ext ?? "js"}), so guard/normalize it; either change the Example type to a union of allowed values (e.g., "js" | "ts" | "jsx" | "tsx") to enforce valid extensions, or keep ext as string but ensure normalization where examples are created or consumed (strip any leading '.' and default empty/undefined to "js") — update references to Example.ext and the rendering logic that builds example.id.{...} to use the normalized/validated value.website/src/components/landing.tsx (1)
196-206: LGTM — hero header now showscoffee-typed.tsconsistently.The rendered filename suffix in the hero card is updated to the
.tsform and should visually match what the playground expects forexample=coffee-typed.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@website/src/components/landing.tsx` around lines 196 - 206, The hero header now correctly displays "coffee-typed.ts" in the JSX span inside the code-card (look for the span with className "flex-1" in the component return block) so no code change is needed; approve the change, but if you want to be explicit ensure the source string used for the filename is exactly "coffee-typed.ts" wherever it is derived (the JSX span and any mapping that reads example=coffee-typed) so the playground and UI remain consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@website/src/app/installation/page.tsx`:
- Around line 7-23: The metadata object has inconsistent titles: metadata.title
is "Installation" while openGraph.title and twitter.title are "Install ·
GocciaScript"; update openGraph.title and twitter.title to match metadata.title
(e.g., "Installation · GocciaScript" or simply "Installation") so social/OG and
Twitter previews are consistent; change the values in the
metadata.openGraph.title and metadata.twitter.title properties to the same
canonical title used in metadata.title.
---
Nitpick comments:
In `@website/src/components/landing.tsx`:
- Around line 196-206: The hero header now correctly displays "coffee-typed.ts"
in the JSX span inside the code-card (look for the span with className "flex-1"
in the component return block) so no code change is needed; approve the change,
but if you want to be explicit ensure the source string used for the filename is
exactly "coffee-typed.ts" wherever it is derived (the JSX span and any mapping
that reads example=coffee-typed) so the playground and UI remain consistent.
In `@website/src/components/playground.tsx`:
- Around line 382-389: The header rendering currently uses
{example.id}.{example.ext ?? "js"} which is fine; to guard against empty-string
ext values, change the fallback to use a trimmed truthy check: treat example.ext
trimmed as the extension or fall back to "js". Update the expression where the
header is rendered (referencing example.id and example.ext) so it uses the
trimmed-or-default logic (e.g., check example.ext?.trim() and default to "js").
In `@website/src/lib/examples.ts`:
- Around line 6-12: Example.ext's contract is unclear: the UI expects a
non-empty extension without a leading dot (rendered as example.id.{example.ext
?? "js"}), so guard/normalize it; either change the Example type to a union of
allowed values (e.g., "js" | "ts" | "jsx" | "tsx") to enforce valid extensions,
or keep ext as string but ensure normalization where examples are created or
consumed (strip any leading '.' and default empty/undefined to "js") — update
references to Example.ext and the rendering logic that builds example.id.{...}
to use the normalized/validated value.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: fa6828bd-3a83-4603-a777-2843ee7a252d
📒 Files selected for processing (7)
website/src/app/globals.csswebsite/src/app/installation/page.tsxwebsite/src/components/install.tsxwebsite/src/components/landing.tsxwebsite/src/components/playground.tsxwebsite/src/components/site-shell.tsxwebsite/src/lib/examples.ts
Suite Timing
Measured on ubuntu-latest x64. |
Benchmark Results386 benchmarks Interpreted: 🟢 14 improved · 🔴 347 regressed · 25 unchanged · avg -7.2% arraybuffer.js — Interp: 🔴 12, 2 unch. · avg -7.1% · Bytecode: 🔴 4, 10 unch. · avg -1.3%
arrays.js — Interp: 🔴 19 · avg -8.9% · Bytecode: 🔴 4, 15 unch. · avg -1.1%
async-await.js — Interp: 🔴 4, 2 unch. · avg -8.5% · Bytecode: 🟢 1, 🔴 1, 4 unch. · avg +0.3%
base64.js — Interp: 🔴 9, 1 unch. · avg -8.6% · Bytecode: 10 unch. · avg -1.7%
classes.js — Interp: 🔴 29, 2 unch. · avg -7.1% · Bytecode: 🔴 5, 26 unch. · avg -1.6%
closures.js — Interp: 🔴 11 · avg -8.4% · Bytecode: 🔴 7, 4 unch. · avg -2.5%
collections.js — Interp: 🔴 11, 1 unch. · avg -9.0% · Bytecode: 🟢 2, 🔴 1, 9 unch. · avg -0.3%
csv.js — Interp: 🔴 13 · avg -10.4% · Bytecode: 🔴 5, 8 unch. · avg -1.8%
destructuring.js — Interp: 🔴 21, 1 unch. · avg -8.3% · Bytecode: 🔴 3, 19 unch. · avg -1.4%
fibonacci.js — Interp: 🔴 8 · avg -9.2% · Bytecode: 🔴 3, 5 unch. · avg -2.3%
float16array.js — Interp: 🟢 4, 🔴 24, 4 unch. · avg -4.0% · Bytecode: 🟢 12, 🔴 2, 18 unch. · avg +3.0%
for-of.js — Interp: 🔴 6, 1 unch. · avg -6.2% · Bytecode: 🟢 1, 🔴 4, 2 unch. · avg -0.4%
helpers/bench-module.js — Interp: 0 · Bytecode: 0
iterators.js — Interp: 🔴 42 · avg -9.4% · Bytecode: 🟢 2, 🔴 18, 22 unch. · avg -2.1%
json.js — Interp: 🔴 19, 1 unch. · avg -9.8% · Bytecode: 🔴 4, 16 unch. · avg -0.9%
jsx.jsx — Interp: 🔴 21 · avg -7.6% · Bytecode: 🔴 7, 14 unch. · avg -2.6%
modules.js — Interp: 🔴 9 · avg -8.3% · Bytecode: 🔴 1, 8 unch. · avg -0.3%
numbers.js — Interp: 🔴 11 · avg -7.5% · Bytecode: 🟢 1, 🔴 3, 7 unch. · avg -0.9%
objects.js — Interp: 🔴 7 · avg -8.4% · Bytecode: 7 unch. · avg -0.9%
promises.js — Interp: 🔴 10, 2 unch. · avg -6.6% · Bytecode: 🟢 5, 🔴 2, 5 unch. · avg +1.4%
regexp.js — Interp: 🔴 11 · avg -7.1% · Bytecode: 🟢 2, 9 unch. · avg +0.8%
strings.js — Interp: 🔴 19 · avg -13.7% · Bytecode: 🟢 5, 🔴 6, 8 unch. · avg -7.7%
tsv.js — Interp: 🔴 9 · avg -10.9% · Bytecode: 🟢 1, 🔴 2, 6 unch. · avg -1.0%
typed-arrays.js — Interp: 🟢 4, 🔴 14, 4 unch. · avg -3.0% · Bytecode: 🟢 6, 🔴 14, 2 unch. · avg -2.8%
uint8array-encoding.js — Interp: 🟢 6, 🔴 8, 4 unch. · avg +9.4% · Bytecode: 🟢 2, 🔴 7, 9 unch. · avg -17.7%
Measured on ubuntu-latest x64. Benchmark ranges compare cached main-branch min/max ops/sec with the PR run; overlapping ranges are treated as unchanged noise. Percentage deltas are secondary context. |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
justify-content: flex-start)coffee-shop.jstocoffee-typed.ts(matching the playground link)extfield so typed examples (types,enums,coffee-typed) display.tsin the playground