feat(pricing): Enterprise "contact us" wall above Team (#56)#189
Merged
Conversation
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>
size-limit report 📦
|
…=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>
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.
GTM surface only — adds an Enterprise "contact us" wall to the right of Team on
/pricing. Does NOT touch the api, does NOT un-gate Team, does NOT build dedicated infra (that is operator/permission-gated). Task #56.What
src/pages/PricingPage.tsx— newenterprisecolumn. Headline reads Custom (no price), CTA ismailto:sales@instanode.dev?subject=Enterprise%20inquiry(matches Team’s contact address). Every comparison row grows to a 5-tuple; Enterprise cells read Custom / Contact us — never numbers, never the retired word "unlimited". Adds a dedicated Enterprise callout card with the trigger criteria.public/llms.txt— standalone**Enterprise**line so agents introspecting tiers see the wall.src/lib/llmsContract.test.ts— pins the Enterprise line +sales@instanode.dev(rule 18/22).scripts/fetch-content.mjs—requireMarkersgains**Enterprise**so a content sync missing the line preserves the local copy until the content PR lands.Out of scope
No api/plans.yaml changes, no Team un-gating, no dedicated-infra build, no lead-capture endpoint (mailto only for v1).
Verify
npm run gateGREEN (tsc + build incl. prerender + 1127 vitest passing). Prerendereddist/pricing/index.htmlcontains the Enterprise wall (Contact us / Custom / sales@instanode.dev) and zero "unlimited".Cross-ref
Pairs with content PR adding the same Enterprise line to the llms.txt source of truth: InstaNode-dev/content
feat/llms-enterprise-wall-56.🤖 Generated with Claude Code