Uh oh!
There was an error while loading. Please reload this page.
docs(site): lead the homepage title with the category, cut the 614-char description to 152 - #12284
Merged
Merged
Conversation
…-char description The homepage `<title>` was `ObjectStack — Apps small enough for AI to hold whole.` — the maintainer's hero line, but as a `<title>` it is 53 characters carrying no term anyone searches for. The meta description was 614 characters, roughly four times what a search result renders. Title: drop the `absolute` wrapper so the root layout's existing `%s | ObjectStack` template supplies the brand, and lead with the category instead of the slogan. Description: keep sentence one of the existing copy verbatim and cut the rest — it is already a complete sentence at 152 characters. The `<h1>`, the eyebrow, and every other line on the page are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3 tasks
os-zhuang
marked this pull request as ready for review
August 25, 2026 16:30
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 25, 2026
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 freeto 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.
Fixes#12239
One file,
apps/docs/app/[lang]/page.tsx,+2 −4, all of it inside the exportedmetadataobject. Theh1is byte-identical and the uppercase eyebrow above it isuntouched — both proved from rendered HTML below, not from the diff.
The two strings, before and after
Emitted by a running dev server on
/— which the proxy rewrites to/en, so this isapp/[lang]/page.tsxdoing the rendering, not the shadowedapp/page.tsx(finding #12255).Title element
Meta description
Why these words
The description is a cut, not a rewrite — every word is already yours. It is
sentence one of the old description, verbatim, and it is a complete sentence at 152
characters with nothing added. Sentences two through five were the rest of the landing
page pasted into a meta tag; they are still on the page, where they belong. A snippet
that matches the opening paragraph a visitor then reads is the shape you want anyway.
The title needed assembling, and the vocabulary came from the repo. No existing
string was a keyword-shaped title, so this one is built rather than cut — but
AI-writtenis lifted from the site's own site-wide description inapp/layout.tsx("the open target format and runtime for AI-written business apps"), not invented.
The repo spells this idea three ways already (
AI-written,AI-authored,AI-generated);AI-built, the phrasing the card suggested, appears nowhere in thetree, so it would have been a fourth.
Dropping
absoluteis the whole title mechanism.app/layout.tsxalready declarestitle.template: '%s | ObjectStack'. The old value opted out of it withabsolute, fora good reason — it began with the brand, and
ObjectStack — … | ObjectStackreadsbadly. Now that the title leads with the category, the template is simply the right way
to get the brand back, so the page hands it a plain string and the site's own convention
appends the rest. The homepage stops being the one route that bypasses the site title
shape. If the template ever stops applying, this degrades to
Metadata framework for AI-written apps(38 chars) — still inside every bound the card sets.What was left out on purpose.
open sourceandbusiness appsdid not fit under 60characters alongside the brand.
business appsis carried in the description bya complete CRM, a concrete instance of the category;open sourceis already on thepage in the eyebrow (
Open protocol & runtime · Apache-2.0) and in the Apache-2.0 badge.Neither was worth stuffing.
Acceptance, measured on rendered HTML
Metadata frameworkh1byte-identical to todayThe
h1check is a byte comparison of theh1markup extracted from the before andafter HTML, not an eyeball: identical, including the class list and the gradient span.
One
h1on the page, before and after.How it was verified
The change was committed first, so both legs are recoverable from git rather than from
the working tree:
git checkout HEAD~1 -- apps/docs/app/[lang]/page.tsx→ blob on disk hashed and compared to the baseblob:
243e21aa1both sides, so the revert provably landed./fetched (HTTP 200, 81 950 bytes),server torn down by the PID that was started. → the before numbers above.
git checkout HEAD -- apps/docs/app/[lang]/page.tsx→git diff HEADempty, blob7f20305e5matchingHEAD. → restore provably landed.
HTTP 200, 81 003 bytes). → the after numbers.Both servers confirmed gone afterwards (
lsof -ti tcp:PORT→ 0 listeners on each).Gates
All run on the pushed head
1e45188fa, each exit code captured before any pipe, eachline below quoted from the gate's own verdict:
The first three are what
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackderives for this diff;
check:nul-bytesis owed by any edit.pnpm lintis the wholerepo, not a narrowed subset, so no narrowing needs declaring for it.
The typecheck claim is measured rather than assumed:
tsc --noEmit --listFilesputsapps/docs/app/[lang]/page.tsxin the program (1 of 1 236 files), so "typecheck clean"really does cover the edited file.
Declared narrowing — verification ran UNLOCKED.
scripts/pm/os-verify-lock.shcould not take the shared verify lock on this host: no usable
flock. The sharedverify lock is declared Linux-only (
flockis util-linux, and a stock macOS doesnot ship it), so the command below was run directly, without the lock —
a declared narrowing, not a silent one. No serialization guarantee held for this
run, nor for any sibling agent in this container while it ran.
Every command in the table above ran through that entry point and carries that
disclosure.
Corrections to the card
the backslash in
agent\'s; the string that reaches the meta tag is 614. Confirmed onthe rendered HTML, not just in the source. Everything else the card measured holds
exactly: title 53 characters, and the served homepage really is
app/[lang]/page.tsx.so the bytes measured here are the same ones the card measured before that merge.
Landing notes
skip-changesetlabel applied..github/workflows/lint.ymlnorpackage.jsonis touched — no new gate here.the
metadataobject, nowhere near the hero poster, so its rebase should be clean.Generated by Claude Code