I fix and launch AI-built apps (Lovable, Supabase, Stripe) · badii.studio
Badii Boutar, senior full-stack engineer. I review, fix and launch apps built with Lovable, Bolt, Replit and other AI tools, on Supabase and Stripe. Fixed, published prices: badii.studio
Markdown supported · ⌘↵ to post
Good list. The 30 October grants change is going to catch a lot of people with a 42501 they can't explain. One I'd add next to the invoice.paid point is the failure side of a renewal. If the handler only listens for paid events, a failed renewal never reaches Supabase, so the user stays active in your table while Stripe has the subscription past_due. Handling customer.subscription.updated and reading the current status covers both directions.
Hayrullah Kar
The status code legend under Event deliveries is a handy shortcut for anyone staring at a failed endpoint. One cause I would add: Stripe does not guarantee that events arrive in the order they were created, and retries make the mix worse. A handler that writes the subscription status straight from each payload can apply an older customer.subscription.updated after a newer one and leave Supabase in the wrong state, even though every delivery shows 200 and every event ID is stored once. Two simple fixes: re-fetch the subscription from the Stripe API inside the handler and write what it returns, or store the created timestamp of the last applied event on the row and skip anything older.