3
11 Comments

Day 9 — Payments are live. It was a nightmare.

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.

on April 10, 2026
  1. 2

    The Paddle domain + legal page sequence is a rite of passage at this point — enough solo founders have hit exactly this wall that there should be a public checklist for it.

    One thing worth recognizing in hindsight: the forcing function here was real. You now have /terms, /privacy, and /refund live on a proper domain with non-ambiguous language. A lot of products launch without those and it becomes awkward fast — first real customer asks, or a payment processor flags you later.

    Paddle being strict about 'at our discretion' is annoying in the moment but it's protecting you from a future dispute where ambiguous policy language creates a problem.

    What are you building? The Day 9 framing suggests a daily log — curious what the core product does.

    1. 1

      It's a GitHub App called PRDraft — reads your PR diff and auto-writes the description. 2-click install, no config. Built it because I was writing garbage PR descriptions and Copilot's equivalent is locked behind GitHub Enterprise. Install link is https://github.com/apps/prdraft if you're curious.

  2. 2

    Too real 😅 Payments always turn into a mess. First payment will feel amazing.

  3. 2

    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 😅

    1. 1

      The payment integration was hell. It took me days to unfold. When ever i tried the upgrade button, it didn't lead to paddle.com . After many tries and debugging. I finally got a error pop up message from paddle when i clicked upgrade button.

      I felt like heaven, even though it is a error, paddle replied to my api call. I was so happy, I can't explain it. Eventually after some more tries and code reviews ,finally got it right !

      1. 2

        haha I know that feeling 😄 that moment when you finally get a response back after hours of debugging feels unreal

        I’ve had a few of those — especially when everything is scattered between logs, emails, docs…

        curious — how did you keep track of all the issues and fixes while you were going through that?

        1. 1

          Honestly just Claude and a markdown file I update every session. Nothing fancy — just dump what broke and how I fixed it before closing the laptop. Saves me from re-debugging the same thing twice.

          1. 2

            I do something similar, but after a while the hard part isn’t tracking fixes -it’s spotting patterns. Like which issues keep coming back vs one-offs.
            Still trying to find a simple way to see that without overcomplicating it.

            1. 1

              Honestly starting to feel it a bit now. The markdown file is fine for not re-debugging the same thing — but spotting 'this is the 4th time auth has been weird' requires actually re-reading old sessions. I don't do that consistently.

              1. 2

                yeah exactly
                feels like it's less about notes and more about tagging patterns as they happen
                otherwise you only notice them way too late

          2. 2

            yeah that’s a solid way to do it — I’ve done something similar before

            it works well early on, especially to avoid re-debugging the same things

            I’ve just found that after a while it gets harder to connect the dots across sessions — like seeing what keeps coming back vs one-offs

            curious if you’ve started noticing that yet or still pretty manageable?

Trending on Indie Hackers
I launched on Product Hunt today with 0 followers, 0 network, and 0 users. Here's what I learned in 12 hours. User Avatar 91 comments My users are making my product better without knowing it. Here's how I designed that. User Avatar 66 comments A simple LinkedIn prospecting trick that improved our lead quality User Avatar 60 comments The most underrated distribution channel in SaaS is hiding in your browser toolbar User Avatar 54 comments I gave 7 AI agents $100 each to build a startup. Here's what happened on Day 1. User Avatar 41 comments I changed AIagent2 from dashboard-first to chat-first. Does this feel clearer? User Avatar 39 comments