I run a small SaaS called VoiceDash. It gives voice AI agencies a white label portal they can hand to their own clients. Next.js on Vercel, Postgres behind Prisma, Stripe for billing.
The first version of the billing code had exactly one place that wrote subscription state: the Stripe webhook. That is what every tutorial shows you. It is also the version that locked a paying customer out of the product.
The failure
An agency owner picked a plan, paid, and Stripe redirected them back into the app. The layout that wraps every agency page looks for a subscription row that is active or trialing. There was none yet. So it did what it was written to do and redirected them to the plan picker.
They had a receipt from Stripe and a paywall from me.






