diff --git a/PRODUCT_PLAN.md b/PRODUCT_PLAN.md new file mode 100644 index 0000000..cf2b143 --- /dev/null +++ b/PRODUCT_PLAN.md @@ -0,0 +1,43 @@ +# DashCaddy Premium Billing Plan + +## Locked Decisions + +### Subscription plans +- 1 month — $25 +- 3 months — $50 +- 6 months — $65 +- 12 months — $99 + +### Tier model +DashCaddy has one paid tier: **Premium**. +All paid plans unlock the same premium features: +- `sso` — Auto-Login SSO +- `recipes` — Multi-container stack deployment +- `swarm` — Docker Swarm multi-node orchestration + +### Free tier +Everything else in DashCaddy remains available without a license. +No license is required for the free tier. + +### Subscription behavior +- Billing model: recurring Stripe subscriptions +- Cancellation behavior: access remains active until the paid-through period ends +- Failed payment behavior: 7-day grace period +- Renewal behavior: premium access remains active continuously while the subscription is paid + +### Licensing behavior +- License is required only for premium features +- One active machine per license/subscription at a time +- License transfer is allowed only after deactivation on the previous machine +- Existing private lifetime licenses may continue to exist internally, but no public lifetime offering will be sold + +### Deployment targets +- Website source of truth: `dashcaddy.net` +- Billing/license service repo: `dashcaddy-license-server` +- Billing/license service deployment target: Contabo + +## Architecture Direction +- Stripe is the billing source of truth +- DashCaddy license validation remains the product licensing source of truth +- `dashcaddy-license-server` will bridge Stripe subscriptions to DashCaddy license issuance, renewal, validation, and deactivation +- Existing DashCaddy license primitives should be reused instead of inventing a second licensing model