STACK

Boring on purpose

The stack is selected to expose production primitives, not to maximize framework count. Every piece is either free, boring, or the thing that makes a specific Failure Lab reproducible.

Python
Modules 00 to 02 stay close to ordinary Python so you can see the agent loop and state transitions directly.
LangGraph
Graph execution, persistence, checkpoints, and interrupts, adopted after the failure modes are understood, not before.
Deep Agents
Introduced late as a higher-level harness for planning, filesystem-backed work, subagents, and context management. You compare it against your explicit implementation instead of treating it as magic.
FastAPI
Run creation, run status, review endpoints, dashboard, health and readiness.
PostgreSQL / Neon
Application-owned run state, leases, event log, side-effect records, artifacts, and LangGraph checkpoint persistence. The course keeps application tables explicitly separate from framework-owned checkpoint tables.
HTMX
A deliberately small server-rendered operator and reviewer UI. No frontend framework is required to learn runtime engineering.
LangSmith or Langfuse
Traces. The course contract is tool-independent: exact model input and output, tool spans, tokens, cost, latency, and run correlation must be inspectable.

Why not a message queue from day one?

Because you should first build one small PostgreSQL-backed lease scheduler and understand, in your own code:

claim
lease
heartbeat
retry timer
orphan recovery
cancellation

After that, you can replace it with a managed queue or a durable workflow engine and know exactly which guarantees moved. The course teaches what to demand from the replacement, not brand loyalty.

Free public deployment

The reference deployment uses a free web service (Render) plus serverless Postgres (Neon). One caveat matters enough to state as a rule:

Free infrastructure is a teaching and portfolio target, not a production-SLA claim.

Idle spin-down and restarts are useful failure injectors. The application must recover from durable state, which is the whole point of Modules 03 to 07, and Module 14 proves it with a redeploy mid-run.

Pin the environment

A production course should be reproducible six months later. The repo contains:

pyproject.toml
uv.lock (or equivalent lockfile)
.env.example
Makefile
docker-compose.yml for local dependencies where useful

And every gauntlet result records the course repo commit, Python version, package lock hash, model identifier, fixture profile version, and database migration version, so a reliability claim can be re-run against the exact system that made it.

Optional advanced substitutions

NeedAlternative
stronger durable workflow semantics Temporal
different trace backend Langfuse / OpenTelemetry stack
managed agent deployment LangSmith deployment
container hosting Cloud Run / paid Render / Kubernetes
durable queue cloud queue, Redis/Celery, Postgres queue
object store S3-compatible storage

Course repo: fixtures, starter code and artifacts →