Skip to content

feat: add pricing page (support + services model)#715

Merged
amavashev merged 8 commits into
mainfrom
feat/pricing-page
Jun 15, 2026
Merged

feat: add pricing page (support + services model)#715
amavashev merged 8 commits into
mainfrom
feat/pricing-page

Conversation

@amavashev

Copy link
Copy Markdown
Contributor

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)

  • Community — free, self-hosted, community support
  • Production$1,500/mo ($18k/yr), labeled introductory pricing (headroom to raise later)
  • Enterprisefrom $6,000/mo ($72k/yr); SLA framed as custom incident-response terms, optional 24×7 rather than an unconditional public promise

A Production support-boundary note makes clear support covers the Cycles deployment, not building/operating the customer's agent app.

Fixed-scope services

  • Production Readiness Review — $7,500
  • Integration Sprint — $15,000 (with a customer-provides scope guard)
  • Compliance Evidence Package — $12,000 (worded as readiness; "not legal advice")
  • Custom Integration & Policy Design — from $250/hr
  • Team Enablement Workshop — $3,500 half-day / $6,000 full-day

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

  • New pricing.md — hero + principles → <Pricing /> → design-partner callout → managed-cloud waitlist → FAQ → <HomeContact />
  • New .vitepress/theme/Pricing.vue — tier cards (middle highlighted) + service cards, reusing the existing brand CSS idiom
  • Wired into nav (config.ts), footer (SiteFooter.vue), and the global component registry (theme/index.ts)
  • Managed-cloud waitlist CTA routes to the existing Contact Google Form

Verification

  • npm run build passes cleanly; dist/pricing.html renders with all prices, the "Most popular" ribbon, and the waitlist CTA (SSR confirmed)
  • Previewed locally at /pricing (light/dark, responsive card stacking)

Notes

  • Excludes the unrelated pre-existing change to .vitepress/theme/installs-cache.json
  • Public marketing prose — worth a docs review pass (same as blog posts) and a final check on the EU AI Act date (Aug 2, 2026) before merge

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).
@amavashev amavashev merged commit a351ecf into main Jun 15, 2026
5 checks passed
@amavashev amavashev deleted the feat/pricing-page branch June 15, 2026 19:13
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