Pieter Levels: The $3M+/Year One-Person Company Textbook

70+ products, portfolio revenue ~$3.1M ARR. Flagship product PhotoAI has pulled back from its $138K/month peak to $105K/month, and Levels has confirmed he now uses Claude Code — the first pullback signal from this icon of the Vibe Coding case.

indie hacker textbookBuild in PublicLindy Effect
~7min Updated 2026-09-12

Basics

ItemDetails
FounderPieter Levels (@levelsio)
ProductsPhotoAI (AI portraits, $105K/month, down ~24% from its $138K/month peak), NomadList (digital nomad database, $38K/month), RemoteOK (remote jobs, $43K/month), fly.pieter.com (AI flight simulator, $87K/month peak), and more
Team size1 person (zero employees)
RevenuePortfolio revenue ~$3.1M ARR, roughly flat; PhotoAI’s margin still ~76%
AI stackClaude Code (now the primary collaborator on his codebase), Cursor (early-days main IDE), Stable Diffusion / Flux (PhotoAI image generation), Grok 3 (server-side code assist)
Tech stackVanilla PHP + jQuery + SQLite (core products); Three.js + HTML (fly.pieter.com); deployed on a single Hetzner server, never migrated to a modern framework
SourceIndie Hackers deep dive / Lex Fridman Podcast #440 / FastSaaS analysis / andrew.ooo deep dive (updated 2026-09)

Storyline

Background: Pieter Levels is Dutch, and has lived as a digital nomad traveling the world since 2014. He challenged himself to ship 12 products in 12 months (“12 startups in 12 months”), which produced NomadList. Over the following 10 years, he shipped more than 70 products. Most of them failed (he’s publicly stated 95% of his projects never took off), but the few that succeeded kept compounding — a “long-tail compounding” pattern: NomadList still brings in $38K/month 11 years later. The whole run has been zero funding, zero employees, zero frameworks — just PHP + jQuery + SQLite.

Turning point: In February 2023, Levels launched PhotoAI.com — a SaaS product that uses Stable Diffusion to generate AI portrait photos for users. It marked his pivotal shift from “tool products” to “AI-native products.” PhotoAI hit $5.4K MRR in its first week and rocketed to a $132–138K MRR peak within 18 months, becoming his single biggest revenue driver by far. In February 2025, he built fly.pieter.com (a browser-based 3D multiplayer flight simulator) with Cursor in 3 hours, and went from $0 to $1M ARR in 17 days — the icon of the “Vibe Coding” movement.

Current status (updated 2026-09): PhotoAI has pulled back from its peak to $105K/month (profit $80K/month, margin still ~76%), and portfolio-wide revenue of ~$3.1M ARR is roughly flat — the earlier accelerating-growth trajectory hasn’t continued. This is the first revenue-decline signal for the most-referenced flagship case in this knowledge base — both things are true at once: the 0-to-$138K explosive growth over 18 months genuinely happened, and the subsequent pullback genuinely happened too. The infrastructure hasn’t changed (a single Hetzner server + SQLite, the backend is still a single index.php file), but the tool stack has: Levels has confirmed he now uses Claude Code as a first-class collaborator on his codebase, a shift away from the earlier hand-coding-plus-Cursor-assist pattern. He’s still a solo operator, with an estimated net worth of $40–60M (including his investment portfolio), and in 2025 Lex Fridman had him on for a 3-hour podcast interview.

Workflow Breakdown

Minimum loop analysis

StepWhat he didAI involvementNotes
1. Think it throughStarts from his own needs (digital nomad → NomadList), or tracks tech trends (Stable Diffusion → PhotoAI). Tests ideas on X/TwitterLowHis core edge is “user insight”
2. Write a specMinimal — usually a one-sentence description (“make a 3D flying game in a web browser”)Low → HighIn the AI era, a natural-language prompt serves as the spec
3. ImplementPHP + jQuery + SQLite by hand (traditional products); Claude Code / Cursor + Vibe Coding (AI-era products)Low → Very highThe tool stack has evolved from “Cursor-assisted” to “Claude Code-led,” and the share of AI-written code keeps rising
4. Validate”Build in Public” — posts progress and revenue numbers publicly on XMedium320,000 people played fly.pieter.com within 17 days
5. IterateHigh-frequency small iterations. “If I can’t write a function in 10 minutes, I let AI write it”High95% of his 70+ products were abandoned — the real nature of iteration is “fast culling”

Tool stack

  • Vanilla PHP + jQuery + SQLite: Levels’ “counter-trend” tech stack. The rationale is the Lindy Effect — the technology that has survived longest is most likely to keep surviving. PHP has been running since 1995. Single-server deployment, near-zero ops cost.
  • Claude Code: Confirmed by Levels himself as now his first-class collaborator on the codebase, replacing the earlier pattern of mostly hand-coding with Cursor assistance. It’s also left a scar or two — one incident where an instruction overrode the testing protocol caused a production parse error, a reminder that the more automated things get, the more clearly instruction boundaries need to be spelled out.
  • Cursor (AI IDE): His main dev tool in the earlier era. All of fly.pieter.com’s code was generated in Cursor via natural-language prompts.
  • Stable Diffusion / Flux: PhotoAI’s core engine. Users upload selfies, the model fine-tunes on them, and generates AI portraits.
  • X/Twitter (1.2M+ followers): Not a tool but a “distribution engine.” The Build in Public strategy means every new product comes with built-in traffic.

Roles one person carried

RoleAI replacementNotes
Product manager10%Core decisions are entirely human
Development80%For AI-era products, Claude Code / Cursor generates most of the code
Design60%Minimalist UI, AI-assisted
Marketing / distribution20%10 years of accumulated 1.2M X followers
Customer support50%Product design minimizes support demand
Ops70%Simple tech stack, minimalist single-server deployment

3 Reproducible Key Moves

  1. Pick your stack by the Lindy Effect and drive ops cost to near zero: Choose technology that has survived 15+ years (PHP / Python / PostgreSQL / SQLite), deploy on a single machine, refuse containerization and microservices. Products can run for years with zero maintenance (NomadList has been running for 11 years).

  2. Build in Public as a zero-cost acquisition engine: Post a weekly product data update (revenue / users / key metrics) on social platforms, with a link to the product. 1.2M followers are the compounding result of 10 years of Build in Public — posted publicly when things are up, and posted publicly when things pull back too.

  3. Replace careful planning with “high-frequency launches, fast culling”: 95% of his 70 products failed — that’s not a high failure rate, it’s a high filtering rate. Set yourself a hard “ship in 48 hours” constraint. AI coding can compress that down to 3–6 hours.

Limits and Risks

  • Personal brand isn’t reproducible: 1.2M X followers are the result of 10 years of accumulation. Behind “build a $1M ARR product in 3 hours” is 10 years of distribution-channel building.
  • Revenue concentration is too high, and it doesn’t only go up: PhotoAI has long made up ~70% of total revenue — an extremely heavy single-product dependency; in 2026 it pulled back ~24% from its peak, this case’s first real revenue downturn — when you use this case to think about “one-person companies,” don’t just look at the explosive-growth curve.
  • AI-product wrapper risk: PhotoAI is fundamentally a wrapper around Stable Diffusion. When the underlying model providers offer the same functionality directly, wrapper products can devalue quickly — this may be part of why revenue pulled back too.
  • Technical debt hazards: PHP + jQuery + SQLite runs fine at small scale, but PhotoAI’s SQLite concurrent-write limits could become a bottleneck. Levels himself admits the codebase is “messy.”
  • Vibe Coding’s quality ceiling: Entertainment products can tolerate low code-quality standards, but high-risk domains (finance, healthcare) can’t get away with “don’t look at the code, just look at the output”; as automation increases (e.g., Claude Code leading the codebase), instruction and protocol clarity matters even more, not less.

Benchmark against this case?

Let the AI coach use this case as a mirror — what to borrow, where the gap is. Free, no code uploaded.

Benchmark in the AI coach →

Related cases