Click to Career
From clicking buttons
to a real engineering job.
The bootcamp for the adult who can use a phone and a browser and nothing else. Thirty-two chapters take you from naming the four parts of a computer to shipping a full-stack TypeScript app and clearing the interview pipeline at a junior AI-engineer role. One gated assignment closes every chapter.
If any of this sounds familiar
You opened the editor.
You closed it again.
- You’ve heard the words “Git”, “React”, and “API” and you couldn’t say what any of them are without bluffing.
- The last tutorial you finished felt great in the moment and you couldn’t reproduce one line of it the next day.
- Every YouTube intro promises six weeks to a job and the comments are all from people six months in, still stuck on lesson three.
- You think you might be too old, too non-technical, or too late. You aren’t. The fear is the first thing the course dismantles.
- The terminal still feels like a hostile room you walked into by mistake.
None of that is a sign you can’t do this. It’s a sign every course you’ve tried skipped the part where the language gets translated for someone who’d only ever clicked. This one doesn’t.
What you walk away with
A working engineer, not a graduate of another course.
Ch 10–29
A full-stack TypeScript app you built, tested, deployed, and own
Ch 8, 21, 27
The vocabulary to read an unfamiliar codebase and ship a change
Ch 19
Tests that catch the regression before a user does
Ch 20
A debugging loop you trust instead of guessing
Ch 22–23
A local LLM in your editor and Claude Code for the larger work
Ch 29
A portfolio capstone you take to every interview
Ch 30
A resume, GitHub, and pipeline that actually return offers
Ch 31
A playbook for the first ninety days on the job
The bar isn’t “you finished the course.” The bar is you walk into the first ninety days and aren’t the person everyone has to babysit. Every chapter is cut down until it only contains what serves that.
The arc
Ten blocks. One direction.
Every block depends on the one before it. You don’t skip the terminal to get to React. You don’t skip databases to get to deploys. The order is the lesson.
- Block 1
Foundations
Ch 0–3Your computer, how software runs, the terminal, how the internet works. The vocabulary every later chapter assumes.
- Block 2
Web fundamentals
Ch 4–7HTML, CSS, JavaScript, the DOM. The three languages a browser actually runs, in the order it reads them.
- Block 3
Engineering hygiene
Ch 8–9Git and GitHub. Modern JS and TypeScript. The discipline that lets you change code without losing it.
- Block 4
Frontend
Ch 10–13React, the patterns that trip every beginner, Next.js, forms with real validation and accessibility.
- Block 5
Backend
Ch 14–18Node and Express, NestJS, Postgres and Prisma, auth done right, APIs beyond REST.
- Block 6
Engineering quality
Ch 19–21Testing the pyramid honestly, debugging as a learnable loop, refactoring you can defend.
- Block 7
AI tooling
Ch 22–23Local AI in VSCode for everyday work. Claude Code and the harness for spec-shaped work.
- Block 8
Production reality
Ch 24–26Deploying, observability and security, performance and scale. The skills that come after the code runs locally.
- Block 9
Career foundations
Ch 27–29Working as an engineer, staying current, and the capstone you take to interviews.
- Block 10
Getting hired
Ch 30–31Interview prep, then the first ninety days on the job. The chapters that turn the work into an offer.
The unit shape
Every unit, the same six beats.
You read the same shape every time. By the third unit, your brain knows what’s coming. The shape is the contract.
- 1. The promise.One paragraph. What you’ll be able to do at the end of this unit that you couldn’t at the start.
- 2. The mental model. Plain English with one concrete real-world analogy. A diagram if a picture works better than prose.
- 3. You do it, with me. Step-by-step. Screenshots for every UI step. A code block for every command. You do the work on your own machine.
- 4. What you should be seeing. The expected state at this point. If your screen doesn’t match, you stop and fix it.
- 5. Common stumbles. The two-to-four things that go wrong, named, with the fix for each. Drawn from people getting it wrong, not invented.
- 6. You should know. A short checklist of what you now understand. The chapter assignment composes from these.
Short, do-shaped units. The chapter-end assignment is longer and graded against a green/yellow/red rubric you score yourself.
Syllabus
32 chapters · 541 units
Chapter 0 is fully free. Every other chapter’s orientation unit is free. That’s 47open units — enough to skim before deciding to unlock.
Foundations
Ch 0–3Ch 0Your computerFoundation16 units
The chapter that closes the gap between 'I use a computer' and 'I can talk about a computer.' Files, paths, hidden files, permissions, keyboard fluency, browser dev tools.
- 0.0How this course works
- 0.1What a computer actually is
- 0.2Programs vs data: what software actually is
- 0.3Installing a program — what really happens
- 0.4Files: the unit of storage
- 0.5Folders and the tree of your machine
- 0.6Paths: how to name any file
- 0.7File extensions and what they mean
- 0.8Hidden files and dotfiles
- 0.9Permissions: who is allowed to do what
- 0.10The clipboard, deeper than you think
- 0.11Keyboard shortcuts: the thirty you will use today
- 0.12Window management
- 0.13Your browser: tabs, URLs, history, bookmarks
- 0.14Browser DevTools: a first peek
- 0.assignCapture-the-flag tour of your machine
Ch 1How software actually runsMedium12 units
Source vs binary, compile vs interpret, runtimes, processes, memory. Why 'works on my machine' happens. The mental model every other chapter relies on.
- 1.0How this chapter works
- 1.1Source code: what it actually is
- 1.2The translation: compile vs interpret
- 1.3What a runtime actually is
- 1.4What a process really is (revisit)
- 1.5Memory while a program runs: stack vs heap
- 1.6Works on my machine: the real causes
- 1.7Why JavaScript runs in two places
- 1.8The language map (without picking favourites)
- 1.9Hands-on: same logic in three playgrounds
- 1.10Bytecode and JIT, conceptually
- 1.assignThree-language print-and-loop comparison
Ch 2The terminalMedium16 units
The shell, the prompt, and twenty commands you'll use forever. Pipes, redirection, env vars, PATH. Bash and PowerShell side by side.
- 2.0Orientation: the chapter ahead
- 2.1The shell vs the terminal vs the prompt
- 2.2Opening the right one: Terminal.app, iTerm2, PowerShell, Windows Terminal, WSL
- 2.3pwd, ls, cd — moving around
- 2.4Tab completion and history — the productivity multiplier
- 2.5mkdir, touch — creating
- 2.6cp, mv, rm — copying, moving, deleting (and why rm is dangerous)
- 2.7Reading files: cat, less, head, tail
- 2.8Pipes and redirection
- 2.9Wildcards and globbing
- 2.10Environment variables
- 2.11The PATH variable, demystified
- 2.12Configuring your shell: .zshrc, .bashrc, PowerShell $PROFILE
- 2.13Aliases that save your fingers
- 2.14The survival kit: the twenty commands you will use forever
- 2.15Assignment: Shell-only file management exercise
Ch 3How the internet worksPEAK16 units
A packet's life from your browser to a server in another country. DNS, TCP, HTTP, HTTPS, headers, CDNs. The network tab as your first inspection tool.
- 3.0Orientation: from "the internet" to a stack of layers
- 3.1Computers talking: IP addresses and packets
- 3.2Names not numbers: DNS
- 3.3Reliable conversation: TCP (and a sentence about UDP)
- 3.4Ports: how one machine runs many servers
- 3.5The protocol of the web: HTTP
- 3.6HTTP methods (GET, POST, PUT, PATCH, DELETE)
- 3.7HTTP status codes: the families
- 3.8HTTP headers (the ones that matter to beginners)
- 3.9HTTPS and why it matters
- 3.10Caching: browser cache, CDN, server cache
- 3.11CDNs and edge locations
- 3.12Cookies and sessions, briefly
- 3.13CORS, a one-paragraph orientation
- 3.14Following a real request in DevTools, end to end
- 3.assignTrace a request and explain each step
Web fundamentals
Ch 4–7Ch 4HTMLMedium17 units
The file the server returns. Tags, structure, semantics, forms, accessibility — the structure layer before any styling lands.
- 4.0Orientation
- 4.1What HTML actually is
- 4.2Your first HTML file
- 4.3Tags and attributes
- 4.4Document structure
- 4.5Headings and paragraphs
- 4.6Links
- 4.7Images and alt text
- 4.8Lists
- 4.9Tables — for data only
- 4.10Forms part 1 — text and submit
- 4.11Forms part 2 — every input type that matters
- 4.12Forms part 3 — labels, required, validation
- 4.13Semantic HTML
- 4.14Accessibility primitives
- 4.15The head deep dive
- 4.assignThree-page static site, 100 on Lighthouse a11y
Ch 5CSSMedium18 units
The look layer. Selectors, the cascade, the box model, flexbox, grid, responsive, custom properties, and the Tailwind subset that earns its weight.
- 5.0Orientation
- 5.1What CSS actually is and how it reaches the browser
- 5.2Three ways to apply CSS
- 5.3Selectors
- 5.4The cascade, specificity, inheritance
- 5.5The box model, drawn out
- 5.6Display: block, inline, inline-block
- 5.7Positioning
- 5.8Flexbox in seven cases
- 5.9Grid in five cases
- 5.10Responsive design
- 5.11Typography
- 5.12Color
- 5.13Custom properties (CSS variables)
- 5.14Logical properties and a modern reset
- 5.15Tailwind primer
- 5.16When to write CSS and when to reach for utilities
- 5.assignRebuild a real product page from a screenshot
Ch 6JavaScript, the languagePEAK22 units
Types, scope, closures, modules, and the event loop. Promises and async/await. The language itself, separate from where it runs.
- 6.0Orientation: what this chapter delivers
- 6.1What JavaScript is and where it runs
- 6.2Running your first JS: browser console and Node
- 6.3Values, types, and the primitives
- 6.4Variables: let, const, and why nobody uses var
- 6.5Operators and equality: == vs ===
- 6.6Strings: template literals, escaping, useful methods
- 6.7Numbers, NaN, and the precision gotchas
- 6.8Arrays and the methods you'll use every day
- 6.9Objects, properties, and shorthand
- 6.10Control flow: if, switch, ternary, optional chaining
- 6.11Loops: for, for-of, for-in, while, and reaching for map/filter/reduce
- 6.12Functions: parameters, defaults, rest, spread
- 6.13Scope and closures
- 6.14this and why it confuses everyone
- 6.15Modules: import, export, default vs named
- 6.16Error handling: throw, try/catch, the Error object
- 6.17Asynchronicity from first principles: the event loop
- 6.18Promises: states, chaining, error handling
- 6.19async/await
- 6.20fetch and reading JSON
- 6.assignBuild a CLI script that fetches and transforms public-API data
Ch 7The DOM and the browserMedium16 units
JavaScript controlling a web page. Events, delegation, storage, CORS, and the browser as a security boundary.
- 7.0Orientation: from "I know JS" to "I can build a web page"
- 7.1What the DOM actually is
- 7.2Finding elements: querySelector, querySelectorAll, getElementById
- 7.3Reading and changing element content
- 7.4Creating, inserting, removing elements
- 7.5Attributes vs properties
- 7.6Classes and classList
- 7.7Events: addEventListener and the event object
- 7.8Event bubbling and capture
- 7.9Event delegation: the trick that scales
- 7.10Forms: FormData, validation, submit
- 7.11Storage: localStorage, sessionStorage, cookies, brief IndexedDB
- 7.12Fetching from JS: putting Ch 6 to work on a real page
- 7.13CORS in plain English
- 7.14The browser as a security boundary
- 7.assignZero-framework to-do app with localStorage persistence
Engineering hygiene
Ch 8–9Ch 8Git and GitHubPEAK19 units
Three trees, branches, rebase vs merge, PRs as a social artifact, conflicts as a routine event. The discipline that lets you change code without losing it.
- 8.0Orientation: why this chapter exists
- 8.1Why version control exists (and what you did before Git without realising)
- 8.2Installing Git, configuring your name and email
- 8.3`git init` and what a repo is
- 8.4The three trees: working directory, index, HEAD
- 8.5`git add`, `git commit`, `git log`
- 8.6`git status` and `git diff`: the two commands you'll run a million times
- 8.7Writing commits that future you can read
- 8.8Branching, switching, `git switch -c`
- 8.9Merging (fast-forward vs three-way)
- 8.10Rebasing — and when each is correct
- 8.11Remotes: `git remote`, `origin`, push and pull
- 8.12GitHub: account setup, SSH keys, creating a repo
- 8.13Pull requests as a social artifact, not a Git feature
- 8.14Merge conflicts as a normal event, not an emergency
- 8.15`.gitignore` and what never to commit
- 8.16Tags, releases, and `git revert`
- 8.17Recovering from mistakes: `git reflog`, `git restore`, `git reset`
- 8.assignShip the to-do app to GitHub
Ch 9Modern JavaScript and TypeScriptMedium17 units
Types are descriptions, not enforcement. Narrowing, generics, unknown vs any vs never. The tool that catches errors before they reach a user.
- 9.0Orientation: why this chapter delivers TypeScript, not just modern JS
- 9.1Why TypeScript exists (the problem JS leaves you with)
- 9.2Installing TS, tsconfig.json for beginners
- 9.3Types are descriptions, not enforcement
- 9.4Primitive types and the literal-types trick
- 9.5Object types, optional properties, readonly
- 9.6Arrays, tuples, and the index signature
- 9.7Functions: parameter types, return types, function types
- 9.8Unions and intersections
- 9.9Narrowing: typeof, instanceof, in, discriminated unions
- 9.10interface vs type (and when to use each)
- 9.11unknown vs any vs never
- 9.12Generics, gently — three worked examples
- 9.13Utility types: Partial, Pick, Omit, Record, ReturnType
- 9.14Modern ES features worth using daily: destructuring, spread, optional chaining, nullish coalescing
- 9.15Type-driven development in practice
- 9.assignConvert the to-do app to strict TypeScript with zero any
Frontend
Ch 10–13Ch 10React fundamentalsPEAK16 units
Components, props, state, re-renders, lists, forms, lifting state. The mental model first, the library second.
- 10.0Orientation
- 10.1Why React exists
- 10.2Setting up: Vite + React + TS
- 10.3Components as functions that return JSX
- 10.4JSX: it's just syntactic sugar
- 10.5Props: passing data down
- 10.6State and useState
- 10.7Re-renders: when and why
- 10.8Event handlers in React vs raw DOM
- 10.9Conditional rendering
- 10.10Lists and keys
- 10.11Forms in React: controlled vs uncontrolled
- 10.12Lifting state up
- 10.13Composition over inheritance
- 10.14Component file structure and naming
- 10.assignSix-component dashboard
Ch 11React patterns and pitfallsMedium16 units
useEffect traps, custom hooks, memoisation honestly, context, suspense. Server state vs client state, and why TanStack Query is the right answer for fetched data.
- 11.0Orientation: the chapter where React code stops looking right and starts being right
- 11.1useEffect: when you really need it (and when you don't)
- 11.2Effect dependencies and the lint rule that saves you
- 11.3Cleanup functions: the return that's not optional
- 11.4Custom hooks: extracting logic, not state
- 11.5useRef: when it's correct
- 11.6useMemo and useCallback: honestly
- 11.7useReducer: when state grows up
- 11.8Context and the prop-drilling trade-off
- 11.9Error boundaries: the one part of React that has to be a class
- 11.10Suspense, briefly
- 11.11Server state vs client state: the distinction that matters
- 11.12TanStack Query: the right answer for fetched data
- 11.13Form state libraries: when to reach for them
- 11.14Render-phase rules: purity and side effects
- 11.assignRefactor the broken dashboard and prove the perf in the profiler
Ch 12Next.jsPEAK17 units
App Router, server components, server actions, route handlers, deploying to Vercel. The frontend that ships to production.
- 12.0Orientation: what we are building
- 12.1Why Next.js (what React alone leaves you with)
- 12.2create-next-app and the project structure
- 12.3The App Router: file-system to URL mapping
- 12.4Server components vs client components — the seam
- 12.5'use client' and when to add it
- 12.6Layouts and nested layouts
- 12.7loading.tsx and error.tsx
- 12.8Dynamic routes and route groups
- 12.9Data fetching in server components
- 12.10Caching: the four caches and what they do
- 12.11Server actions
- 12.12Route handlers (route.ts)
- 12.13Streaming and Suspense at the page level
- 12.14Metadata and SEO
- 12.15Deploying to Vercel
- 12.assignAssignment: Ship a multi-page Next.js app at a public URL
Ch 13Forms, validation, accessibilityMedium16 units
Where your app meets reality. React Hook Form, Zod, ARIA without cargo-cult, keyboard navigation, screen-reader testing.
- 13.0Orientation: one form, fifteen passes, three tests
- 13.1Why forms are where your app meets reality
- 13.2React Hook Form: the mental model and minimal setup
- 13.3Schema-first validation with Zod
- 13.4Wiring Zod to React Hook Form
- 13.5Client-side vs server-side validation (you always need both)
- 13.6Server-side validation with server actions and route handlers
- 13.7Error states, written for humans
- 13.8Loading states (and the optimistic UI)
- 13.9Empty states (the screen most teams forget)
- 13.10Form state machine: idle to submitting to error to success
- 13.11ARIA without cargo-cult: the five attributes you'll actually use
- 13.12Keyboard navigation: focus order, tab traps, skip links
- 13.13Screen-reader testing: NVDA on Windows, VoiceOver on macOS
- 13.14Multi-step forms (and their special hazards)
- 13.assignAssignment: Multi-step form passing axe, NVDA, and keyboard-only
Backend
Ch 14–18Ch 14Node.js and the backend mental modelMedium18 units
A server is a program that waits for HTTP requests. Express, middleware, env vars, errors, CRUD from scratch.
- 14.0Orientation: what we are building this chapter
- 14.1A server is just a program that waits for HTTP requests
- 14.2Node.js: same JS, no browser
- 14.3npm vs pnpm vs yarn (pick one and move on)
- 14.4package.json and node_modules demystified
- 14.5Module systems: CommonJS vs ESM
- 14.6Your first server with the built-in http module
- 14.7Express: why it exists and what it adds
- 14.8Routes and route handlers
- 14.9Middleware as a pipeline
- 14.10Reading request bodies, query strings, URL params
- 14.11Sending responses: status, headers, JSON
- 14.12Error handling that doesn't crash your server
- 14.13Environment variables and dotenv
- 14.14Logging that helps future you
- 14.15Building a CRUD API end-to-end
- 14.16Calling your API from your Next.js frontend
- 14.assignAssignment: Express CRUD API exercised with curl and the browser
Ch 15NestJSPEAK19 units
Modules, controllers, services, DI, DTOs, guards, interceptors, pipes. The structure that lets a backend grow past the toy.
- 15.0Orientation: from writing a backend to structuring one
- 15.1Why NestJS exists: the five opinions it bakes in
- 15.2Installing Nest, the CLI, and your first module
- 15.3The Nest project structure, file by file
- 15.4Modules: the box with four lids
- 15.5Controllers: routes as decorated methods
- 15.6Services and providers: where the logic lives
- 15.7Dependency injection from scratch (the explanation that finally lands)
- 15.8DTOs: one class per request body
- 15.9class-validator and class-transformer: rules on a class
- 15.10Pipes: validate, transform, or reject
- 15.11Guards: who is allowed to call this route
- 15.12Interceptors: wrap the handler, time it, transform it
- 15.13Exception filters: turn thrown errors into clean JSON
- 15.14Configuration management with @nestjs/config
- 15.15Logging in Nest: kill the console.log habit
- 15.16Background jobs: BullMQ in the shape Nest expects
- 15.17Testing in Nest: the test module, mocks, and e2e
- 15.assignAssignment: rewrite the Ch 14 CRUD in Nest with proper structure
Ch 16DatabasesPEAK19 units
Data outlives code. SQL, Postgres, schemas, relations, indexes, normalisation, Prisma, migrations, the N+1 problem.
- 16.0Orientation: the chapter that puts a real database behind your API
- 16.1Why data outlives code
- 16.2SQL vs NoSQL (and why we go SQL first)
- 16.3Installing Postgres locally (and the Docker alternative)
- 16.4psql and GUI tools (TablePlus, DBeaver, pgAdmin)
- 16.5Tables, rows, columns, types
- 16.6Primary keys, foreign keys, indexes
- 16.7SELECT, WHERE, ORDER BY, LIMIT
- 16.8INSERT, UPDATE, DELETE
- 16.9JOIN: inner, left, right, full
- 16.10Normalisation: 1NF, 2NF, 3NF, with worked examples
- 16.11When to denormalise (and the cost)
- 16.12Transactions and isolation levels
- 16.13Indexes, how they work
- 16.14The N+1 problem and how to spot it
- 16.15Prisma: schema-first, migrations, the client
- 16.16Connection pooling
- 16.17Seeding data for development
- 16.assignAssignment: Model and migrate, then wire into the Nest API
Ch 17AuthPEAK18 units
Sessions vs JWT, password hashing, OAuth, magic links, RBAC, CSRF and XSS in auth contexts. The chapter where security stops being someone else's job.
- 17.0Orientation: the chapter where your API learns who you are
- 17.1What authentication actually is (and what it isn't)
- 17.2Authentication vs authorisation: the words that get mixed up
- 17.3Passwords: the only acceptable storage (bcrypt and argon2)
- 17.4Why you never roll your own password hashing
- 17.5Sessions: how they work, where they live
- 17.6JWTs: how they work, what they're for, what they're not for
- 17.7Sessions vs JWTs: where each is correct
- 17.8OAuth 2.0 step by step: the dance, drawn out
- 17.9OpenID Connect on top of OAuth
- 17.10Magic links and passwordless flows
- 17.11Multi-factor authentication: TOTP and WebAuthn at a high level
- 17.12RBAC vs ABAC: roles vs attributes
- 17.13CSRF attacks in plain English
- 17.14XSS in auth contexts
- 17.15Choosing a library: NextAuth/Auth.js, Clerk, Supabase Auth
- 17.16Wiring email/password and Google OAuth into the Nest API
- 17.assignAssignment: Working auth with email/password and Google OAuth
Ch 18APIs beyond RESTMedium16 units
REST in detail, GraphQL, tRPC, WebSockets, webhooks, idempotency, rate limiting. The protocols you'll see at real companies.
- 18.0Orientation: every API is a contract
- 18.1REST, in detail
- 18.2The Richardson maturity model
- 18.3Versioning APIs without ruining your life
- 18.4Pagination, filtering, sorting
- 18.5GraphQL: what it solves and what it doesn't
- 18.6tRPC: type-safe RPC inside the JS monorepo
- 18.7REST vs GraphQL vs tRPC — when to pick each
- 18.8WebSockets: the long-running connection
- 18.9WebSockets the protocol: handshake, frames, ping/pong
- 18.10Server-sent events (and when to prefer them)
- 18.11Webhooks: when they call you
- 18.12Idempotency keys and at-least-once delivery
- 18.13Rate limiting strategies
- 18.14Wiring it all together in Nest
- 18.assignAssignment: same domain over REST, tRPC, and WebSockets
Engineering quality
Ch 19–21Ch 19TestingPEAK17 units
The pyramid honestly, Vitest, integration, Playwright, mocking, CI. The skill that lets you change code without breaking it.
- 19.0Orientation: why this chapter exists
- 19.1Why test (the real reasons)
- 19.2The testing pyramid, correctly drawn
- 19.3Unit tests with Vitest
- 19.4Test structure: arrange, act, assert
- 19.5Test data builders and factories
- 19.6Test-double taxonomy: stub, fake, spy, mock
- 19.7What to mock, what never to mock
- 19.8Integration tests for the API
- 19.9Database in tests: container vs in-memory vs real
- 19.10End-to-end tests with Playwright
- 19.11Snapshot tests: when they help, when they rot
- 19.12TDD as a habit, not a religion
- 19.13Coverage that means something
- 19.14Flaky tests: detection, isolation, fix
- 19.15Continuous integration with GitHub Actions
- 19.assignAssignment: 80% meaningful coverage and one Playwright happy-path
Ch 20DebuggingPEAK17 units
Hypothesis → experiment → observe → update. Stack traces, dev tools end to end, the VSCode debugger, git bisect. The skill nobody teaches.
- 20.0Why you stop guessing today
- 20.1The debugging loop: hypothesis, experiment, observe, update
- 20.2Stack traces, top to bottom
- 20.3DevTools Elements end to end
- 20.4DevTools Console as a debugging tool
- 20.5DevTools Network deep dive
- 20.6DevTools Sources and breakpoints
- 20.7DevTools Performance, at a level you can use today
- 20.8DevTools Memory, at a level you can use today
- 20.9The VSCode debugger for Node
- 20.10The VSCode debugger for the browser
- 20.11Logging strategies: levels, structure, when to log
- 20.12`console.log` debugging as a skill, not a sin
- 20.13`git bisect`: binary search the regression
- 20.14Rubber-ducking and when to walk away
- 20.15Reading other people's error messages
- 20.assignAssignment: Twelve planted bugs
Ch 21RefactoringMedium16 units
Named smells, extract function/module, refactoring under and without tests, strangler-fig. Reading large unfamiliar code without panicking.
- 21.0Orientation: what refactoring is, and the three goals you refactor toward
- 21.1Why refactor: the boring honest answer
- 21.2Reading large unfamiliar codebases in thirty minutes
- 21.3The six named smells you'll see all year
- 21.4Extract function: by hand and with VSCode
- 21.5Extract module: moving a group of functions into their own file
- 21.6Rename: the most underused refactor
- 21.7Replace conditional with polymorphism — when it earns its weight
- 21.8Refactoring under tests: scaffolding for safe change
- 21.9Refactoring without tests: characterisation first
- 21.10The boy-scout rule: leave it slightly better
- 21.11Strangler-fig migrations: replacing a system one route at a time
- 21.12The cost of premature abstraction
- 21.13Dependency graphs and what they tell you
- 21.14Tooling: VSCode refactors, ts-morph, and codemods
- 21.assignAssignment: refactor a messy starter three times — readability, testability, performance
AI tooling
Ch 22–23Ch 22Local AI in VSCodeMedium17 units
Self-contained AI in your editor. Ollama, Continue.dev, the model landscape, quantisation. When local is enough, when you reach for a frontier model.
- 22.0Orientation: a coding model on your own laptop
- 22.1Why local matters
- 22.2Ollama: the local model runtime
- 22.3Installing Ollama on macOS, Windows, Linux
- 22.4Pulling your first model
- 22.5Running a model from the terminal
- 22.6Quantisation explained for users
- 22.7Hardware reality check
- 22.8The current coding-model families
- 22.9Continue.dev: the local-first VSCode extension
- 22.10Continue.dev configuration
- 22.11Inline edits with a local model
- 22.12Codebase indexing and retrieval
- 22.13Cline as the local agent-style alternative
- 22.14When local fails — the honest threshold
- 22.15The hybrid workflow
- 22.assignAssignment: Refactor a module with a local model only
Ch 23Claude Code and the harnessPEAK17 units
The CLI loop, /commands, skills, hooks, memory, subagents, plan mode, loop mode. Writing specs, not snippets.
- 23.0Orientation: what this chapter changes
- 23.1What 'the harness' actually is
- 23.2Installing Claude Code, first run
- 23.3The CLI loop: input → tools → output → next turn
- 23.4Permission modes and why they matter
- 23.5Slash commands and skills
- 23.6Memory: persistent notes the harness keeps for you
- 23.7Hooks: hard to grasp on day one, then indispensable
- 23.8Subagents and parallel work
- 23.9Plan mode: think before doing
- 23.10Loop mode: long-running self-paced work
- 23.11MCP servers in one sentence each
- 23.12When Claude Code beats your IDE and when it doesn't
- 23.13How specs become code: writing prompts not snippets
- 23.14Cost honesty: tokens, model tiers, when to drop down
- 23.15Versus Cursor / Windsurf / Aider — quick comparison
- 23.16Assignment: Ship a full feature end to end with Claude Code
Production reality
Ch 24–26Ch 24DeployingMedium17 units
Vercel, Railway, Fly, Cloudflare. CI/CD with GitHub Actions. Preview deploys, rollbacks, migrations in CI. The pipeline that ships your work to the public.
- 24.0Orientation: what shipping means
- 24.1What "deploy" actually means
- 24.2The deploy unit: container vs function vs edge
- 24.3Hosting options without religion
- 24.4Vercel for the Next.js frontend
- 24.5Railway and Fly for the Nest backend
- 24.6Managed Postgres: Neon, Supabase, Railway, RDS
- 24.7Domains: buying, DNS records, the wait
- 24.8HTTPS in 2026
- 24.9Environment management: dev, staging, prod
- 24.10Secrets: where they live, how they reach the runtime
- 24.11CI/CD with GitHub Actions
- 24.12Preview deployments per PR
- 24.13Database migrations in CI
- 24.14Rollbacks: the one-command kind
- 24.15Zero-downtime deploys (the basic version)
- 24.assignAssignment: Ship the full-stack app with domain, staging, and rollback
Ch 25Observability and securityMedium18 units
Logs, metrics, traces. Sentry. The OWASP top 10 as ten stories. The instrumentation that lets you answer 'what broke' in under two minutes.
- 25.0Orientation: what "observable" actually means
- 25.1The three pillars: logs, metrics, traces
- 25.2Structured logging
- 25.3Log levels and what each one is for
- 25.4Log aggregation: Better Stack, Logflare, Axiom
- 25.5Metrics: counters, gauges, histograms
- 25.6Tracing: spans, parent-child, the request as a tree
- 25.7OpenTelemetry, lightly
- 25.8Sentry for errors
- 25.9SLOs and error budgets, conceptually
- 25.10OWASP top 10, each one as a story
- 25.11Injection attacks (SQL, command, prompt) drawn out
- 25.12Authentication and session security
- 25.13Secrets management: never in Git
- 25.14Dependency vulnerabilities, `npm audit`, Dependabot, Snyk
- 25.15Rate limiting in production
- 25.16Incident response basics
- 25.assignAssignment: instrument the app so "what broke?" takes under two minutes
Ch 26Performance and scaleMedium18 units
Core Web Vitals, the critical render path, caching layers, database indexes. When you actually need Redis or a queue. Measure first, every time.
- 26.0Orientation: measure first, fix second, measure again
- 26.1Why perf actually matters (and when it doesn't)
- 26.2Measuring first: the one rule
- 26.3Frontend perf: Core Web Vitals
- 26.4The critical render path
- 26.5Image optimisation: modern formats, srcset, lazy loading
- 26.6Bundle splitting and tree shaking
- 26.7Font loading without layout shift
- 26.8Backend perf: profiling Node, finding slow handlers
- 26.9Database indexes, with measurement this time
- 26.10Query analysis with EXPLAIN
- 26.11Caching layers: browser, CDN, app, DB
- 26.12When you actually need Redis
- 26.13When you actually need a queue
- 26.14The myth of "scale" for a side project
- 26.15Load testing with k6
- 26.16Reading flame charts and waterfalls
- 26.assignAssignment: take a slow app and double its speed
Career foundations
Ch 27–29Ch 27Working as an engineerMedium16 units
Reading codebases, asking good questions, PR descriptions reviewers read, code review etiquette, estimation honesty. The soft stack that decides if you stay hired.
- 27.0What this chapter is and is not
- 27.1Reading a codebase you didn't write
- 27.2The first hour on a new repo (a checklist)
- 27.3Asking questions that get answered
- 27.4Writing PR descriptions reviewers actually read
- 27.5The PR description template that earns reviewers
- 27.6Code review: giving feedback that doesn't sting
- 27.7Code review: receiving feedback without flinching
- 27.8Estimation honesty (and the buffer that isn't a lie)
- 27.9Disagreeing in writing
- 27.10Standups that aren't status reports
- 27.11Documentation that gets read
- 27.12Async communication: Slack, GitHub, Linear etiquette
- 27.13Meetings: when to call one, when to skip one
- 27.14Pairing and mobbing — when they work
- 27.assignReview three open-source PRs and write the review you would have left
Ch 28Staying currentMedium15 units
The half-life problem. What doesn't change vs what changes constantly. The information diet you can actually sustain.
- 28.0Orientation: a habit, not a one-time scan
- 28.1The half-life problem
- 28.2The 80% that doesn't change
- 28.3The 20% that changes constantly
- 28.4Your information diet: a real budget
- 28.5Newsletters worth subscribing to
- 28.6RSS as a curation tool
- 28.7Twitter/X and the noise-to-signal problem
- 28.8GitHub trending and release notes as a leading indicator
- 28.9Reading release notes well
- 28.10Learning a new framework in a weekend
- 28.11Communities: Discords, subreddits, in-person
- 28.12Side projects as a learning instrument
- 28.13When to switch stacks (and when to refuse)
- 28.assignAssignment: Design your 12-month learning loop
Ch 29CapstoneHigh point14 units
Spec it, design it, build it, test it, deploy it, iterate twice on real feedback. The portfolio piece you take to interviews.
- 29.0What a capstone is and what it is not
- 29.1Picking the project: three tracks
- 29.2Writing the requirements doc
- 29.3Writing the design doc
- 29.4Breaking work into sprints
- 29.5Sprint one: build the walking skeleton
- 29.6Testing strategy for a capstone
- 29.7Deploy and observe from day one
- 29.8Three friends, one painful afternoon
- 29.9Iterating on real feedback
- 29.10Writing the post-mortem
- 29.11Recording the five-minute demo
- 29.12Polishing for the portfolio
- 29.assignAssignment: Ship the capstone
Getting hired
Ch 30–31Ch 30Interview prepPEAK18 units
The realistic junior-AI-engineer pipeline. Resume, GitHub, DSA realism, take-homes, behavioural, light system design. The application sprint that gets you offers.
- 30.0Orientation: the chapter that turns shipping into hired
- 30.1The pipeline at small companies
- 30.2The pipeline at large companies
- 30.3The resume that survives 30 seconds
- 30.4The GitHub profile that signals competence
- 30.5The LinkedIn presence without cringe
- 30.6Cover letters: when they help, mostly when they don't
- 30.7The online assessment and the take-home
- 30.8DSA realism for AI-leaning roles
- 30.9The seven coding-question shapes
- 30.10Behavioural interviews: STAR without sounding rehearsed
- 30.11The "tell me about yourself" answer
- 30.12The "why this company" answer
- 30.13Light system design for junior roles
- 30.14Mock interviews: how to find partners, how to use them
- 30.15Negotiation 101
- 30.16Tracking applications, follow-ups, the funnel as data
- 30.assignAssignment: 50-application sprint with tracked metrics
Ch 31The first 90 daysHigh point17 units
What 'junior' actually means in a team. Onboarding fast. The non-technical mistakes that get juniors fired. The six-month review you set up for yourself.
- 31.0Orientation: the chapter that decides whether the job sticks
- 31.1What 'junior' means in a real team
- 31.2The first week: what to do, what to skip
- 31.3The onboarding S-curve and where most people stall
- 31.4Asking for feedback that gets you better, not nicer
- 31.5The first PR you ship at work
- 31.6The first incident you are part of
- 31.7The first time you are wrong in a meeting
- 31.8The non-technical mistakes that get juniors fired
- 31.9Working with senior engineers
- 31.10Working with non-technical stakeholders
- 31.11Salary negotiation after the offer
- 31.12Setting up your six-month review for yourself
- 31.13When to ask for a promotion vs when to leave
- 31.14Burnout: how to recognise it before it costs you
- 31.15The send-off
- 31.assignAssignment: your 30/60/90 plan
Full access
One price. Lifetime access.
A$4,000once. You keep the course forever — including every revision when the AI tooling chapter or the interview pipeline shifts.
- ✓All 32 chapters, 541 units, every gated chapter assignment with its rubric
- ✓47open units — chapter 0 in full plus every chapter’s orientation unit
- ✓Local progress tracking and a continue-learning button so the course meets you where you left it
- ✓The capstone brief, the interview chapter, and the first-90-days playbook — the chapters most courses skip
Frequent objections
Honest answers.
Who is this actually for?
An adult who can use a phone, a browser, and a credit card, but who has never used a terminal, never written a line of code, and wants a junior engineering job at a company that uses AI tools. If you already know what a closure is, this course will feel slow for the first eight chapters and then catch up to you. If you don't, this is the course written for you.
Why A$4,000? Other bootcamps cost more.
Other bootcamps cost A$15,000–A$30,000 and fund a building, a cohort, and a careers team. This course is text-first, do-shaped, and you read it on your own. The price covers the writing, the engineering of the platform, the assignment grading you do against the rubric, and lifetime access. Without the building and the cohort, the price drops by an order of magnitude.
How long does it actually take?
Roughly 480 hours of guided study end to end. At ten hours a week, that's about a year. At twenty hours a week, six months. Faster is possible if you bring relevant background. Slower is fine and expected if you have a job and a family — the course was built for the working adult, not the gap-year student.
Do I need a powerful computer?
Any laptop from the last five years runs the whole course. The AI tooling chapter (22) recommends sixteen gigabytes of RAM for local LLMs, but the rest of the course works on eight. macOS, Windows, and Linux are all supported; chapter 2 shows the bash and PowerShell commands side by side.
Does it cover AI engineering specifically?
Yes. Chapters 22 and 23 are dedicated to AI tooling — Ollama and Continue.dev for the local-first workflow, Claude Code and the harness for spec-shaped work. The capstone (chapter 29) and interview prep (chapter 30) target a junior AI-engineer role, not a 2018 frontend role. The whole curriculum was written knowing AI is the assumption now, not the optional add-on.
What if I get stuck on chapter four and can't move?
Every unit ends with two-to-four named common stumbles and the fix for each. Each chapter ends with a self-graded assignment where you check your own work against a green/yellow/red rubric — yellow means re-read the relevant unit, red means redo the chapter. You move forward only when you've earned green, so the course can't accidentally carry you past a gap.
Will this course get me a job?
It can't promise that. What it does promise: the work that gets you to the interview, the work that gets you through the interview, and the work that keeps you employed in the first ninety days. The pipeline outcome depends on the market, your location, your portfolio polish, and luck. Everything the course can control, it controls.
Why one price, no subscription?
Subscriptions feel exploitative for content you don't consume continuously. You buy it, you read it on your timeline, you keep it. The same applies if you come back to chapter 25 in three years for a refresher.
Is chapter 0 really free with no signup?
Yes. Read every unit in chapter 0 without an account. If the voice, the analogies, and the pace work for you, the rest of the course will too. If they don't, close the tab. The free chapter is enough to make that call.
Chapter 0 is free. The terminal can wait.
Read the first three units. Name the four parts of your machine, open dev tools on a real website, write down twenty keyboard shortcuts you actually used. If the voice and the pace work for you, the rest of the course will too.