The whole day was one thing: getting Paddle working. Should have been simple. It was not.
Here's everything that broke:
1. Domain verification failed
Paddle rejected my domain because the homepage showed the default Next.js boilerplate. Fixed by redirecting it to my Carrd landing page.
2. Legal pages got flagged
Paddle wanted exact URLs for Terms, Privacy, and Refund policy. My Carrd free tier doesn't support URL paths so I had to build all three directly on Vercel — /terms, /privacy, /refund.
3. Refund policy rejected
Had "at our discretion" language in the refund policy. Paddle flagged it. Rewrote it to a clean 30-day unconditional refund, no exceptions.
4. Terms didn't name the legal entity
Paddle wanted the business name explicitly stated in the first paragraph of the Terms. Added it.
5. The checkout approach was completely wrong
I built a server-side /api/checkout route that called Paddle's transactions API and redirected users. It created draft transactions and sent users back to my own dashboard with a ?_ptxn= param instead of showing a payment form. Spent hours debugging this before realizing I had the entire architecture wrong. Deleted the route entirely. Switched to Paddle.js v2 overlay — fully client-side.
6. "Something went wrong" from Paddle.js
After switching to the overlay, users saw a Paddle error. Two root causes: the default payment link in Paddle settings was pointing to my homepage instead of the dashboard, and Paddle.Initialize() wasn't being called before Checkout.open() — race condition on script load. Fixed both.
End of Day 9:
Checkout overlay is working. Users can now pay. 🎉
Still waiting on Paddle to fully enable payouts — they want to verify the domain and refund policy changes. Should clear in a day or two.
MRR: $0 (but the plumbing is finally in place)
Installs: 2
Paid users: 0 — but now it's actually possible
Day 10 goal: first paying customer.
What part was the most painful for you?
I’m at a similar stage and starting to realize support/messages can get messy really fast once things go live.
Still figuring out a simple way to handle it without going full enterprise tool 😅