Pieter Levels stack (PHP + jQuery + SQLite) icon

Pieter Levels stack (PHP + jQuery + SQLite)

Stack

@levelsio's signature setup: vanilla PHP, jQuery, SQLite, all on one VPS. Five Pieter products, ~1.5M revenue, zero microservices. The proof that boring tech ships.

Stack

What this is

Pieter Levels ships Nomad List, Remote OK, Rebase, PhotoAI, and a handful of others on this exact stack. He’s open about it, vanilla PHP, jQuery, SQLite, one VPS. Combined revenue past $200k/month. The point isn’t ‘PHP is good’, it’s ‘shipping is good’.

When to pick this stack

  • You’re solo or near-solo and value cycle time over architectural elegance.
  • You don’t want to maintain a build pipeline, a node_modules, a CI matrix, and a Dockerfile for a side project that may or may not work.
  • You can edit a .php file in vim, refresh the browser, and ship.

What we’d swap

  • jQuery → Alpine.js: keeps the HTML-first approach but is 10kb instead of 90kb and uses modern syntax.
  • Vanilla PHP → Laravel: if the project grows enough that you start wishing for an ORM. See Laravel + Livewire.
  • SQLite → MySQL: only if you cross some absurd write-throughput threshold; for ~99% of indie projects SQLite is fine.

Common gotchas

  • Pieter himself doesn’t recommend this for teams. The ‘edit prod and refresh’ loop relies on owning all the code in your head.
  • Backup. The whole product is in database.sqlite. Set up rsync or litestream from day one.

Tags

In this stack

7 tools
PHP

Server-side language that still runs an enormous slice of the web. Ubiquitous shared hosting, instant deploy via FTP/git, mature ecosystem.

Used here for: Vanilla PHP, no Laravel, no Symfony, no framework. Just `index.php` and `function ()` and `mysqli_query`. Pieter writes it that way on purpose.

SQLite

Single-file embedded SQL database. Production-grade for surprisingly large workloads; the Rails 8 default and the canonical indie-hacker DB.

Used here for: Single-file database. One server, one.db file, daily rsync to backups. Scales further than people expect.

GitHub

Industry-standard Git hosting with Copilot, Actions CI/CD, and the largest dev community. GitHub handles version control and team collaboration, branches, pull requests, code review, CI/CD, and project knowledge.

Used here for: Source control (although Pieter famously edits in production sometimes, don't recommend).

DigitalOcean App Platform

Full PaaS with managed databases and a clean operator interface. DigitalOcean App Platform handles deployment and hosting, often with a global edge network and zero-config CI/CD.

Used here for: Hosting, historically a single $20 DigitalOcean droplet running everything. Hetzner is the 2026 alternative.

Stripe

Developer-first payments with Billing, Connect, and Radar. Stripe handles online payments, checkout, subscriptions, billing, and compliance.

Used here for: Payments. Pieter wrote the canonical 'how I integrated Stripe in 50 lines of PHP' post.

Postmark

Transactional email with industry-leading deliverability. Postmark handles transactional or marketing email, sending, deliverability, templates, and reputation.

Used here for: Transactional email. Cheap, reliable, easy to integrate from PHP.

Cloudflare R2

S3-compatible object storage with zero egress fees. Cloudflare R2 provides object storage and/or a content delivery network, the layer your assets and uploads live on.

Used here for: Static asset CDN, Pieter typically puts product images and screenshots here.

Related