Launch offer Limited-time launch price Only £49 →

Digital product starter

Sell files, themes & digital templates.

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.

1 payment per sale re-downloads 0 public file URLs
Buy once · own forever

Pay one time.
Download for life.

No subscription, no seats, no expiry. One Stripe charge unlocks the file on the account — and it stays unlocked, through every future update.

  • Lifetime re-downloads
  • Free version updates
  • Files served from outside the web root
PAID FILES, PROTECTED

Take the money. Hand over the file. Nothing leaks.

One-time Stripe payments for ZIPs, themes, templates, datasets — paid files served from outside the web root, never a public URL, every download logged.

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.

Files served from outside public/

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.

Guest checkout, no signup wall

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.

Signed-in downloads, no leaky links

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.

Lifetime re-download library

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.

Email every buyer when you ship an update

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.

Proof, not promises

Every byte accounted for. Zero public URLs.

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.

0Public URLs to your paid files — served from PROTECTED_DOWNLOADS_DIR, streamed by PHP, nothing to hotlink or guess
1:1Every download = one download_events row — who, what, when, logged before a single byte leaves
100%Of fetches gated on a paid purchases row owned by the signed-in buyer — no entitlement, no file
Where files liveOutside public/ — never the web root
DeliveryPHP byte-stream, correct filename, no shareable link
Access gateThe signed-in buyer who owns the purchase
Audit trailOne download_events row per fetch
Paid files, by the numbers

Take the money, hand over the file, leak nothing

One-time Stripe Checkout in, a protected byte-stream out — and a row you can quote at a chargeback in between.

1 one-time Stripe payment per sale — no plans, renewals or dunning to babysit
0 signup walls before the card — guest checkout takes the email, then sends a magic sign-in link
re-downloads — every purchase stays pinned to the account in the sidebar member app at /downloads, gated by ownership
1-click shipped an update? one button in the admin app emails every buyer of that product, behind an armed confirm
Most SaaS dies of complexity, not competition.
Indie builders like Pieter Levels (@levelsio) run profitable products on exactly this shape — PHP · SQLite · jQuery · a cheap VPS per project.
50,000+ SQLite reads / sec
daily_hits100,000+
cost / 10k logins$1
whole_stack / month< $10
reads_block_writesnever · WAL mode
From download to charging cards

Live on a real VPS in an afternoon.

01

Unzip & copy

copy a template folder

02

Install & connect

composer install · Stripe + SES

03

Ask your agent

rebrand · plans · run doctor

04

Deploy & charge

NGINX + PHP-FPM · take cards

unzip → live on a VPS — one afternoon.

One price, yours forever

Get the whole stack — £49, pay once.

Launch offer

Simple Stack

£49 Limited-time launch price
  • Seven ready-to-run site types: subscriptions & memberships, an AI image studio, digital downloads, credit/usage metering, API product, mobile app backend, full showcase
  • Native iOS (SwiftUI) + Android (Compose) apps included — sign-in, dashboard and RevenueCat billing already wired to the backend
  • A built-in no-code CMS / page builder — spin up whole client sites, then hand text/layout/image edits to the client
  • Complete PHP + SQLite codebase — no framework, no build step
  • Restyle from .env: 20 palettes × 6 type pairings × 5 hero layouts, light + dark
  • Passwordless + Apple/Google sign-in, Stripe checkout, webhooks, credits, API keys, superadmin
  • Setup, Stripe, email, deploy and security guides
  • Written for AI agents to extend it for you (AGENTS.md + handoff docs)
  • Lifetime access to the version you buy

Try all 7 live demos first — no card, nothing saved.

Questions

The honest FAQ.

Get started

You’re already inside.

This is a live, fully interactive demo — explore every screen. Nothing you do is saved and no payments are real.

Get Simple Stack Launch offer · £49