Feature Request
Before offering a free trial on the upgrade page, check whether the user has had a previous Stripe subscription. If they have, do not show the trial offer.
Motivation
Free trials are intended for new users. A returning user who previously subscribed and cancelled should not be offered another trial — both to protect revenue and to maintain consistency with Stripe's trial eligibility model (Stripe itself prevents duplicate trials on the same customer in some configurations).
Proposed Behaviour
- When rendering the upgrade page, check the user's Stripe customer history for any previous subscription (active, cancelled, or expired)
- If a previous subscription exists: show the standard upgrade/payment flow without any trial offer or trial-related copy
- If no previous subscription exists: show the current free trial offer as normal
Implementation Notes
- Stripe's
Customer object retains subscription history; a list of past subscriptions can be retrieved via the Stripe API (stripe.Subscription.list(customer=..., status='all'))
- The backend can expose a flag (e.g.
has_previous_subscription) on the subscription status endpoint, computed once per request
- The frontend upgrade page reads this flag and conditionally renders trial vs. standard copy
- Consider caching this flag on the
Player or payments model to avoid repeated Stripe API calls
Acceptance Criteria
Feature Request
Before offering a free trial on the upgrade page, check whether the user has had a previous Stripe subscription. If they have, do not show the trial offer.
Motivation
Free trials are intended for new users. A returning user who previously subscribed and cancelled should not be offered another trial — both to protect revenue and to maintain consistency with Stripe's trial eligibility model (Stripe itself prevents duplicate trials on the same customer in some configurations).
Proposed Behaviour
Implementation Notes
Customerobject retains subscription history; a list of past subscriptions can be retrieved via the Stripe API (stripe.Subscription.list(customer=..., status='all'))has_previous_subscription) on the subscription status endpoint, computed once per requestPlayeror payments model to avoid repeated Stripe API callsAcceptance Criteria
has_previous_subscription(or equivalent) flag is returned to the frontend