Introduction
Building a cross-platform notes app while working a full-time job seemed like the perfect side project until payment infrastructure entered the chat. What started as a weekend wiring of Stripe and RevenueCat turned into a 36-hour marathon of database checks, refunds, and late-night debugging. The experience revealed how easily payment systems can bite back when assumptions about test environments are left unchecked. The mental toll of sleepless nights and missed family time is real.
What Happened
The developer expected Stripe's test mode to mirror real transactions seamlessly. Instead, the sandbox masked critical gaps: an empty API key in the Android SDK went unnoticed until a real purchase was attempted, and webhook retries caused subscription events to arrive out of order. The Supabase database even resurrected cancelled subscribers as zombie users, flipping the pro flag back on after a deletion event was ignored. Meanwhile, a simple UI element—the close button on the Mac paywall—became a trap when it refused to exit unless the checkout session completed, forcing a force-quit to escape.
Why This Matters
For any indie developer turning a hobby into a business, payment infrastructure is often the most stressful bridge to cross. The difference between a stalled prototype and a launched product often comes down to how well those edge cases are handled.
Key Takeaways
- Test mode is not reality. Simulated webhooks can hide missing SDK configuration. The fix: actually spend money, refund the transaction, and verify your database logs.
- Webhook retries create zombie users. Events can arrive out of order due to network retries. Always fetch the live subscription state via API when a webhook lands, rather than trusting the payload alone.
- Paywall UX must not trap users. A close button that only works after a successful checkout leaves users stranded. Basic exit logic should work regardless of payment outcome.
Conclusion
After the 36-hour debugging marathon, the Stripe and RevenueCat webhooks are finally certified and EpicNotes is live. If you're about to integrate payments into your own app, take these three lessons to heart—your future self, and your family, will thank you. Got a payment horror story of your own? Drop it in the comments, and let's help each other build better software.










Discussion
Join the conversation
Thoughtful reactions, questions, and follow-up ideas help shape the next story.