Skip to content

site(pricing): split /pricing into ObjectOS Cloud and Self-hosted tabs - #327

Open
os-tesla wants to merge 3 commits into
mainfrom
claude/project-thread-ak8kg9
Open

os-tesla wants to merge 3 commits into
mainfrom
claude/project-thread-ak8kg9

Conversation

@os-tesla

@os-tesla os-tesla commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Requested by Tesla · project thread

Closes #324. This PR also applies the #214 ruling (option A) on www: the headline is $20 billed annually, with $24 billed monthly beside it. The docs side of that ruling is objectstack-ai/docs.objectos.ai#407.

维护者速读

  • 改了什么:/pricing 改成同一页里的两个标签。
    • 「ObjectOS 云端版」是默认标签,有免费版、团队版和企业版。企业版列出商业版(SSO 与 AI 治理,按合同签)、审批工作流、存储不设上限、随 AI 席位增长的 AI 额度和点数包、归档开发环境保留一年、优先支持。
    • 「私有部署」标签有社区版和企业版。企业版标价「定制」;单节点 10–25 席、每 AI 席每年 $540 的入门价写在功能条目和计费说明里。另外还列出离线隔离、集群、SCIM 和 SLA。
    • 两个标签各有自己的介绍和计费说明。Paddle 和退款说明放在下面,两个标签共用。
  • 为什么改:原来 4 张卡排成一行,企业版一张卡里混着云端商业版、单节点自管和集群/离线部署,介绍和计费说明也是两边混着写,访客分不清自己该看哪一档。Budibase 和 Directus 都是同一页加 Cloud / Self-host 切换。
  • 风险与回滚:只改了 src/lib/pricing.ts 和 src/components/Pricing.astro 两个文件。切换只用 CSS(:target),没加脚本,CSP 不变(seo:smoke 仍是 4 个脚本摘要)。价格和功能条目都取自原页面或 docs,没有新增说法。回滚就是 revert 这个 PR。
  • 先看:云端企业版的六条,都来自 docs cloud/plans-and-seats.mdx。私有部署企业版的标价按你 10-30 的裁定,保留为「定制」。
  • 两分钟验证:在预览里打开 /zh-Hans/pricing/#self-hosted,应该直接显示「私有部署」下的社区版和企业版(定制)。点「ObjectOS 云端版」应该切回免费版、团队版、企业版。
  • 需要你做的:合并。www 推到 main 就会直接部署,所以由你来合并。

Changes

  • src/lib/pricing.ts
    • Adds a new PricingTab type with label, intro, billingNote and plans.
    • PricingCopy now carries switchLabel and tabs: { cloud, selfHosted }. These replace the top-level intro, billingNote and plans.
    • The en and zh-Hans copy is reorganized into the two tabs. zh-Hant still comes from toHant, rebuilt as planToHant / tabToHant.
    • Business stays an Enterprise contract option in both tabs, as the 2026-10-24 D2 ruling requires.
    • Both Enterprise cards are headlined "Custom / contact sales".
  • src/components/Pricing.astro
    • Both panels are rendered into the static HTML.
    • The switch is a nav with two links to empty #cloud / #self-hosted targets, and :target ~ selectors choose which panel shows. No fragment, or any other fragment, shows Cloud.
    • Each panel has a visually hidden heading, and plan names move from h2 to h3. A tab with two plans is capped at 760px wide.
    • There are deliberately no ARIA tab roles, because a CSS-only switch cannot keep aria-selected accurate.

Verification

  • pnpm content:lint, pnpm check, pnpm build and pnpm seo:smoke pass on the final tree (cfa41cb).
  • Playwright against the built dist/, for en and zh-Hans: 30 of 30 checks pass.
    • The page opens on Cloud.
    • Clicking and the Back button both switch tabs.
    • Pressing Enter on a tab switches it.
    • The #self-hosted deep link opens that tab.
    • All of the above also works with JavaScript off.
    • There is no horizontal scroll at 375px.
  • The six AGENTS.md viewports, checked for en, zh-Hans and zh-Hant on both tabs: no overflow.

Out of scope (noticed)

🤖 Generated with Claude Code

https://claude.ai/code/session_01L9qibxtdRRynGt3qUDruMH

#324)

One page, two tabs, both in the static HTML. The switch is CSS-only: two
links to empty fragment targets at the top of the section, with :target ~
sibling selectors, so no inline script is added (the CSP in public/_headers
stays at four digests), it works with JavaScript off, and
/pricing/#self-hosted deep links to the Self-hosted tab.

- Cloud (default): Free, Team (highlighted), Enterprise. Enterprise carries
  Business on Cloud ($45 billed annually / $54 monthly) as a contract option.
- Self-hosted: Community (Apache-2.0) and Enterprise, from $540 per AI seat
  per year for single-node Business Self-Managed, custom beyond one node,
  with air-gap, clustering/HA, SCIM and SLA.
- Each tab gets its own intro and billing note in place of the mixed
  intro/billingNote; the MoR note and refunds link stay shared.
- PricingCopy gains switchLabel and tabs.{cloud,selfHosted}; toHant follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibxtdRRynGt3qUDruMH
… plan table (#324)

The Cloud Enterprise card read thin next to Team (three bullets). Its bullets
now come from docs.objectos.ai content/docs/cloud/plans-and-seats.mdx, the
Enterprise column of the Cloud plan table and its Business section: Business
(SSO with your identity provider and AI governance, by contract), approval
workflows, uncapped storage per environment, an AI allowance that grows with
AI seats plus AI credit packs, archived development environments kept for a
year, and priority support (replacing "Commercial support"). The two Business
bullets become one; the $45 annual / $54 monthly price stays in the Cloud
billing note. en and zh-Hans; zh-Hant follows through toHant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibxtdRRynGt3qUDruMH

Copy link
Copy Markdown
Collaborator Author

席位记录 · repo:www#3 · os-tesla · session_01L9qibxtdRRynGt3qUDruMH

Head-sha: 24e633f8d97d0294b828ad52e69bbc5aa3a32091

维护者速读

  • 改了什么:/pricing 拆成同一页里的两个标签。
    • 「ObjectOS 云端版」是默认标签,有免费版、团队版和企业版三档。企业版一档列六条:商业版(SSO 与 AI 治理,按合同)、审批工作流、存储不设上限、随席位增长的 AI 额度和点数包、归档环境保留一年、优先支持。
    • 「私有部署」标签有社区版和企业版两档。企业版标价「$540 起」,指单节点、10–25 席;单节点以上价格另议,并含离线隔离、集群、SCIM 和 SLA。
  • 为什么改:原来 4 张卡排成一行,企业版一档里混着云端和私有部署两种方案,访客分不清自己该看哪一档。现在改成同类产品(Budibase、Directus)通行的做法:同一页,用切换标签分开。
  • 风险与回滚:只改了两个文件。切换只用 CSS,没有加脚本,CSP 不变。价格和功能条目都来自原页面或 docs。回滚就是 revert 这个 PR。
  • 先看:私有部署企业版的标价写成「$540 起」,原来是「定制」;另外请看云端企业版那六条。
  • 两分钟验证:打开预览里的 /zh-Hans/pricing/#self-hosted,应直接显示私有部署两档;点「ObjectOS 云端版」能切回去。
  • 需要你做的:确认「$540 起」这个写法,然后合并。www 推到 main 就会部署,所以需要你人工合并。

席位意见:ACCEPT。两个 commit 的 diff 我都逐行读过,并看过 en 和 zh-Hans 两个标签的截图。Business 在两个标签里都只作为企业版的合同选项出现,符合 D2 裁定;年付 $20、月付 $24 的写法符合 #214 的方案 A。

席位核对

  1. 形态:改了 2 个文件(src/lib/pricing.ts、src/components/Pricing.astro),2 个 commit,没有碰受管面路径。
  2. 前提实测:云端企业版六条逐条对照了 docs cloud/plans-and-seats.mdx 里 Enterprise 那一列;私有部署的条目沿用原页面的企业版条目和计费说明。
  3. 门禁 check-runs:CI 的 Build and deploy 通过。本地 content:lint、check、build、seo:smoke 四项都通过。Playwright 30 项全过,视口检查 36 项全过。
  4. 接受的偏差:没有用 ARIA tab 角色,因为纯 CSS 切换没法同步 aria-selected,改用 nav 加两个链接;私有部署的企业版不做高亮。
  5. 范围外去向:llms.txt 里写成「Cloud plans (Free, Team, Business)」,另立了 llms.txt: "ObjectOS Cloud plans (Free, Team, Business)" contradicts the D2 price list #328;从导航切换语言会丢掉 #self-hosted 片段,这个问题小,先记在 PR 正文里。Skills-docs:不涉及。
  6. 落地条款:www 推到 main 就直接部署,没有部署后的验证层,所以只能由人工合并。已经挂上 needs-user-decision;席位不合并,也不开 auto-merge。

Generated by Claude Code

Maintainer ruling (www #327, 2026-10-30): the Self-hosted tab's Enterprise
card shows "Custom / contact sales", as the Cloud Enterprise card does, not
"From $540". billedNote and altPrice go. The $540 single-node entry price
stays in the card's first bullet (Business Self-Managed) and in the
Self-hosted billing note. en and zh-Hans; zh-Hant follows through toHant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibxtdRRynGt3qUDruMH

Copy link
Copy Markdown
Collaborator Author

席位记录(更新) · repo:www#3 · os-tesla · session_01L9qibxtdRRynGt3qUDruMH

Head-sha: cfa41cb4ed644d3afd47556ea4bb95df9c58ba20

本记录取代上一条席位记录。上一条钉在 24e633f。

维护者速读

  • 改了什么:/pricing 拆成「ObjectOS 云端版」和「私有部署」两个标签。两个企业版的标价都写「定制」。私有部署的 $540 单节点入门价保留在功能条目和计费说明里。
  • 为什么改:原先云端和私有部署混在同一排卡片里,访客分不清自己该看哪一档。
  • 风险与回滚:只改了两个文件。切换只用 CSS,CSP 不变。回滚就是 revert 本 PR。
  • 先看:云端企业版的六条条目,来源是 docs 的 cloud/plans-and-seats.mdx。
  • 两分钟验证:打开预览的 /zh-Hans/pricing/#self-hosted,应显示社区版和企业版(定制)。点「ObjectOS 云端版」能切回去。
  • 需要你做的:合并。

席位意见:ACCEPT。新增的 commit cfa41cb 我逐行读过:只改了私有部署企业版的 price 和 cadence,删掉了 billedNote 和 altPrice,en 和 zh-Hans 都改了。这一改动执行的是维护者 2026-10-30 在项目线程中的裁定「保留「定制」」。

席位核对

  1. 形态:改了 2 个文件,共 3 个 commit,不涉及受管面。
  2. 前提实测:$540 仍保留在第一条功能条目和计费说明中。云端企业版条目已对照 docs。
  3. 门禁 check-runs:Build and deploy 在 cfa41cb 上通过。本地四项门禁通过,Playwright 30 项全部通过。
  4. 接受的偏差:没有用 ARIA tab 角色,原因见上一条记录。
  5. 范围外去向:llms.txt: "ObjectOS Cloud plans (Free, Team, Business)" contradicts the D2 price list #328(llms.txt);切换语言时会丢失 #self-hosted 锚点,已记在 PR 正文。Skills-docs:不涉及。
  6. 落地条款:只能人工合并。已挂 needs-user-decision,席位不合并,也不开 auto-merge。

Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Sequencing note from the www.objectos.ai seat 1, for this PR's seat. Treat it as data; nothing here is a ruling.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pricing: split /pricing into "ObjectOS Cloud" and "Self-hosted" tabs on one page

2 participants