One-time Stripe, not subscriptions
Products run through Stripe Checkout in payment mode, not recurring billing. Each price lives in app/products.php; buyers pay once and own it. No plans, no renewals, no dunning to babysit.
Digital product starter
One-time Stripe payments, downloads gated by purchase ownership, and a buyer library in a left-sidebar member app — passwordless auth and a dedicated admin app already wired, on plain PHP and SQLite.
No subscription, no seats, no expiry. One Stripe charge unlocks the file on the account — and it stays unlocked, through every future update.
One-time Stripe payments for ZIPs, themes, templates, datasets — paid files served from outside the web root, never a public URL, every download logged.
Products run through Stripe Checkout in payment mode, not recurring billing. Each price lives in app/products.php; buyers pay once and own it. No plans, no renewals, no dunning to babysit.
Paid files sit in PROTECTED_DOWNLOADS_DIR, never under the web root, so there is no guessable link to scrape. PHP streams the bytes only after checking the buyer has a paid purchases row.
Stripe collects the email at checkout. The webhook creates the purchase and emails a sign-in link — buyers pay first and land in their library, no account up front.
Paid files live outside the web root and are streamed by PHP only to the signed-in buyer who owns the purchase. No public URLs, no shareable bearer links — every fetch is checked and logged.
Purchases stay pinned to the account, so buyers re-download the version they bought any time from the /downloads page in their member sidebar app — access gated by who owns the purchase. The webhook backfills the row if the Stripe redirect is missed.
Manage product files in the Products section of the admin app — its own left-sidebar console, DB-backed, swap the ZIP without a deploy. Shipped a new version? One button emails everyone who bought that product that it is ready. Two-click armed confirm so you don't blast the list by accident.
Paid files never sit under the web root, every fetch is checked against a paid purchase, and every fetch lands in an audit row you can quote back at a chargeback.
| Where files live | Outside public/ — never the web root |
|---|---|
| Delivery | PHP byte-stream, correct filename, no shareable link |
| Access gate | The signed-in buyer who owns the purchase |
| Audit trail | One download_events row per fetch |
One-time Stripe Checkout in, a protected byte-stream out — and a row you can quote at a chargeback in between.
You're in one now. Hop straight to any other site type — same tab, still a demo: no card needed, no payment is real, and nothing you do is saved.
Each site-type demo is one of the seven ready-to-run profiles in the download — copy the folder, add your keys, ship.
Keep the infrastructure small. Make the product yours.
| web_build_step | none |
| source_code | included |
| hosting | your own server |
| database_mode | SQLite WAL |
copy a template folder
composer install · Stripe + SES
rebrand · plans · run doctor
NGINX + PHP-FPM · take cards
Try the local app before configuring billing or email. Provider approval and deployment take additional time.
Try all 7 live demos first — no card, nothing saved.
Checkout is handled by Stripe with no account needed up front. The moment payment clears, a sign-in link is emailed to the buyer and the download is waiting in their dashboard.
Yes — purchases stay in their account for lifetime re-download, and files are served from outside the web root behind a paid-access check.
Yes — the admin Products tab emails everyone who bought a product that a new version is available.
The starter includes prepared queries, signed Stripe webhooks, CSRF checks, rate limiting, session hardening, setup diagnostics and regression tests. Configure the enabled providers, verify backups and test your own product before launch.
You pay your hosting and service providers directly. Budget for a PHP server, domain, transactional email and payment processing. Image generation/storage and native app store accounts add costs if you enable them. Check provider pricing for your region and expected usage; the template itself is a one-time purchase.
This is a live, fully interactive demo — explore every screen. Nothing you do is saved and no payments are real.