ordinarthur 641ec629f5
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m14s
feat(billing): track scheduled cancellation + surface it in Settings
Stripe portal "cancel" schedules a cancel_at timestamp while keeping the
sub active until period end. Without persisting that state the UI kept
saying "renews on X" even though the user had already canceled.

New `users.plan_cancels_at` column populated from the subscription
webhook (handles both `cancel_at` and legacy `cancel_at_period_end`).
Settings now shows a banner "Subscription scheduled to end on X" and
flips the footer label from "renews" to "ends" while the cancellation
window is open.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 14:01:24 +02:00
..