Skip to content

Billing catalog — pricing + Stripe sync

PROD-02 introduced packages/billing-catalog/ as the single source of truth for everything billable on the Cavaridge™ platform. Stripe is downstream — the catalog is upstream.

ProductProTeam
Build (Forge / Cavaridge AI)$99/mo$129/mo
Operations (Meridian + supporting)$149/mo$199/mo
Security (AEGIS + supporting)$149/mo$199/mo
Healthcare (HIPAA mode add-on)$199/mo$249/mo
Platform (full-suite admin)$349/mo$449/mo
PawVault (consumer)$4.99/mo

Every price has a cogs_cents_per_seat_month companion entry in cogs.ts. CI enforces gross margin ≥ 55% at the catalog level — drop a price below floor and the build fails.

sync-to-stripe.ts is one-direction: catalog → Stripe. Stripe products + prices are matched via metadata.catalog_id, not Stripe ID. So a catalog change updates Stripe; a manual Stripe edit is overwritten on next sync.

The Customer Portal is configured via configure-stripe-portal.ts. Note: Pro+Team currently share a Stripe product, so portal-driven subscription_update is disabled in v1 — upgrades/downgrades go through the in-app billing page.

  • Florida-registered for Stripe Tax. Sales tax computed at checkout.
  • Pax8 partnership for MSP resellers (PROD-02 closed the partnership-side configuration).
  • Standard BAA in place for healthcare tenants.
  • Don’t hardcode prices anywhere outside packages/billing-catalog/.
  • Don’t edit prices in the Stripe dashboard — the next sync clobbers them.
  • Don’t add a price below GM-floor without raising the floor in CI first (and writing the why).

See packages/billing-catalog/README.md.