For one product, SamCart's core is a sales page, hosted Stripe Checkout, an order bump, a webhook that unlocks the purchase and a receipt email, and an agent builds that in a day. The weekend goes on everything the money brings with it: sales tax or VAT, refunds, chargebacks, failed-payment retries, affiliate payouts and a members area. Stripe Checkout takes the card handling and Stripe Tax a good part of the maths, but you remain the seller who answers for both. One or two products with no affiliates is realistic; a catalog with a course platform is not.
Before you buildSamCart has no free plan. Stripe Payment Links need no code and no monthly fee, so check whether one product with a coupon is all you need before building.
Build me a personal checkout and sales-page system to replace SamCart for one or two digital products. Requirements: - Node.js 22 + TypeScript: Fastify with server-rendered pages (Eta). `npm start` serves http://localhost:4950: /<product-slug> sales page, /thanks, and /admin. - Payments: Stripe Checkout Sessions (`stripe`) so card details never touch the server, with STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET in .env. Per product: a one-time price and an optional monthly price; promotion codes allowed; `automatic_tax` on, and the README lists the Stripe dashboard steps it needs. - Storage: better-sqlite3 in ./data/shop.db: products (slug, name, Markdown page body, prices in cents, file path), orders (Stripe session id UNIQUE, email, amounts, tax, status), processed webhook event ids and download tokens. Files live in ./data/files/. Markdown is rendered with `marked` and cleaned with `sanitize-html`. - Order bump: a checkbox on the sales page adds a second product as another line item. A one-click upsell after payment is out of scope. - Fulfilment on the webhook: handle `checkout.session.completed` (paid only), `charge.refunded` and `charge.dispute.created`, verify the signature, and ignore an event id seen before. A paid order gets a random 32-byte download link (stored hashed, 7 days, 5 downloads) emailed through nodemailer SMTP from .env; a refund or dispute revokes it. - Admin: one password in .env (signed cookie): orders list, refund button (Stripe refund API), resend the email, and CSV export of orders and customers (`csv-stringify`). - Test with Stripe test mode: `stripe trigger checkout.session.completed` twice must create one order and one email. - Single seller. No accounts for buyers, no telemetry, local-first; the only outbound calls are to Stripe and your SMTP server. - Out of scope: affiliates, A/B tests, courses and a members area, subscription recovery emails, tax filing, and any card form of your own. - README: Stripe CLI webhook forwarding, a tunnel or VPS for the live webhook, going live, and a warning that you are the seller: sales tax or VAT registration and refund terms are yours. Budget an hour for the Stripe dashboard.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own SamCart.
Add a post-purchase upsell to the checkout app in this folder. Requirements: - Create the Checkout Session with `payment_intent_data.setup_future_usage: "off_session"` so the card is saved, and mark one product per sales page as the upsell. - On /thanks show the offer; Accept charges the saved card with a PaymentIntent created off-session, Decline skips it. Handle `authentication_required` by sending the buyer back to a Checkout page for that product. - Record the upsell as its own order line, deliver its file, and make it refundable from the admin like any other order. - Idempotency keys on every charge: pressing Accept twice charges once. - Update the README, including the Stripe settings that matter.
Add abandoned-checkout emails to the checkout app in this folder. Requirements: - Collect the buyer's email before redirecting to Stripe, with an explicit consent checkbox, and store it with the session id. - On the `checkout.session.expired` webhook, if there is no paid order for that email and product, send one reminder with a fresh Checkout link; never send a second one. - An unsubscribe link in every email, and a suppression list checked before sending. - Show sent, recovered and unsubscribed counts in the admin. - Update the README with the legal note that marketing consent rules depend on your country.
Add simple affiliates to the checkout app in this folder. Requirements: - Admin creates an affiliate with a code and a percentage; /?aff=<code> sets a 30-day cookie. - Store the affiliate code in the Checkout Session metadata and on the order. - A refund or dispute reverses the affiliate's commission for that order. - A monthly report per affiliate (orders, refunds, net commission) as CSV; payouts happen outside the app and are marked as paid by hand. - Update the README, including that you are responsible for any tax paperwork on payouts.
Sellers pay so they don't have to think about the checkout: upsells and bumps are a click, failed cards are retried, and a customer portal answers 'cancel my subscription' without an email to you.
Estimate · A tunnel is free and a small VPS is about $5. Stripe charges its normal per-sale fee, much as SamPay does on SamCart; the $79 platform fee is what goes away. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Core | $79 | $59.25 | Unlimited pages, products and checkouts, the courses app and members area, cart abandonment emails, the integration engine, an AI assistant with limited usage, limited video hosting and 1 team seat. |
| Pro | $199 | $149.25 | Everything in Core plus 1-click upsells, order bumps, upgrades, A/B testing, Subscription Saver, the affiliate center, advanced analytics, API and webhooks, third-party processors, unlimited AI usage and video hosting, and 10 team seats. |
| Done for You | custom | — | Everything in Pro plus a dedicated account manager, priority support, multiple marketplaces, unlimited seats and negotiated processing rates. |
No free plan, only a 7-day free trial.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: One-click upsells after checkout and A/B tests on pages and prices, Subscription Saver, which retries and chases failed payments.
About $79 a month on the Core plan, $948 a year (checked 2026-10-19).
One-click upsells after checkout and A/B tests on pages and prices; Subscription Saver, which retries and chases failed payments; The affiliate center with tracking and payouts; The courses app, members area and hosted video; Tax collection, the customer portal and native integrations that other tools plug into. If any of those matter to you, keep paying.
Yes: Stripe Payment Links (free), Medusa (open source), Saleor (open source).