Course kits refreshed from the hub
Ported the costs rollup, actionable-only escalations and the disputes screen into the Course 2 kits. Added the additional costs data route to Mission Control. One module download rebuilt.
A plain list of what I built, what broke, and how it got fixed. February 2026 to this week, newest first.
Build, maintenance and course work only. I write this by hand, and the fixes stay honest because the fixes are the reason the course exists. Anything before July 2026 predates the single repo and is reconstructed from notes.
Ported the costs rollup, actionable-only escalations and the disputes screen into the Course 2 kits. Added the additional costs data route to Mission Control. One module download rebuilt.
Added a weekly check for drift between course source, staging and the live site. Covers kit code, download contents and ten tracked lessons. Reports only; fixes stay manual.
The release check now opens each module download and compares the files inside, instead of the zip bytes. Different machines compress identical files differently, so byte checks flagged all 19 downloads as changed. Now only real content changes show up.
Modules 2, 7 and 11 now teach one worker owning a task, recovery you verify, and reporting kept separate. The wording on Windows file boundaries, key handling, the learning payload and RAG startup is clearer and easier to follow. Downloads rebuilt to match.
The refund page now spells out how crypto refunds work: sent by hand to the paying wallet or an address confirmed by email, same asset and network, same token amount, and up to ten business days. The 30-day window applies to both payment methods.
An audit of the live course and site turned up fifteen items across the lessons, the worker kit and the checkout. All fifteen are fixed and tested: clearer wording on what is included, an accessible payment modal, and statuses that match the kit.
The dashboard material was large enough to stand alone, so it is now a separate bonus lesson instead of a block inside the anti-patterns lesson. It ships with its own download, and the pages that said the bonus module had no files were updated.
Course 2 teaches the hub dashboard and its smoke test in the bonus module rather than module 1. Module 1 stays on getting the stack running, and the full walkthrough sits with the other deep-dive material for when you want it.
The kit now ships the dashboard split by screen instead of one long file, a cleaner smoke suite, and an embedding size ladder so it tracks the current stack. Vector search got sturdier at the same time: rows with no embedding are handled, so a partly indexed store still returns results.
The staleness check was its own weekly task. It is one deterministic command, so it now runs inside the daily site routine instead. Due guides surface up to six days sooner, and quiet days still report one line.
Sixteen guides carry facts that go stale, so each one now has a register entry with a re-verification interval, and a script reports what is due. It stays out of the deploy gate: a stale fact is work to schedule, not a broken deploy.
Wrote a script that dates each sitemap URL from its page and its scripts, then wired the check into predeploy. A stale date now blocks the deploy. Also deleted four unused files and fixed the scanner's false heading warning.
Both hostnames served the same pages, which splits search signals. A redirect rule at the edge now sends www to the apex with a 301, path and query preserved. It runs before the worker, so static files stay free to serve.
A technical pass over the whole site: caching rules for static assets, a logo cut from 1.46MB to 5.4KB, a real 404 page, and eleven new cross-links between the guides. All of it went out as one deploy.
Fifty-four days of cost tracking became a guide: 330 tasks, 3.37 million output tokens, about $265 at API-equivalent rates. Half the days cost nothing, shipping days cost the most, and the agent roster is public for the first time, ReBoot names included.
Published the spec-template repo as the free, try-able artifact for the Show HN post: the format alone, no paid tool, MIT license. Drafted that post and a second for r/LocalLLaMA. The day left one working habit: check GitHub's own copy of a branch before declaring a push stuck.
The worker now serves the displayed price and the charged amount from one table. Before, one came from a constant compiled into the payment script and the other from the database, with nothing keeping them in step.
I banned em dashes from every surface a reader sees, and the ship gate now enforces the rule mechanically. The full ASCII pass covered 73,030 characters. The gate proved its worth on day one by catching nine strays the sweep itself had introduced.
Someone outside the project went through Level 1 and filed twenty-two findings, four of them Critical, and all four sat in files a reader hits before they can succeed at anything. Fixed and deployed the same day.
Every module now ships a deterministic zip of exactly what its file panel lists. A numbering fix the next day put two modules' files in the right order on disk.
First time I ran the review gate across the entire live surface in one pass, thirteen lens passes plus a mechanical scan. Forty-nine findings, fifteen of them Critical, and two full runs to clear.
I audited all 80 lessons and reworked them in three tiers, so each one now explains why the thing works instead of only what to type. A reader who can follow along can now also fix it when it breaks.
A parity sweep brought the delivery repo in line with what the course lists: five Module 4 files now ship. The same pass replaced a real value in one Level 2 example file with a placeholder.
The Level 1 bonus went from a folder of odds and ends to a 71-file library. Packaging it included a privacy pass: the delivery repo's history was rewritten so internal infrastructure details stay internal.
A hardening pass in week one: added a content security policy, cut the anonymous database role down to only the privileges it needs, and brought the row-level security state into the migrations so it is reproducible from scratch.
Ran the repo assembly script as a check before trusting it, and the check caught it producing 162 files where the live delivery has 189. The script left the shipping path; deliveries now sync from the live source instead.
Domain registered, site deployed as static assets on a worker, auth wired to email plus three OAuth providers. A same-day full-build test regressed live course content for four minutes; the rollback held, and full builds left the deploy path for good.
The project had lived across two machines and a spread of folders with no single history. I imported the whole workspace into one repository. Everything after this date has a commit behind it; everything before it is reconstructed.
The worker fleet could do tasks but could not own delivery, so I added five things in three days, starting with a bounded self-repair loop that blocks the agent from editing the test to make it pass.
Every knowledge-base call from one machine was returning 401: the project config had no environment block, so the process started with an empty key while the correct global config masked it. Per-project environment is explicit now, machine by machine.
A three-tries rule went into the agent instructions the day a limitless loop showed why it was needed. Soon after, the knowledge base got leaner: 185 test fixtures and duplicates removed.
Workers now mark tasks for review instead of done, and I approve each one. The change followed five worker bugs of one shared category: I had written client code against a remembered API instead of the real one.
Token costs had passed $3 a day and were climbing. I rebuilt the API on FastAPI with Postgres and pgvector, retired Docker, and kept the same port so nothing downstream noticed. Cost dropped three to four times.
Four days to stand up a search API, a vector store, local embeddings, a task board and six worker agents. It ran, and the first optimization target was already visible: 1.4MB session files resent in full on every request.
One request: help me build an autonomous AI system. What I got was four ports, a container that crashed every Tuesday, and then a wipe that took the whole thing. The first rule came out of that: one port, one system. The long version is its own page.