Capstone · build, don't just read
Now build the thing.
The chapters gave you the map and the deep dives went down each road. This is where you drive. You'll build one real app — a Snippets service — module by module, each one applying a chapter you've read, until you have something you can deploy, demo, and put on your CV. Don't skip ahead; each module assumes the last one runs.
How this works
Each module has a goal, the steps to get there, the code you write, and an acceptance check— a concrete thing that must work before you move on. Build it yourself in your own editor; the modules tell you what and why, not copy-paste answers. When a module leans on a concept, it links the chapter or deep dive that explains it. By the last module you'll have a complete, tested, deployed app.
- 00Overvieweasy9 min
The Capstone: Build the Snippets Service
What you're going to build, why this particular app, and how to work through the modules. By the end you'll have a real full-stack service — auth, a database, a hardened API, tests, an AI feature, and a live deploy — that exercises every chapter of the track.
- 01Node.jseasy14 min
Module 1 — The Skeleton That Runs
Before features, a process. Stand up a real HTTP server in TypeScript, give it a health check, read config from the environment, and — the part tutorials skip — make it shut down gracefully so in-flight requests finish instead of being cut off.
- 02Databasesmedium16 min
Module 2 — The Data Layer
Give the service a memory. Design the snippets schema with the right keys and constraints, run it as a real migration, connect through a pooled client, and write your first queries — with the indexes that keep them fast already in place.
- 03API Designmedium17 min
Module 3 — The API Surface
Turn the data layer into a clean HTTP contract. Build the create/read/list endpoints with input validation at the boundary, make snippet creation idempotent so a retry can't double-create, and list snippets with keyset pagination that stays fast at scale.
- 04API Designhard17 min
Module 4 — Auth, For Real
Replace the fake test user with real identity. Hash passwords properly, issue a session the right way, protect the write endpoints, and add the object-level ownership check that stops one user from touching another's private snippets.
- 05System Designhard17 min
Module 5 — Making It Survive Load
A service that works for one user can still fall over under many. Add a Redis-backed rate limiter so one client can't drown the rest, cache the hot read so popular snippets don't hammer Postgres, and move the view-count write off the request path into a background job.
- 06Testingmedium16 min
Module 6 — Tests You'd Actually Trust
Now make it changeable without fear. Write integration tests that drive the real handlers against a real Postgres, prove the idempotency and authorization guarantees hold, unit-test the one piece of tricky logic, and wire it so a broken migration fails the test run, not the deploy.
- 07DevOpsmedium17 min
Module 7 — Shipping It to Production
Take the app from 'runs on my machine' to 'runs in production for strangers.' Containerise it properly, set up a CI/CD pipeline that tests then deploys, add structured logging and a real health check, and define one SLO so you know when it's actually broken.
- 08AI Engineeringmedium17 min
Module 8 — The AI Feature
Add auto-titling and auto-tagging with an LLM, and treat it like the distributed system it is. Call the model for structured output, stream a longer 'explain this snippet' response to the user, guard cost and latency with timeouts and caching, and defend against prompt injection.
- 09Capstoneeasy12 min
Module 9 — The Finished App
Step back and look at what you built: a complete full-stack service, with every chapter of the track represented in real code. A capstone checklist of what 'done' means, a self-review against the senior bar, and stretch goals that take it further when you're ready.