Stripe billing components by PumpGTM: an in-app cancel flow with save offers, and one subscription state for every access check.
An in-app Stripe cancel dialog: reason, one save offer picked from the reason (more trial days, a pause, a discount or a free month, once per subscription), then a real cancellation at period end. Records everything on the Stripe subscription, so there is no table to add.
One function that turns a Stripe subscription into the product decision: needs card, trialing, cancelling but still running, paused, past due, or ended. Scheduled cancellations keep access until Stripe ends them.