Ghost handles subscriptions natively. Everything else — course purchases, digital downloads, visual assets, module bundles — runs through a custom Netlify + Stripe layer. Every dollar on your domain. Nothing between you and your buyer.
Ghost Pro is the right choice for this ecosystem — but it has one limitation worth naming clearly before we build around it. Ghost handles recurring subscriptions and membership tiers natively and beautifully. What it cannot do is sell a one-time product. No course purchases. No digital download with a single payment. No module bundles at à la carte pricing. That transaction type simply does not exist inside Ghost's native commerce layer.
For most creator businesses, the workaround is to route those purchases through a third-party marketplace. That route costs revenue share, hands over customer data, and puts your buyers on someone else's domain for the most important moment in the relationship: the moment they pay you. We're not doing that.
Instead, we bridge Ghost's gap with a custom Netlify Functions layer connected directly to Stripe. The buyer clicks a purchase button on your Ghost site, a Netlify serverless function opens a Stripe checkout session, payment clears, Stripe fires a webhook, and Lindy's Operator grants Ghost access automatically. The entire transaction stays inside your infrastructure. The customer never knows there's a seam. The code lives in GitHub — version controlled, documented, and maintainable long after the sprint ends.
The goal isn't to eliminate complexity — it's to own it. A custom Netlify + Stripe layer gives full control over every transaction type without surrendering a single customer relationship to a third-party marketplace.
Stripe is the payment infrastructure underneath everything. It handles card processing, recurring subscription billing, one-time checkout sessions, tax calculation, failed payment recovery, and instant payouts. Every dollar that moves through this ecosystem moves through Stripe first.
Ghost connects to Stripe natively for subscription billing. Netlify Functions call the Stripe API to create checkout sessions for one-time purchases. Stripe fires webhooks to both the Netlify webhook handler and Lindy's Operator on every payment event. The customer experience is seamless regardless of which path their transaction takes.
Netlify Functions are lightweight serverless JavaScript functions deployed from your GitHub repository to your Netlify infrastructure. Two functions power the entire one-time commerce layer.
The first — create-checkout-session — fires when a buyer clicks a purchase button on Ghost. It receives the product ID, creates a Stripe checkout session, and redirects the customer to a secure Stripe-hosted page. The second — stripe-webhook-handler — receives Stripe's payment confirmation, verifies the signature, and calls the Ghost Admin API to grant the correct membership tier or deliver the purchased content. Both functions are committed to GitHub before this module closes. If the code only lives in Netlify's dashboard, it doesn't exist.
Ghost handles recurring subscription billing natively through its Stripe integration — no Netlify Functions required for that path. For one-time purchases, Ghost serves as the content delivery and access layer — the Netlify webhook function grants the correct membership tier via the Ghost Admin API after Stripe confirms payment.
GitHub is the connective tissue. Every Netlify Function, every environment variable, every product ID mapping lives in the sprint repository. The entire commerce architecture is reproducible from GitHub alone — no tribal knowledge, no phone calls to the consultant required.
Organized by transaction type and which part of the architecture handles it. The consultant needs to know this before writing a single line of code.
From the moment a buyer clicks to the moment they're inside the content. Zero manual steps. Entirely owned infrastructure.
Two non-negotiables before Module 05 closes. First — every Netlify Function is committed to GitHub. If it only lives in Netlify's dashboard it cannot be recovered, versioned, or handed off. Second — at least one real transaction per product type has cleared in live mode. Test mode confirms the plumbing works. Live mode confirms the business works. Both conditions must be true before we move to Module 06.
Module 06 builds the staff — Lindy and the full E-Suite automation layer come online, and the ecosystem starts running without you in the loop.