The Problem

I can write software that works. What I kept finding is that I couldn't always explain why it works at the level below my abstractions. I knew that passing a large struct by pointer was faster than by value. I knew that cache misses were expensive. I knew that null pointer dereferences caused crashes. But this was knowledge I held as received wisdom, not something I could trace through a mental model with any confidence.

Security work made the gap harder to ignore. Reading disassembly, reasoning about buffer overflows, understanding why certain memory layouts are exploitable: these require you to think in addresses, not variable names. Debuggers show you register values and you have to know what they mean. You encounter a segfault and need to know immediately whether you're chasing a null pointer, a use-after-free, or a stack overflow.

I looked for something interactive. Textbooks explained the concepts correctly but passively: reading about a pointer chain is not the same as tracing one yourself. YouTube videos moved at someone else's pace. University course notes were thorough but assumed a semester's context I didn't have time to reconstruct.

What I wanted was a tool that forced active engagement: read the concept, immediately simulate it, then test yourself before moving on. Nothing I found matched that loop tightly enough.

So I built Lolevel.

Design Constraints

The constraints followed from how I wanted to use it:

  • No installation, no setup: Browser-based so it loads anywhere, immediately
  • Zero dependencies: Three vanilla files (index.html, style.css, app.js), no framework, no bundler, no build step
  • Concept → simulation → quiz: Each module had to include a narrative explanation, an interactive exercise, and a knowledge check before the next module unlocked
  • Analogies over jargon: The memory address section needed to land before the pointer section could build on it; every explanation had to earn the next one
  • Persistent progress: localStorage to track completed modules and quiz scores across sessions without a backend

The goal was a self-contained learning environment I could open mid-task when I needed to rebuild intuition around a specific concept, not a course that demanded a block of uninterrupted time.

Implementation

The project is three files. index.html is a 13-line shell: charset declaration, a to style.css, a

, and a