feat: add pricing page (support + services model)#715
Merged
Conversation
Add a public pricing page monetizing human expertise around the self-hosted, Apache 2.0 product — no license fees, no seat fees, and no percentage of agent spend. - Support subscriptions: Community (free), Production ($1,500/mo, introductory), Enterprise (from $6,000/mo). Enterprise SLA framed as custom/optional-24x7 rather than an unconditional public promise, plus a Production support-boundary note. - Fixed-scope services: Readiness Review, Integration Sprint, Compliance Evidence Package (worded as readiness, not legal advice), Custom work, and Team Enablement Workshop. - Lead differentiator: support pricing is flat and independent of token, request, agent, tenant, or downstream provider spend. - Managed-cloud waitlist teaser routing to the existing Contact form. New: pricing.md, .vitepress/theme/Pricing.vue (tier + service cards). Wires Pricing into nav (config.ts), footer (SiteFooter.vue), and the global component registry (theme/index.ts).
Address review findings on the pricing page:
- pricing.md used <HomeContact /> but the component was only imported
locally by Layout.vue, not globally registered, so it rendered nothing
on the markdown page. Register it in enhanceApp.
- The hero and FAQ links to #managed-cloud-coming missed: the default
VitePress slugifier keeps the em dash, generating id
"managed-cloud-—-coming". Add an explicit {#managed-cloud-coming}
anchor so the heading display stays unchanged and the links resolve.
Verified with npm run build: anchor id is now managed-cloud-coming and
HomeContact renders in dist/pricing.html.
The Production tier carried an inline "Introductory pricing" badge the other tiers lacked, and the featured card used a 1px-wider border, so the price row sat at a different height in each card and nothing lined up. - Move the badge into its own reserved slot (fixed min-height) rendered on every tier, so all three price rows share the same baseline. - Equalize borders at 2px on all cards (featured differs only by color), removing the 1px content shift. - Give the tier price slot and the for-who line fixed heights so the description and CTA rows align across tiers regardless of cadence wrap. - Give service-card names a fixed-height slot so service prices align. - Drop the reserved heights below 768px where cards stack single-column.
Switch the price row to a vertical flex layout so the price (e.g.
"From $6,000") always sits on its own line and the cadence
("/mo, billed annually …") wraps beneath it, instead of running inline.
Applies to both tier and service cards.
- Split the tier cadence into a "/mo, billed annually" line and a separate annual-total line ($18,000/yr, from $72,000/yr), stacked under the price. Bump the price-slot height to keep rows aligned across tiers. - Remove the "Custom Integration & Policy Design" service package; the remaining four fixed-scope services stand on their own.
The top nav had grown busy and several items overlapped the Docs dropdown. Consolidate: - Fold the top-level Protocol link into Docs > Reference (as "Protocol Reference (Interactive)"). - Fold the top-level Tools dropdown into Docs as a "Tools" group. - Group Partners under a Contact dropdown (Talk to the team / Become a design partner). - Drop the redundant "GitHub" text item; the GitHub social icon already covers it, repointed from the docs repo to the org (github.com/runcycles). Top bar is now: Why Cycles · Quickstart · Docs · Pricing · Blog · Contact · [GitHub icon].
Move Tools back out of the Docs dropdown to its own top-level item, per preference. Protocol stays under Docs > Reference. Top bar: Why Cycles · Quickstart · Docs · Tools · Pricing · Blog · Contact · [GitHub icon].
- Ribbon: "Most popular" -> "Recommended" (honest for a pre-revenue,
design-partner-stage product).
- Hover bug: CTA buttons render inside .vp-doc, whose `a:hover` rule
recolored the text (teal on teal = invisible). Pin color and
text-decoration on hover for .cta-button and .cta-button.alt in both
Pricing.vue and HomeContact.vue. Adaptive `color: var(--vp-c-bg)` keeps
contrast correct in light (white on deep teal) and dark (dark on bright
teal) themes.
- Alignment: zero `margin` on .reason and .features li so VitePress's
`.vp-doc li + li { margin-top }` can't offset cards/list items when these
components are rendered inside markdown (the HomeContact "reasons" cards
no longer sit lower than their row neighbors).
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.
Summary
Adds a public Pricing page that monetizes human expertise around the self-hosted, Apache 2.0 product. There's no managed cloud yet, so the model is support subscriptions + fixed-scope services — no license fees, no seat fees, and no percentage of agent spend.
Pricing model
Support subscriptions (annual)
A Production support-boundary note makes clear support covers the Cycles deployment, not building/operating the customer's agent app.
Fixed-scope services
Lead differentiator: support pricing is flat and independent of tokens, requests, agents, tenants, or downstream provider spend (wording deliberately leaves room to price a future managed cloud on infrastructure usage).
Changes
pricing.md— hero + principles →<Pricing />→ design-partner callout → managed-cloud waitlist → FAQ →<HomeContact />.vitepress/theme/Pricing.vue— tier cards (middle highlighted) + service cards, reusing the existing brand CSS idiomconfig.ts), footer (SiteFooter.vue), and the global component registry (theme/index.ts)Verification
npm run buildpasses cleanly;dist/pricing.htmlrenders with all prices, the "Most popular" ribbon, and the waitlist CTA (SSR confirmed)/pricing(light/dark, responsive card stacking)Notes
.vitepress/theme/installs-cache.json