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
| Tier | Target | Monthly | Yearly |
|---|---|---|---|
| Free | Individuals and early-stage teams | $0 | $0 |
| Pro | Growing teams needing depth and volume | $29 | $290 |
| Enterprise | Orgs 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
| Resource | Free | Pro | Enterprise |
|---|---|---|---|
| Workspaces | 1 | 5 | Unlimited |
| Members per workspace | 3 | 20 | Unlimited |
| Storage | 500 MB | 25 GB | Unlimited |
| API calls / month | 1,000 | 50,000 | Unlimited |
Sub-feature gating by module
CRM
| Feature key | Free | Pro | Enterprise |
|---|---|---|---|
| crm:contacts | 250 | 10,000 | Unlimited |
| crm:companies | 50 | 2,000 | Unlimited |
| crm:deals | 50 | 2,000 | Unlimited |
| crm:leads | 100 | 5,000 | Unlimited |
| crm:lead-scoring | ✓ | ✓ | ✓ |
| crm:deal-stages | ✓ | ✓ | ✓ |
| crm:quotes | — | ✓ | ✓ |
| crm:csv-import | — | ✓ | ✓ |
| crm:contact-filters | — | ✓ | ✓ |
| crm:lead-filters | — | ✓ | ✓ |
| crm:email-integration | — | ✓ | ✓ |
Projects
| Feature key | Free | Pro | Enterprise |
|---|---|---|---|
| projects:crud | 3 | 50 | Unlimited |
| projects:tasks | 100 | Unlimited | Unlimited |
| projects:kanban | ✓ | ✓ | ✓ |
| projects:calendar | ✓ | ✓ | ✓ |
| projects:subtasks | — | ✓ | ✓ |
| projects:milestones | — | ✓ | ✓ |
| projects:gantt | — | ✓ | ✓ |
| projects:time-tracking-log | — | ✓ | ✓ |
| projects:budget | — | ✓ | ✓ |
Platform features
| Feature key | Free | Pro | Enterprise |
|---|---|---|---|
| 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/stripehandles 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.