A lab, not a lecture hall

Compilea spark of curiosityinto shipped systems

A new way to learn to code, where you set the depth on every step. Move fast with an AI handling execution while you learn the ideas, or go deep and build it yourself with just enough guidance. From your first line to multi-agent AI systems, taught through interactive visuals, not walls of text.

36
Workshops
7
Guided paths
100%
Runnable code
4
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
// 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 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.

// 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.

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