Repository navigation
docs(site): objectstack.ai becomes the developer site — one-line positioning, start command, docs entry points, "Run it" strip; blog redirects to objectos.ai - #26165
Merged
os-zhuang merged 2 commits intoOct 27, 2026
Conversation
…tioning, start command, docs entry points, "Run it" strip The landing no longer opens with the product hero that www.objectos.ai also carries. It renders the slogan as a kicker, one line of positioning ("ObjectStack is the open protocol and SDK that ObjectOS is built on ..."), the start command block, the five docs entry points (Getting started, Concepts, Spec, CLI, Build with Claude Code), the GitHub link, the "Run it" strip naming the three ObjectOS editions, and a footer line labelling the two sites by role. The former idea / loop / gates / vocabulary sections shrink to one four-link row into the docs pages that carry that content. The header gains a `Product` entry to the product site; the product-site origin is declared once (`redirects.mjs`, the dependency-free module) and re-exported for the layout. The click-to-play YouTube embed had one consumer, the retired hero, and is removed with it. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FMuBZmssbfQkVrKRtxNvng
www.objectos.ai hosts the one blog. The four posts this site published under `/blog/<slug>` — and the `/en/blog/<slug>` spelling they were prerendered under — answer a permanent redirect to the product site's imported counterpart at `/en/blog/<slug>/`, and `/blog` to its index. The `.mdx` sources and the blog route stay in the tree for now; their removal is the follow-up once the redirects are measured on production. A second table beside `docsRedirects` on purpose: `check:docs-redirects` resolves every destination of that table against `content/docs` and reports an off-site destination as UNRESOLVABLE, which is right for a docs redirect and meaningless for a cross-site one. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FMuBZmssbfQkVrKRtxNvng
Contributor
Author
席位核对 · ACCEPT (landing held) · 2026-10-26T14:43Z ·
|
os-zhuang
approved these changes
Oct 27, 2026
os-zhuang
marked this pull request as ready for review
October 27, 2026 00:47
os-zhuang
deleted the
claude/issue-26140-objectstack-ai-developer-site
branch
October 27, 2026 01:03
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.
Fixes #26140
objectstack.ai is the developer site; www.objectos.ai is the product site and the one blog (maintainer ruling 2026-10-26, 「同意」「立卡派发」 13:24Z). This PR makes the landing read that way and sends the blog to the product site.
What changed
Landing (
apps/docs/app/[lang]/page.tsx) — the product hero (display headline, four-verb line, the 90-second video, the prose block, and the idea / loop / gates / vocabulary sections in full) is replaced by:npm create objectstack@latest my-app·cd my-app·npx os dev --ui— the spellingcontent/docs/getting-startedteaches;/docs/getting-started), Concepts (/docs/concepts), Spec (/docs/protocol), CLI (/docs/deployment/cli), Build with Claude Code (/docs/getting-started/build-with-claude-code) — every route exists undercontent/docs;/docs/concepts/ontology; The loop →/docs/getting-started/build-with-claude-code; The gates →/docs/getting-started/how-ai-development-works(its "Why it's safe" section is the guardrail story); The vocabulary →/docs/capabilities. All four pages exist, so no section stays in compact form and no docs page was created;/docs/deployment/self-hosting), ObjectOS Cloud and ObjectOS Enterprise (→ https://www.objectos.ai). It replaces the closing sentence "Rather build & ask online? Try ObjectOS";objectstack.ai — Developer docs & protocol·www.objectos.ai — Product, editions & blog. Both hosts are read from the constants that own them (SITE_ORIGIN,PRODUCT_SITE_URL), never spelled twice.Navigation (
apps/docs/lib/layout.shared.tsx) — the header gainsProduct(external, → https://www.objectos.ai) besideWhyandBlog.PRODUCT_SITE_URLis exported for the landing; the origin itself is declared once, inredirects.mjs(the dependency-free module the redirect gate imports), and re-exported here.Blog redirects (
apps/docs/redirects.mjs, the second commit, fb85c54) — ablogRedirectstable besidedocsRedirects:/blog→https://www.objectos.ai/en/blog/, and each of the four posts (context-window-is-the-constraint,metadata-driven-architecture,protocol-first-development,the-ontology-is-the-software) at/blog/SLUGand at the prerendered/en/blog/SLUG→https://www.objectos.ai/en/blog/SLUG/, all permanent (308). A second table on purpose:check:docs-redirectsresolves everydocsRedirectsdestination againstcontent/docsand reports an off-site destination as UNRESOLVABLE — right for a docs redirect, meaningless for a cross-site one. The.mdxsources undercontent/blogand theapp/[lang]/blogroute stay in the tree; removing them is the follow-up once the redirects are measured on production.Removed —
apps/docs/components/youtube-embed.tsx: its only consumer was the retired hero.Sequencing — this PR lands after www.objectos.ai#286
The redirect commit points at the posts www.objectos.ai#286 imports under the same slugs at
/en/blog/SLUG/. The seat lands this PR after that import is live on the product site, so no redirect ever answers into a 404. Until then the posts stay served here, and nothing in this PR needs to land before #286.Clause-②: no
Metadata-protocol: none
How it was verified
All readings on head
fb85c546(the final commit; nothing was pushed after the union ran). The live sites are not reachable from this container, so every reading is source-level or against the locally built app.pnpm --filter '@objectstack/docs^...' build(the closure:@objectstack/spec) under the verify lock —VERDICT command-exit 0.pnpm --filter @objectstack/docs typecheck(fumadocs-mdx && next typegen && tsc --noEmit) under the lock —VERDICT command-exit 0.pnpm --filter @objectstack/docs build(=pnpm docs:build:gen:schema,gen:docs,gen:upgrade-guide,build-llms-full,next build) under the lock —✓ Compiled successfully in 3.8min,✓ Generating static pages using 2 workers (1287/1287) in 68s,VERDICT command-exit 0;git statusclean afterwards.next starton a random port and probed with curl (status + redirect URL):/blog→308 https://www.objectos.ai/en/blog//blog/the-ontology-is-the-software→308 https://www.objectos.ai/en/blog/the-ontology-is-the-software//en/blog/the-ontology-is-the-software→308 https://www.objectos.ai/en/blog/the-ontology-is-the-software/(no 307 hop through the locale proxy:redirects()runs before it)/en/blog→ 308 to their counterparts;/blog/not-a-post→ 404 (unchanged);/docs/guides/cheatsheets/quick-reference→ 308 to/docs/getting-started/quick-reference(an existing docs redirect, unchanged).next/routes-manifest.jsoncarries 10 redirects whose destination namesobjectos.ai/renders the positioning sentence (heading, title, description, Open Graph, JSON-LD), the three start commands, the five entry points, the four-link row,ObjectOS Community/ObjectOS Cloud/ObjectOS Enterpriseunder "Run it", theProductnav entry and the two role labels — each confirmed bygrep -con the served HTML; the document title readsThe open protocol and SDK ObjectOS is built on | ObjectStacknpx eslint --no-inline-configon the three edited files — exit 0.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, 31 commands) run with each exit code captured before any pipe — all 31 exit 0;--ranreconciliation:31 derived, 31 run, 0 NOT-MEASURED, 0 UNRUN. Among thempnpm check:docs-redirects(98 entries … 0 outside the /docs route space),pnpm check:published-readme-links,pnpm check:docs-locale-catch-all,check-docs-nav-label,check-doc-frontmatter,pnpm check:nul-bytes.pnpm lint(repo-wide eslint, insideLint & Repo Gates),TypeScript Type Check,Build Core,Test Core,Check Documentation Links(lychee overcontent/**), and the docs production-build job inci.yml(itsapps/docs/**path filter fires on this diff).Acceptance notes
apps/docsis private and nothing under a published package'sfiles[]moved —skip-changesetis declared on this PR.WhyandBlogentries stay site-relative (/blog/the-ontology-is-the-software,/blog); after this PR they resolve through the new redirects to the product site's blog. Re-pointing or dropping them belongs to the follow-up that deletes the blog route and sources.app/sitemap.tsstill lists/blogand the four posts (it derives them from theblogloader); once the redirects are live those entries point at redirecting URLs. They disappear with the same follow-up (the loader's collection goes withcontent/blog);sitemap.tsis outside this card's file surface and is not touched here./blog/...(content/blog/metadata-driven-architecture.mdx:9,content/blog/protocol-first-development.mdx:9,content/blog/the-ontology-is-the-software.mdx:124,content/docs/concepts/compare.mdx:124) are relative links to redirected pages — they keep working through the redirect; none is an in-page embed. Docs content is out of scope here.HERO_COVER.alt(lib/site.ts) still reads the slogan; the cover remains the site's Open Graph image, which the ruling keeps ("the slogan lives on").apps/docs/app/[lang]/layout.tsxcarries acn: '中文'entry inLANGUAGE_NAMESwith no such locale declared inlib/i18n.ts— pre-existing dead entry, observation only, not touched..claude/agents/os-dev.md, enforced by the pre-push hook): both commits were reworded before their first push; no published history was rewritten.Generated by Claude Code