Skip to content

How I Handle Payments as a Solo Founder (ResistGate & Amethyst)

Founder mindsetMay 25, 2026

PayPal subscriptions, webhooks, and a Postgres entitlements table — the smallest stack that unlocks Pro in the extension.

How I Handle Payments as a Solo Founder (ResistGate & Amethyst)

I ship two Chrome extensions — ResistGate (a privacy-first focus blocker) and Amethyst (private browsing analytics). Both have a free tier. Pro is a PayPal subscription billed through my site.

No Stripe. No US incorporation. No merchant-of-record platform. Just PayPal's subscription API, a Postgres database, webhooks, and enough backend code to unlock Pro inside the extension after someone pays.

Here's why that stack exists — and what I'd change if I were starting over today.


Why PayPal? Because It Was the Only Option That Worked.

I'm based in Venezuela. That single fact eliminated most of the "obvious" choices:

  • Stripe requires a US Social Security Number or a registered business entity in a supported country. Venezuela isn't on the list. Not even close.
  • Gumroad, LemonSqueezy, Paddle — most merchant-of-record platforms either don't support Venezuelan sellers or require banking infrastructure I don't have access to.
  • PayPal let me create an account, verify it, and start receiving subscription payments internationally. No SSN. No US bank account. No incorporation.

When you're a solo founder outside the US, the "best" payment tool isn't the one with the cleanest API or the highest conversion rate. It's the one that lets you get paid at all.

What My Payment Flow Actually Looks Like

For ResistGate and Amethyst, the flow is more engineered than a PayPal.me link — but still smaller than a full billing platform:

  1. Someone uses the free tier in Chrome (blocking, schedules, local analytics — no account).
  2. When they want Pro, they open the pricing page on orlandoascanio.com — either from the site or from a deep link inside the extension.
  3. They pick monthly or yearly, enter their email, and approve a PayPal subscription inline.
  4. PayPal sends a webhook when the subscription is created, renewed, or canceled.
  5. My backend writes an entitlement row (product slug, email, plan, subscription status) to Neon Postgres.
  6. The extension calls an entitlement API, gets a signed token, and unlocks Pro locally — still no password, no user dashboard.

If they subscribed from inside the extension, there's an extra checkout session ID so the right install gets linked to the right PayPal email. That sounds like a small detail until two people share a computer or typo their email.

This is closer to Approach 3 from Hayk Simonyan's payment system video — integrate a PSP and own your product logic — but built by one person on nights and weekends, not by a payments team.

What Works About This Setup

Two products, one pattern. ResistGate and Amethyst share the same checkout component, webhook handler, and entitlement model. I didn't rebuild billing twice; I parameterized by productSlug and plan IDs.

No account system. Pro is tied to the PayPal billing email. That matches how extensions should feel: install, use, upgrade — without another login to forget.

Local-first stays honest. Analytics and block lists stay on the device. The only server touch for most users is checkout and license verification.

PayPal as trust + access. Global buyers already know PayPal. For a solo builder they've never met, that matters as much as the API.

I control the upgrade path. Free tier ships in the Web Store; Pro unlocks when my backend confirms payment. I can change pricing, features, or refund policy on my site without waiting on a marketplace revshare.

What's Still Hard (And Already Annoying)

Webhook timing. A customer can finish PayPal checkout and still wait seconds (sometimes longer) before Pro lights up. The UI has to say "activation pending" instead of pretending it's instant.

Two products = two plan catalogs. Every price change means updating PayPal plans, env config, and copy on both product pages. Discipline matters; drift is easy.

Venezuela withdrawal friction. Money arrives in PayPal in USD. Getting it out locally adds fees and steps a US-based founder never thinks about.

No Stripe-style DX. PayPal's subscription docs work, but debugging webhooks and plan IDs is slower than the Stripe ecosystem most tutorials assume.

Support edge cases are manual. Refunds within 14 days, email mismatches, "I paid but Pro didn't unlock" — still me in the inbox, not a self-serve billing portal.

Scale questions I haven't hit yet. Chargebacks at volume, dunning for failed renewals, and tax/VAT across EU buyers — PayPal handles some of it, but I'm still the product owner when something looks wrong.

What I'd Do Differently (My Upgrade Path)

If I were designing this stack again with what I know now:

Keep PayPal until revenue justifies a US entity. For early Pro subscribers on two extensions, PayPal + entitlements was the right tradeoff. Moving to Stripe only makes sense when the cost and paperwork of Stripe Atlas are clearly smaller than the friction of staying on PayPal.

Invest earlier in checkout observability. Log every webhook event, subscription ID, and entitlement write. The first time someone's Pro doesn't unlock, you'll want a paper trail — not a guess.

For extensions specifically: I'd still avoid building license keys from scratch. What I built (checkout sessions + signed entitlement tokens) is the minimum viable version of Freemius-like behavior without their SDK. If I weren't already this deep, Freemius would be the first place I'd look — it's built for plugins and extensions, with checkout, licensing, and renewals handled for you.

For tax and compliance at higher MRR: Paddle as merchant of record becomes attractive. They sell on your behalf and handle VAT/sales tax in many regions — work I don't want on my plate while shipping focus tools. See also the payment stack by revenue stage for when Freemius vs Paddle vs custom PayPal actually makes sense.

The Real Lesson

The video I keep referencing breaks down payment systems built for millions of transactions and five-nines uptime. That's essential knowledge — for later.

For ResistGate and Amethyst today, the question wasn't "how do I design like Stripe?" It was:

  • Can someone subscribe without creating an account on my site?
  • Can the extension verify Pro without storing payment details?
  • Can I ship from Venezuela without a US bank account?

PayPal plus a thin entitlement layer answered those three questions.

The best payment system at your stage is the one that lets you validate paid demand without pretending you're a payments company. ResistGate and Amethyst started free because that's how you earn trust in the Web Store. Pro exists because some people want more — and a subscription is how I fund the work without selling their data.

Build the smallest stack that closes the loop: pay → confirm → unlock. Harden it when confused customers and failed webhooks become a weekly problem, not a theoretical one.


I'm Orlando. I build browser extensions and AI tools from Venezuela — including ResistGate and Amethyst. I write about the messy reality of building products as a solo founder, not the polished version. Follow along at orlandoascanio.com.

Notes from the build

Get more AI engineering insights

Follow the work: AI tools, browser products, product decisions, and honest lessons from the build.

By subscribing, you agree to receive Orlando's emails. No spam. Unsubscribe anytime.

How I Handle Payments as a Solo Founder (ResistGate & Amethyst) | Orlando Ascanio