Skip to content

fix(pricing): strict-≥80%-margin redesign — Team is finite, not unlimited - #188

Merged
mastermanas805 merged 1 commit into
mainfrom
feat/strict-80-margin-retire-unlimited
Jun 5, 2026
Merged

fix(pricing): strict-≥80%-margin redesign — Team is finite, not unlimited#188
mastermanas805 merged 1 commit into
mainfrom
feat/strict-80-margin-retire-unlimited

Conversation

@mastermanas805

Copy link
Copy Markdown
Member

Rule-22 synchronized pricing redesign (strict-80%, retire unlimited) — see docs/sessions/2026-06-04/PRICING-MARGIN-MODEL-AND-TEAM-REDESIGN.md.

CEO directive (2026-06-05, LOCKED): retire every "unlimited" tier claim across the customer-facing surfaces and show the real finite plans.yaml caps. Copy-only — Team stays GATED; this PR does NOT touch the checkout/CTA gate.

  • PricingPage.tsx: Team column was unlimited on every limit → now the finite caps (50 GB PG/100 conn, 1.5 GB Redis, 40 GB Mongo/50 conn, 40 GB queue, 30 GB vector, 300 GB storage, 100k webhooks, 100 deploys, 1000 vault). Pro queue 10 GB→5 GB, anon/hobby queue 1 GB/5 GB→64 MB/2 GB. Removed the UNLIMITED cell helper. Growth blurb de-"unlimited"-ed.
  • PricingGrid.tsx (dashboard upsell) + MarketingPage.tsx: Team bullets "unlimited X" → finite caps + "need more? contact sales".
  • BillingPage.tsx LIMITS fallback: team Infinity→finite; growth mongodb/webhooks Infinity→finite; growth deploys 5→50 (display-accuracy).
  • public/llms.txt: anon NATS 1024→64 MB; Team "unlimited everything"→finite caps + Enterprise-above-Team. Keeps the "not yet a self-serve tier" gate marker (llmsContract.test.ts).

Verify

npm run gate GREEN — tsc --noEmit 0, npm run build + prerender OK (121 static files), vitest run 1120 passed / 3 skipped.

Known follow-up (NOT in this PR)

MarketingPage Team CTA still points at the self-serve /app/checkout?plan=team path which the server gate 400s — flagged in a code comment for a follow-up gate-reconciliation PR (the strict-margin task is copy-only and must not touch the gate).

Companion PRs: api #262, common #46, content.

…mited"

CEO directive (2026-06-05, LOCKED): retire every "unlimited" tier claim and
show the real finite plans.yaml caps. Hard-caps only. Team stays GATED (this
PR does NOT touch the checkout/CTA gate) — copy-only.

- PricingPage.tsx: Team column was `unlimited` on every limit; now renders the
  finite caps (50 GB PG/100 conn, 1.5 GB Redis, 40 GB Mongo/50 conn, 40 GB
  queue, 30 GB vector, 300 GB storage, 100k webhooks, 100 deploys, 1000 vault).
  Pro queue 10 GB → 5 GB, anon/hobby queue 1 GB/5 GB → 64 MB/2 GB. Removed the
  `UNLIMITED` cell helper. Growth blurb de-"unlimited"-ed.
- PricingGrid.tsx (dashboard upsell) + MarketingPage.tsx: Team feature bullets
  changed from "unlimited X" to the finite caps + "need more? contact sales".
- BillingPage.tsx LIMITS fallback: team Infinity → finite; growth
  mongodb/webhooks Infinity → finite; growth deploys 5 → 50 (display-accuracy).
- public/llms.txt: anon NATS 1024→64 MB; Team "unlimited everything" → finite
  caps + Enterprise-above-Team. Keeps the "not yet a self-serve tier" gate
  marker (llmsContract.test.ts).

NOTE (pre-existing, out of scope): MarketingPage Team CTA still points at the
self-serve /app/checkout?plan=team path which the server gate 400s — flagged in
a code comment for a follow-up gate-reconciliation PR (not changed here).

Rule-22 synchronized pricing redesign (strict-80%, retire unlimited) — see
docs/sessions/2026-06-04/PRICING-MARGIN-MODEL-AND-TEAM-REDESIGN.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mastermanas805
mastermanas805 enabled auto-merge (squash) June 5, 2026 14:24
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown

size-limit report 📦

Path Size
dist/assets/index-902QtfQT.js 0 B (-100% 🔽)
dist/assets/index-BsJUZYRr.css 6.13 KB (0%)
dist/assets/index-BPuqdbbj.js 162.02 KB (+100% 🔺)

@mastermanas805
mastermanas805 merged commit 413ffc9 into main Jun 5, 2026
18 checks passed
mastermanas805 added a commit that referenced this pull request Jun 5, 2026
* feat(pricing): add Enterprise "contact us" wall above Team (#56)

The strict-≥80%-margin redesign (#188) made Team a finite self-serve tier.
Anyone who breaches Team's caps — or needs dedicated/isolated infra,
multi-region, or compliance (SOC2/BAA/SSO/SLA/custom DPA) — now has a home:
an Enterprise column to the right of Team plus a dedicated "contact us" card.

GTM surface ONLY — no api changes, no Team un-gating, no plans.yaml row,
no dedicated-infra build. Enterprise is quote-based: no price, no checkout.

PricingPage:
- new `enterprise` TierKey + a 5th column (headline "Custom" / "let's talk",
  CTA = mailto:sales@instanode.dev?subject=Enterprise%20inquiry — matches
  Team's contact address).
- every ROW grows to a 5-tuple; Enterprise cells read "Custom" (capacity)
  or "Contact us" (SSO/SAML, SLA). No numbers, no "unlimited" (retired word).
- dedicated Enterprise callout card with trigger criteria + Contact-us CTA.
- grid widened 5→6 tracks; tier-scroll allowlist + section copy updated.

Docs contract:
- public/llms.txt gains a standalone `**Enterprise**` line so agents
  introspecting tiers see the wall.
- llmsContract.test.ts pins the Enterprise line + sales address (rule 18/22).
- fetch-content.mjs requireMarkers gains '**Enterprise**' so a content sync
  missing the line preserves the local copy until the content PR lands.

Tests: +6 PricingPage assertions (column renders, CTA is sales mailto not
checkout, "Custom" headline no $, callout card present, trigger criteria
surfaced, zero "unlimited" anywhere on the page). npm run gate green
(tsc + build incl. prerender + 1127 vitest passing).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(pricing): cover requested-tier scroll path for Enterprise (?tier=enterprise)

diff-cover flagged PricingPage.tsx:305 (the validated-tier allow-list now
including 'enterprise') uncovered — the existing per-tier-id test renders
without a tier param so the requestedTier useEffect returns early. Add a
render with ?tier=enterprise that executes the path. 100% patch coverage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant