<!--
ROBOTS ON PAYROLL / THE VAULT
What this is: paste-in prompts that add a pricing section, checkout button, and thank-you page to your app using a Payment Link, no payment code.
How to use it: download this file and give it to your AI (Claude, ChatGPT,
Cursor, Lovable chat) as a reference. Say: "Use this as my playbook for [task]."
Latest version + full guide: https://robotsonpayroll.com/resources/get-paid-kit
-->

# The Add-Checkout Prompts

Two prompts. The first adds a pricing section, a buy button, and a proper thank-you page to any Lovable, Bolt, or Claude-built app, powered by a Payment Link (a hosted checkout URL from Stripe or Lemon Squeezy, so your app contains zero payment code). The second gates a download or a protected page behind a Lemon Squeezy license key.

Fill every [SLOT] before pasting. If you do not have your Payment Link URL yet, create it first (the payment-links-guide.md in this kit shows the clicks).

---

## Prompt 1: pricing section + checkout + thank-you page

```
Add a payments section to my app. I am using a hosted Payment Link, so do NOT
add any payment SDK, API keys, webhook handlers, or server-side payment code.
This is intentional. Build exactly what is below, then stop and list what you
built.

CONTEXT
- My product: [ONE LINE, e.g. "a $29 Notion template pack for freelancers"]
- My Payment Link URL: [PASTE YOUR buy.stripe.com OR lemonsqueezy.com CHECKOUT URL]
- Price to display: [e.g. "$29 one-time"]
- Support email: [YOUR EMAIL]

BUILD PART 1: PRICING SECTION
On my [PAGE, e.g. "landing page"], add a pricing section with:
1. A single pricing card: product name, the price, and 4-6 short benefit
   bullets I will edit later (use placeholders that describe outcomes, not
   features).
2. One primary button labeled "[BUTTON TEXT, e.g. Get instant access]" that
   links directly to my Payment Link URL above. Plain link navigation, no
   JavaScript payment logic, opens in the same tab.
3. Under the button, small muted text lines (stacked, not a paragraph):
   - "Secure checkout by [Stripe / Lemon Squeezy]. Card details never touch
     this site."
   - "Instant receipt by email."
   - "Questions? [SUPPORT EMAIL]"
4. Match my existing design (colors, fonts, spacing). Do not invent a new
   style for this section.

BUILD PART 2: THANK-YOU PAGE
Create a page at /thanks that:
1. Headline confirming the purchase worked, e.g. "You're in."
2. Tells the buyer exactly what happens next, step by step:
   [WHAT HAPPENS, e.g. "You'll get an email from me within a few hours with
   your download link."]
3. Repeats my support email prominently in case the email never arrives.
4. Says "Your receipt arrives by email from [Stripe / Lemon Squeezy]."
5. Is reachable by anyone with the URL. Do not attempt to verify payment on
   this page; verification is manual for now (see the comment below).
Tell me to set this /thanks URL as the after-payment redirect in my
[Stripe / Lemon Squeezy] dashboard, and where that setting lives.

BUILD PART 3: THE HONESTY COMMENT
At the top of the thank-you page code, add this comment verbatim:
   PURCHASES ARE VERIFIED MANUALLY FOR NOW. This page does not check payment.
   Anyone with the URL can open it, which is acceptable because fulfillment
   is manual (I check the payment dashboard and deliver by email).
   UPGRADE PATH when this stops scaling: real checkout integration with
   webhooks (code that listens for the payment provider to call this app
   back), which verifies each purchase and unlocks access automatically.
   Playbook: https://robotsonpayroll.com/resources/stripe-afternoon

RULES
- Zero payment SDKs, zero API keys, zero env vars. If you think one is
  needed, you have misunderstood: stop and ask.
- Do not add a fake "payment verified" spinner or any theater implying the
  page checked the payment. Honest copy only.
- Mobile-first: the pricing card and button must look right on a phone.

After building, output: (a) the files you touched, (b) the one dashboard
setting I still need to change by hand, (c) a 3-step test I can run.
```

**Test it:** click your own buy button, pay with Stripe test card 4242 4242 4242 4242 (test-mode link) or Lemon Squeezy test mode, and confirm you land on /thanks.

---

## Prompt 2: gate a download behind a Lemon Squeezy license key

Use this when you sell a file or a members-only page and want buyers to unlock it themselves instead of waiting for your email. Requires a Lemon Squeezy product with **License keys** switched on (product settings, one toggle). Each buyer gets a key in their receipt email; your app checks the key against Lemon Squeezy's license API (a URL your app can ask "is this key real?").

```
Add a license-key unlock to my app, the simplest version that works. I sell
through Lemon Squeezy with license keys enabled. No payment SDK, no API
keys or secrets needed: Lemon Squeezy's license validation endpoint is
public and takes only the key itself.

CONTEXT
- What I am gating: [e.g. "the /download page with the template files" or
  "a protected /guide page"]
- My product name as buyers see it: [PRODUCT NAME]
- Support email: [YOUR EMAIL]

BUILD
1. An unlock page at /unlock with one input ("Paste your license key, it's
   in your receipt email") and one button ("Unlock").
2. On submit, send the key to Lemon Squeezy's license validation endpoint:
   POST https://api.lemonsqueezy.com/v1/licenses/validate
   with form field license_key. Make this request from a server route, not
   from browser JavaScript, so the flow is easy to harden later.
3. If the response says the key is valid ("valid": true), show the gated
   content (or redirect to it) and remember the unlock in a browser cookie
   or localStorage so the buyer is not re-asked every visit.
4. If invalid: a friendly error, "That key didn't work. Check for extra
   spaces, or email [SUPPORT EMAIL] and I'll sort it out." Never blame the
   buyer.
5. Add a comment at the top of the unlock code: this is honor-system-grade
   protection, fine for digital products at this stage. Keys can be shared;
   revoking a key in the Lemon Squeezy dashboard locks it out on next check.
   Upgrade path for real accounts and subscriptions:
   https://robotsonpayroll.com/resources/stripe-afternoon

RULES
- Keep it to the fewest moving parts possible: one page, one server route,
  one fetch call. No database, no user accounts, no sessions beyond the
  cookie/localStorage flag.
- Show the exact error text from Lemon Squeezy in the server logs only,
  never on screen.

After building, output the files you touched and a test plan using a real
key from a test-mode purchase.
```

**Test it:** make a test-mode purchase of your own product, copy the license key from the receipt, and unlock. Then break the key on purpose and confirm the friendly error shows.

---

## What breaks most often

- **Agent adds Stripe SDK and asks for API keys anyway.** Reply: "Re-read the rules: hosted Payment Link only, remove the SDK and keys." Both prompts forbid it, but agents love installing things.
- **The /thanks redirect never happens.** You built the page but skipped the dashboard setting. Stripe: edit the Payment Link, After payment, Don't show confirmation page, paste the URL. Lemon Squeezy: product's Confirmation modal / redirect setting.
- **License validation fails on every key.** Usually the key was copied with a trailing space, or you are validating a live key while your product is still in test mode. Trim the input in code and check the mode.
