What you are going to build
Claude Code is a program that reads your project, changes it, runs your commands and checks its own work. This course is about making it do that the way you want, on a project you can see all of.
Most tutorials show you the tool answering a question. That part takes ten minutes to learn. What takes longer, and what decides whether you can leave it alone with real work, is everything around the answer: what it is allowed to do, what it remembers, what it repeats, and how you find out what it did.
The project
One small repository, used from the first lesson to the last. A link shortener: it turns a long URL into a short code and back again. Three files, no framework, and a bug nobody has noticed yet.
Press Run on the panel beside this. It is the project's own demo, and it runs in your browser, so you can read what it does before you read anything about Claude Code.
The bug, in one run
Two links are saved, the first is deleted, and a third is added. Watch the last two lines.
import shorten
import store
first = shorten.shorten("https://krishnaik.in/courses")
second = shorten.shorten("https://krishnaik.in/blog")
print("first :", first, "->", shorten.expand(first))
print("second:", second, "->", shorten.expand(second))
store.remove(first)
third = shorten.shorten("https://krishnaik.in/about")
print("third :", third, "->", shorten.expand(third))
print("second:", second, "->", shorten.expand(second))
The third link was given the code b0, which the second link already had. Saving it quietly replaced somebody else's link. Nothing crashed and nothing warned you, which is the kind of bug worth having in a teaching project.
You will meet this bug again several times: when Claude finds it by searching, when it proposes tests for it before writing any, when a run with nobody watching fixes it in four turns, and when you do it again yourself in the last lesson.
Where this ends up
By the last lesson the same repository carries all of this, and every piece of it is something you added on purpose:
| What | Why it is there |
|---|---|
A CLAUDE.md | So the rules of this project do not have to be repeated every session |
| A slash command | One line instead of a paragraph you keep retyping |
| A skill | A procedure Claude follows the same way every time |
| A hook | A rule that is code, not a request, so it cannot be talked out of |
| A subagent | Work that happens without filling up your conversation |
| A review in CI | Somebody reading the change when you are not |
How to read this course
Lessons are short and each adds one idea. Terminal blocks are real: every one was captured by running the command against this repository, and the output is what came back. Where a moment happens inside the interface and cannot be captured, the page says so and describes it rather than inventing a screenshot.
- Run the panel, then change the second URL and run it again.
- In
shorten.py, readnext_codeand work out why deleting a link causes the collision.
Every expert started right here.