robots on payroll.

THE VAULT / START HERE / GUIDE + PROMPTS

Get Paid Without Touching Webhooks

You can charge real money this afternoon without writing a single line of payment code. Stripe and Lemon Squeezy both hand you a hosted checkout page behind a plain URL; you paste it behind a button. This kit gives you the honest platform decision with real July 2026 fee math, the click-by-click setup, a paste-in prompt that adds pricing plus checkout plus a thank-you page to any vibe-coded app, and pricing page copy that converts. Webhooks come later, and we tell you exactly when.

LAST VERIFIED 2026-07-09

You don't need webhooks yet (most beginners quit here for no reason)

Search "add Stripe to my app" and the internet hands you API keys, SDKs, and webhooks (code that listens for Stripe to call your app back). That is the PRO setup, and it is where most first-time builders stall for a week and ship nothing.

NOTE

Use this page as a prompt reference. Every file below is built to be handed straight to an AI. Download it, drop it into Claude, ChatGPT, Cursor, or Lovable, and say "use this as my playbook." The prompts on this page are copy-paste ready.

Here's the thing the tutorials skip: a Payment Link (a checkout page Stripe or Lemon Squeezy hosts for you, reachable at a plain URL) takes real cards, sends real receipts, and deposits real money, with zero code in your app. Your app just links to it, the way it links to your Twitter.

The trade: your app does not automatically know who paid. For your first product, that is fine. You check the dashboard and deliver by email. Manual fulfillment is not embarrassing, it is the correct amount of engineering for 0 to 50 customers. The moment it stops being enough is defined precisely at the bottom of this page.

The decision: Stripe vs Lemon Squeezy (and the Gumroad one-liner)

One concept decides this. When you sell to a buyer in Germany, the EU wants VAT (their sales tax) collected. Someone must register, collect, and file taxes wherever your buyers live. A merchant of record (MoR) is a company that legally becomes the seller of your product so that whole job lands on them. Lemon Squeezy is a merchant of record; Stripe is not. With Stripe, tax stays your problem (their Stripe Tax add-on calculates and collects for about 0.5% extra per transaction, but registering and filing is still on you). In practice: MoR means a solo builder selling worldwide never thinks about VAT. That is what Lemon Squeezy's higher fee buys.

Your situationPickWhy
Digital product (template, ebook, prompt pack), buyers worldwide, zero tax homework wantedLemon SqueezyMerchant of record: global sales tax handled, worth ~2 points of extra fees at beginner volume
Simple SaaS or one-time access, mostly US buyers, planning a real integration laterStripe Payment LinksCheapest fees, and your customers are already in Stripe when you graduate
You want a storefront with an audience built inGumroad, with eyes openEasiest storefront and the most expensive way to sell anything: 10% + $0.50 plus separate 2.9% + $0.30 processing

The fee math on a $29 product (verified July 2026)

Stripe Payment LinksLemon SqueezyGumroad
Base fee2.9% + $0.305% + $0.5010% + $0.50 plus 2.9% + $0.30 processing
Fee on $29$1.14$1.95$4.54
You keep$27.86 (96.1%)$27.05 (93.3%)$24.46 (84.3%)
Sales tax / VATYour problemHandled (merchant of record)Handled (MoR since Jan 2025)
Surcharges+1% international cards, +1% currency conversion, $15 per dispute+1.5% international cards, +1.5% PayPal, +0.5% on subscriptions30% on sales via their Discover marketplace
Monthly fee$0$0$0

The honest read: Stripe leaves you $0.81 more per $29 sale than Lemon Squeezy. Across 100 sales that is $81, less than the cost of one hour spent understanding a VAT registration form. Below roughly $2,000/month in international digital sales, pick on convenience, not fees.

  1. 1

    Create and activate a Stripe account

    Go to dashboard.stripe.com, sign up, complete activation (business details plus the bank account for payouts). Sole proprietor under your own name is fine.

  2. 2

    Flip Test mode ON

    Top right toggle. Everything you do first happens in test mode, where fake cards work and no real money moves.

  3. 3

    Create the link

    Left sidebar, Payment Links, then + New. Under Product, click + Add new product: name it, set $29 (or your price), pick One time or Recurring, click Add product.

  4. 4

    Point it at your thank-you page

    Under After payment, choose Don't show confirmation page and paste your /thanks URL (the prompt below builds that page). Turn on Allow promotion codes if you want launch discounts. Click Create link and copy the buy.stripe.com/... URL.

  5. 5

    Test the whole flow

    Open your link and pay with test card 4242 4242 4242 4242, any future expiry, any CVC. You should land on /thanks and see the payment under Payments in the dashboard.

  6. 6

    Go live

    Flip Test mode OFF and create the link once more (test links do not work live). The live URL goes behind your buy button. First real payout takes 7 to 14 days; after that, about 2 business days.

WATCH OUT

The #1 failure: your live button opens a link that 404s or says the product is unavailable. Cause: you shipped the test-mode link. Test and live are two separate worlds in Stripe; every link exists in only one of them.

Lemon Squeezy version, condensed: app.lemonsqueezy.com, create a store, Products, + New product, set the price, publish, then Share on the product gives you the hosted checkout URL. Enable License keys on the product if you want the self-serve unlock flow below.

Wire it into your app with one paste (pricing section + checkout + thank-you page)

This prompt works in Lovable, Bolt, or Claude. It adds a pricing section and buy button, builds a proper thank-you page, and plants an honest comment in the code that says purchases are verified manually for now, with the upgrade path written next to it. Fill the [SLOTS] first.

PROMPT: THE ADD-CHECKOUT PROMPT (paste into Lovable, Bolt, or Claude)
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.

WATCH OUT

When the agent installs Stripe's SDK anyway (it will try, agents love installing things), reply: "Re-read the rules: hosted Payment Link only, remove the SDK and keys." If it asks you for an API key, same answer.

Variant: let buyers unlock a download themselves (Lemon Squeezy license keys)

If you sell a file or a members-only page, you can skip the fulfillment emails: turn on License keys on your Lemon Squeezy product (one toggle in product settings), and every buyer gets a key in their receipt. This prompt builds the simplest possible unlock page that checks the key against Lemon Squeezy's license API (a URL your app can ask "is this key real?"). No secrets, no database, no accounts.

PROMPT: THE LICENSE-KEY GATE PROMPT (Lemon Squeezy sellers only)
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.

The pricing copy: 6 lines under the button do more than the price does

The copy file below has three fill-in templates (one-price, three-tier, and the founding-member frame for your first 50 customers) plus the part most pages skip: the small text under the buy button. Six lines, each killing one specific fear that stops a card from coming out:

  • [ ]Guarantee: "14-day money-back guarantee. Email me, get a refund, no forms, no guilt trip."
  • [ ]What happens next: "After payment you get [instant access / an email from me within a few hours]."
  • [ ]Receipt and VAT: "Receipt and VAT invoice arrive by email automatically."
  • [ ]Cancel anytime (subscriptions): "Cancel in two clicks. You keep access until the end of the period."
  • [ ]Support: "Stuck or unsure? Email [YOU@DOMAIN], a human answers."
  • [ ]Security: "Secure checkout by [Stripe / Lemon Squeezy]. Your card details never touch this site."

It also contains our 5 hard opinions on beginner pricing. The short version: charge from day one (a $29 product gets you the truth, a free beta gets you compliments), $9 beats $2 (sub-$5 signals junk and fees eat the rest), monthly before annual, raise prices at 100 customers, and a 14-day guarantee outperforms any discount you could offer instead.

To turn the templates into your actual page, download the copy file below, attach it, and paste this:

PROMPT: THE PRICING COPY PROMPT (attach pricing-page-copy.md)
Use the attached pricing-page-copy.md as my playbook. Write the pricing
section copy for my product using [TEMPLATE: "Template 1 (one price)" /
"Template 2 (three tiers)" / "Template 3 (founding member)"].

CONTEXT
- My product: [ONE LINE, e.g. "a $29 Notion template pack for freelancers"]
- Price: [e.g. "$29 one-time"]
- Who it is for: [ONE LINE]
- The single biggest outcome a buyer gets: [ONE LINE]
- What they receive after paying: [e.g. "instant download link" / "an email
  from me within a few hours"]
- Support email: [YOUR EMAIL]
- Checkout provider: [Stripe / Lemon Squeezy]

RULES
- Fill every slot in the chosen template. Bullets describe outcomes, not
  features ("Ship your first paying customer this week" beats "Includes 14
  templates").
- Include all 6 under-the-button lines from the file, adapted to my product.
  Drop the cancel-anytime line only if this is a one-time purchase.
- No hype words, no exclamation marks, no invented statistics or fake
  scarcity. If the founding-member template's counter line has no real
  number from me, delete the line.
- Output the finished copy as plain text I can paste, then a one-line note
  on anything you had to guess so I can correct it.

A Payment Link is a cash register with no wiring into your app. Your app does not know who paid, and you verify purchases by hand. That is the right setup until any one of these becomes true:

  • [ ]Subscriptions with in-app gating: access must switch on and off automatically when someone subscribes, cancels, or fails a renewal. This requires webhooks (code that listens for Stripe to call your app back).
  • [ ]Usage-based billing: charging by API calls, credits, or consumption means your app must report usage to the billing system. Links cannot.
  • [ ]Seats and team plans: "admin invites 4 teammates, the price updates" is integration territory.
  • [ ]Volume: when manual verification costs you more than an afternoon a week, the integration pays for itself.

PAYOFF

When you outgrow this: the Stripe Afternoon kit is the graduation path. It builds the full integration by prompt: checkout sessions, the webhook handler done right, and the billing portal. Everything you shipped today carries over; your Stripe customers and products are already there.

Get the next drop

Every new Vault system ships to the list first. Twice a week, free.