A lab, not a lecture hall

Compilecuriosityinto shipped systems

Lumina Labs is where programmers and AI engineers learn by running real code - from your first Python line to a deployed LangGraph agent. Every code step gives you three ways through: struggle it out, follow along, or direct an AI.

37
Workshops
7
Guided paths
100%
Runnable code
8
Free starters
agent.pyrunning
from langgraph.graph import StateGraph
g = StateGraph(AgentState)
g.add_node("llm", call_model)
g.add_node("tools", tool_node)
g.add_conditional_edges("llm", route)
agent = g.compile(checkpointer=mem)
# → agent ready. streaming…
// agent execution graph
IN
LLM
TOOL
MEM
OUT
// The learning graph

Courses aren't a list. They're a network.

Every workshop connects to what comes before and after it. Hover a node to trace the path - this is how a Lumina track actually flows.

// Paths

Pick a mission. We built the path.

Seven guided sequences across AI, foundations, backend, frontend, and DevOps - each one ends in something deployed.

// One step, three ways

Struggle, follow, or direct an AI.
Every path lands on the same code.

Each code scene authors three parallel routes to the same result - so you set the depth. Grind it out for recall, type along for a demo, or write a prompt and audit the AI's output. One verify command checks all three.

All paths converge → one verify
$ node -e "require('./auth/passwords')" && echo OK

A wrong answer on any path fails the same import - fail-loud, no branching logic.

auth/passwords.jsHANDS-ON

Your task - build it from the spec

Create auth/passwords.js: Import bcrypt from bcryptjs Export hashPassword(password) - hash with 12 salt rounds, return the hash Export verifyPassword(password, hash) - compare, return a boolean Both functions must be async

Hint 1Conceptual nudge
bcryptjs gives you bcrypt.hash(password, saltRounds) and bcrypt.compare(password, hash) - both return Promises.
Hint 2Partial snippet
const bcrypt = require('bcryptjs'); async function hashPassword(password) { return bcrypt.hash(password, 12); }
Hint 3Near-complete logic
bcrypt.compare returns a boolean Promise - true if the password matches the hash. Return its result directly from verifyPassword and remember module.exports.
// The loop

Read less. Build more.

01

Read a concept

Short, visual explanations - no hour-long videos to scrub.

02

Choose your path

Every code step offers three routes - struggle solo, follow along, or direct an AI. Switch mid-step; they all land on the same code.

03

Build a project

Each track ends in a real artifact - an API, a game, a deployed agent.

04

Ship & advance

Unlock the next node in your track and keep the momentum.

Your first build is free.

Eight starter workshops are free forever - including Programming Foundations and Dev & AI Setup. No card required.