In Stripe Dashboard:
PDF Trend Lab Lifetime Access$197.00 USD — select One timeprice_1AbCdEf...💡 Add a product image (your app screenshot) for professional receipts.
In Stripe Dashboard → Developers → API keys:
pk_live_ or pk_test_) — goes in store.htmlsk_live_ or sk_test_) — goes in your backend .env only — NEVER in frontend HTML⚠ Never put your sk_live_ secret key in store.html or any public file. Only put it in your server's environment variables.
Open store.html and find these two lines near the top of the <script> tag:
var STRIPE_PUBLISHABLE_KEY = 'pk_test_YOUR_KEY_HERE'; ← replace this var BACKEND_URL = 'https://your-backend.yourdomain.com'; ← replace this var DEMO_MODE = true; ← change to false when live
Also find the price reference and update it:
priceId: 'price_YOUR_STRIPE_PRICE_ID' ← replace with your Price ID
Option A — Railway (recommended, free to start):
stripe-backend/ folder as a GitHub repo, or use Railway's CLI.env.example in Railway's Variables tabhttps://pdf-trend-lab-backend.up.railway.appOption B — Manual (any server/VPS):
cd stripe-backend npm install cp .env.example .env nano .env # fill in your real keys npm start
STRIPE_SECRET_KEY=sk_live_YOUR_SECRET_KEY STRIPE_PUBLISHABLE_KEY=pk_live_YOUR_PUBLISHABLE_KEY STRIPE_PRICE_LIFETIME=price_YOUR_PRICE_ID STRIPE_WEBHOOK_SECRET=whsec_YOUR_WEBHOOK_SECRET FRONTEND_URL=https://yourdomain.com PORT=4000
In Stripe Dashboard → Developers → Webhooks → Add endpoint:
https://your-backend-url.com/webhookpayment_intent.succeeded and charge.refundedwhsec_).env as STRIPE_WEBHOOK_SECRET💡 The webhook fires when a payment succeeds — this is where you send the customer their access email/login.
Option A — Netlify (free, drag & drop):
store.html onto the deploy areaOption B — Your existing domain host:
store.html to your web host's public_html folder via FTP or cPanelindex.html if you want it as the homepage⚠ Stripe requires HTTPS. Make sure your domain has an SSL certificate (all modern hosts provide this free with Let's Encrypt).
In store.html, change:
var DEMO_MODE = true;
to:
var DEMO_MODE = false;
This switches the payment button from demo mode (fake success after 2 seconds) to real Stripe card charging.
STRIPE_PUBLISHABLE_KEY updated in store.html (live key, not test)BACKEND_URL updated in store.html to your deployed serverDEMO_MODE = false in store.htmlWhen a customer pays, the payment_intent.succeeded webhook fires. In server.js you'll see the TODO comment — this is where you:
💡 Stripe also auto-sends a payment receipt to the customer's email — no extra work needed for that part.
PDF Trend Lab — Deployment Guide — 2026