📚 Course contents
👋 How this course works
1 · Get your path
The 2-minute quiz picks the lessons you actually need, in order. Already know something? It skips it.
2 · One lesson at a time
Each lesson is 10–30 minutes and ends with a small "your turn" checklist. Do it, tick it, move on. Email nudges keep you going if you want them.
3 · Ship something real
The finish line isn't a certificate. It's a live app, on your own domain, that other people can open.
The whole course is free and open. No paywall, no upsell, no account needed to read. An account (free) only syncs your checkmarks across devices.
🌱 Start from zero
4 lessons · ~90 minWhat the web actually is, your tools, and the lazy method: how to work with an AI that writes the code for you.
How the web actually works
Servers, domains, DNS, HTTPS and the one front door, in plain English, so nothing later in the course feels like magic.
🧰Lesson 2 · ~30 min · beginnerSet up your workshop
VS Code, Claude Code, a terminal you aren't scared of, git with a private GitHub repo, and the Windows traps that cost the fleet hours.
🤖Lesson 3 · ~25 min · beginnerWork with Claude Code
Prompts that get small, working results, a notes file the AI reads every session, and the habit of checking its work instead of trusting it.
🦥Lesson 4 · ~20 min · beginnerThe laziest thing that works
The ladder that stops an AI from building a mansion when you asked for a shed, and the one place laziness stops: logins, money and secrets.
💡 Idea & data
2 lessons · ~60 minPick an idea the data can actually carry, and decide what you'll claim before you build anything.
Find an idea the data can carry
Where the fleet's ideas came from, plus a 20-minute vet that proves the data exists for your place, is allowed, and supports the features you want.
⚖️Lesson 6 · ~30 min · intermediateNumbers you can defend
Make every number and label on your app true: know what one row means, use medians, treat official totals as alarms, and remember empty beats made-up.
🧱 Build it small
4 lessons · ~105 minOne HTML file, checks that catch the AI's quiet mistakes, pages that work on a phone, and maps when your data wants them.
Build static-first
One HTML file and a data file go shockingly far: content as data, saved progress, deep links, search, no build step, and media rendered once.
✅Lesson 8 · ~30 min · beginnerCheck the AI's work
One self-testing logic file, a parse check that reads the JS inside your HTML, real screenshots before every ship, and a live test you clean up after.
🎨Lesson 9 · ~25 min · beginnerMake it look right everywhere
Phones, dark mode, accessibility and every state your app can be in, turned into design tokens and checks instead of hope.
🗺️Lesson 10 · ~25 min · intermediateMaps, charts and dashboards
Put data on a map or a chart without a framework and without getting rate-limited: tiles, fetch storms, geocoding and charts that don't mislead.
🚀 Ship it live
4 lessons · ~95 minYour own server, one shared front door, a real URL with HTTPS, analytics from day one, and an honest launch.
Your own server
Rent one small VPS, log in with a key, learn Docker in ten minutes, and let Claude manage DNS through the Hostinger MCP without wiping your zone.
🚀Lesson 12 · ~30 min · intermediateDeploy behind one front door
The pattern every fleet app runs on: a tiny container per app, one shared Caddy, automatic HTTPS, and reload habits that keep the other sites up.
📊Lesson 13 · ~20 min · beginnerKnow if it's working
Self-hosted, cookieless Umami for every app, proof that real visits land, events for the clicks that matter, and a five-minute weekly read.
📣Lesson 14 · ~20 min · beginnerLaunch, honestly
Listed, unlisted or private; a front door that answers questions in order; trust pages and real proof; a hub card; and where to post.
👥 Users & money
5 lessons · ~125 minThe smallest backend that works, one login for every app, email that arrives, sync that never loses work, and getting paid safely.
Add a backend only when forced
The few things a browser can't do, and the smallest server piece for each: a Caddy route, a zero-dependency Node container, or a real framework.
👤Lesson 16 · ~30 min · intermediateAccounts without building auth
One PocketBase login for every app, reached through each app's own domain, with rules that keep data private and a script that proves it.
✉️Lesson 17 · ~20 min · intermediateEmail that arrives
One mailbox on your domain, SMTP switched on once for every app, SPF, DKIM and DMARC done right, and reset links that point at the real site.
🔄Lesson 18 · ~20 min · advancedSync and sharing that never lose work
Two phones, two parents, one log: merge by id, tombstones for deletes, household sharing from rules alone, and a two-user test before any screens.
💳Lesson 19 · ~30 min · intermediateGet paid without leaking money
A free tier first, then Stripe's hosted Checkout and Portal, entitlements the server checks, and signed webhooks, proven end to end in test mode.
📣 Grow & reach
4 lessons · ~100 minA list you own, pages Google can read, and a spot on their home screen, with reminders, or in Google Play.
Build an email list (like this one)
A lead magnet worth an email, double opt-in that link scanners can't trigger, tags from answers, a drip that sends itself, and the rules that keep it legal.
🔎Lesson 21 · ~20 min · intermediateGet found on Google
Give search engines real pages beside your app: guides, a front door at /, honest pages generated from your data, sitemaps and structured data.
📲Lesson 22 · ~30 min · intermediateMake it an app on their phone
A manifest, icons, a service worker that never serves yesterday, an install button that works on iPhone, and reminders that store nobody's keys.
📦Lesson 23 · ~25 min · advancedShip to Google Play
Wrap your web app as a Trusted Web Activity, prove the site owns it, and handle the paperwork Play asks for: privacy, data safety and deletion.
🛡️ Scale & operate
3 lessons · ~90 minBig public files, live feeds, and keeping one small server boring: backups you've restored, secrets, incidents.
Big public data on a small server
Turn huge, messy public files into small ones a cheap server can serve: stream them, count rows per source, swap in atomically, join carefully.
📡Lesson 25 · ~30 min · advancedLive feeds without getting banned
Polling other people's APIs politely: do the budget math, read status codes literally, never save a bad fetch, and validate hand-picked IDs.
🛡️Lesson 26 · ~30 min · intermediateKeep the server boring
Backups you've actually restored, config in git with a drift check, secrets that stay secret, calm incident reviews, and admin pages without a back office.
📖 Hit a word you don't know?
Every term in the course, in plain English: the glossary. Stuck on something else? Email me — a real person answers.
26 lessons · about 11 hours if you read everything · most people need about half