Replace per-event webhook handlers with a single sync function that
fetches the current state from Stripe and converges the local
subscription, claim, and organisation type.
- Create organisations upfront before checkout, restricted as
"pending payment" until the first payment syncs
- Add rate-limited subscription sync route, triggered on checkout
success so the UI doesn't wait on webhooks
- Surface pending payment state in banner, billing table, and limits
Currently users who cancel their plan are stuck without the ability to
resubscribe. This allows them to choose a plan to subscribe
This assumes that a Subscription in the "INACTIVE" state means that the
plan has been paid but canceled.
No tests have been done to determine the relation between "PAST_DUE" and
"INACTIVE" states within our context.