Architecture

Billing & tiers

OpsDash ships with three subscription tiers (Free, Pro, Enterprise), account-level billing anchored to personal workspaces, usage-based limits enforced server-side, and Stripe as the single billing source of truth.

Tier overview

TierTargetMonthlyYearly
FreeIndividuals and early-stage teams$0$0
ProGrowing teams needing depth and volume$29$290
EnterpriseOrgs needing RBAC, audit logs, SSO, branding$99$990

All modules are always visible in the sidebar on every tier. Sub-features are gated with progressive disclosure — upgrade prompts appear contextually, not as locked nav items.

Workspace limits

ResourceFreeProEnterprise
Workspaces15Unlimited
Members per workspace320Unlimited
Storage500 MB25 GBUnlimited
API calls / month1,00050,000Unlimited

Sub-feature gating by module

CRM

Feature keyFreeProEnterprise
crm:contacts25010,000Unlimited
crm:companies502,000Unlimited
crm:deals502,000Unlimited
crm:leads1005,000Unlimited
crm:lead-scoring
crm:deal-stages
crm:quotes
crm:csv-import
crm:contact-filters
crm:lead-filters
crm:email-integration

Projects

Feature keyFreeProEnterprise
projects:crud350Unlimited
projects:tasks100UnlimitedUnlimited
projects:kanban
projects:calendar
projects:subtasks
projects:milestones
projects:gantt
projects:time-tracking-log
projects:budget

Platform features

Feature keyFreeProEnterprise
platform:audit-logs
platform:rbac-viewer
platform:custom-branding
platform:sso
platform:api-access
platform:webhooks
platform:reports

Stripe integration

Stripe is the single billing source of truth. Custom logic outside webhook handlers is prohibited.

  • Checkout: POST /api/webhooks/stripe handles all subscription lifecycle events
  • Entitlements: Stripe Entitlements API is used for feature access — lookup keys in packages/billing/src/config/plan-features.ts
  • Billing portal: Stripe Customer Portal for subscription management (no custom UI for plan changes)

See Configuration for Stripe env vars and setup steps.