Show HN: A free course from engineer to AI engineer, one Git tag per episode Engineer Joel Stevick released a free eight-episode YouTube course, "From engineer to AI engineer," whose companion GitHub repository (AiFirstDevelopment/engineer-to-ai-engineer) tags each episode as a single commit, s1e1 through s1e8, taking an experienced software engineer with no generative-AI background to a first retrieval-augmented generation pipeline. A second seven-episode series, "Prove it works," tagged s2e1 through s2e7 on the same repository, builds an evaluation harness that caps spending at $1 per run and $5 across all runs in its ledger (evals/ledger.ts). The course uses TypeScript, SQLite, curl and an HTTP server with Anthropic's claude-sonnet-5-5 model at $2 per million input tokens and $10 per million output tokens, putting a typical question through the finished pipeline at about a cent. The code for the YouTube series From engineer to AI engineer : eight episodes that take an experienced software engineer with no generative-AI background from conventional software to a first retrieval pipeline RAG , built across the series one piece per episode. Its second series, Prove it works , builds the evaluation harness that tells you whether that pipeline answers right, on the same repository. Every episode is one commit and one tag: s1e1 to s1e8 for the first series, s2e1 to s2e7 for the second. Check out a tag and you have the repository exactly as that episode leaves it, with a README that describes only what exists so far. This README, on main , describes all of it. New to AI engineering? This is free, and it starts from zero: the YouTube channel https://www.youtube.com/@JoelStevick has every episode, joelstevick.com https://joelstevick.com has each episode's page, a free demo and the book, and the weekly newsletter AI That Won't Confidently Lie https://www.linkedin.com/newsletters/ai-that-won-t-confidently-lie-7526584806781087745/ teaches one piece at a time. The videos are two YouTube playlists: From engineer to AI engineer https://www.youtube.com/playlist?list=PLfmRFV611TOA , eight episodes, and Prove it works https://www.youtube.com/playlist?list=PLPUiBor6kL3E , seven. Every episode's description links its tag here, and the table under "Tags" at the end links every tag to its episode. To follow along at the keyboard: git clone https://github.com/AiFirstDevelopment/engineer-to-ai-engineer.git cd engineer-to-ai-engineer git checkout s1e1 the repository exactly as episode 1 leaves it cp .env.example .env then put your Anthropic API key in .env npm install ./ask.sh "In two sentences: what is a race condition?" Then git checkout s1e2 and that episode's commands, and so on to s2e7 . Checking out a tag puts git on a detached HEAD, which is fine for reading; git checkout main comes back. Run npm install again after checking out s1e5 , s1e6 or s2e2 , the tags whose package.json adds dependencies, or whenever a command fails on a missing package. main is the finished repository: every file this README names is there. What a command costs is in its episode's section: cents, never dollars. The harness caps its own spending at $1 a run and $5 across every run in its ledger evals/ledger.ts , and nothing in the test suite calls a model. A model is a function. Text goes in, text comes out. It keeps no state between calls, so every request carries the whole conversation. It is nondeterministic: the same input can give a different output. And it is priced by the token, in and out. That is what changed. Everything around it did not. You reach it over HTTP. Your data still lives in a database. Your tests still have to prove the thing works. Deployment is what it was last year. This series builds the one new piece, a retrieval pipeline, with tools you already have: TypeScript, SQLite, curl and an HTTP server. - Node 20 or later node --version and jq brew install jq . - An Anthropic API key from https://console.anthropic.com https://console.anthropic.com . The runs in this series cost cents; each episode's section says what its commands cost. - cp .env.example .env and put your key in .env . The file is gitignored. ask.sh reads it, and every npx tsx command below loads it with Node's own --env-file=.env , so there is no dotenv package. - npm install . The first search episode 5 on downloads the embedding model, 97 MB, once. The series answers with one chat model, claude-sonnet-5-5 , set in one place the request body in ask.sh , and the constant MODEL in src/claude.ts . It costs $2 per million input tokens and $10 per million output tokens. A question through the finished pipeline is a few thousand tokens in and a few hundred out, about a cent. Claude Opus 5.5 is the more capable model at twice the price per token; Claude Haiku 5.5 is twenty times cheaper. The answers stay on Sonnet: an answer is what the customer reads, and we want answers we can trust while we grade them. You pay for your own runs, so the cheaper of the two models we trust is the default, and swapping the constant is the whole migration. One step uses Haiku: from episode 8 the reranker RERANK MODEL in src/rerank.ts scores twenty passages for each question, a narrower job than writing a cited answer and four times the text, and Haiku does it well enough at a twentieth of the price per token episode 8 measures it . docs/ is the internal documentation of a fictional company, Lantern Supply Co., a Maryland retailer of camping lanterns and lamps: twelve Markdown files and one PDF, about 26,000 words, full of specific facts prices, model numbers, dates, names, policies that no model has seen. That is the point: in the episodes to come the model has to answer from these files or admit it cannot. The facts contain traps on purpose: two products with near-identical names the Firefly 220 and the Firefly 220R , a policy that a later document changed the free-shipping threshold is $75 in shipping.md and faq.md , and release-notes.md lowers it to $60 in version 4.3 , and facts that exist only in the PDF repair-manual.pdf , the Repair Center's bench manual . | File | What it is | |---|---| | about.md | The company, its history, locations and leadership | | catalog.md | Every product with model number, price and specifications | | returns-policy.md | The returns policy 40 days from delivery, and the rest | | shipping.md | Rates, carriers, fuel shipping limits | | warranty.md | Warranty terms by product line and the claim process | | faq.md | Customer-facing questions and answers | | employee-handbook.md | An excerpt: pay, time off, discount, safety | | customer-service-playbook.md | The support team's procedures and reply templates | | release-notes.md | Release notes of Hearth, the online store | | fuel-safety.md | Approved fuels, storage, disposal | | lumen-rewards.md | The loyalty program | | showrooms.md | The Frederick and Annapolis showrooms | | repair-manual.pdf | The Repair Center bench manual PDF only, nine pages | The PDF was rendered once from a Markdown draft with headless Chrome; the draft is not in the repository, on purpose, so its facts exist only in the PDF. Three jobs, in three groups of files. The first two are series 1 and the third is series 2. Every box is a file in this repository; the episode sections below say what each does and what it printed when it ran. Indexing , npx tsx src/index.ts : the documents become searchable chunks in a SQLite file. It is an ETL job, and it is safe to run again: a hash of each file says which ones changed. php flowchart LR docs "docs/