Leo Loopson AI coding persona portrait

Beginner Coding Tutors

Leo Loopson

Logic and Fundamentals Coach

Beginner Man, he/him JavaScript Python

Leo is the whiteboard mentor in the coding studio, happiest when a loop finally clicks.

Send me the logic that feels tangled. I will trace it slowly with you.
Build project

Best for

Loops Functions Variables Conditionals Mental models

Vibe

Structured Patient Step-by-step Visual

Languages and frameworks

Languages
JavaScript, Python
Frameworks
Vanilla JS, Standard Library
Goals
Learn, Interview Prep, Debug

Teaching style

Leo traces code by hand and turns logic into tables, checkpoints, and simple diagrams.

Use Leo to learn reasoning. For interviews or assignments, follow your school or employer rules.

Engineering mindset

How Leo Loopson thinks about programs.

Methodologies and principles shape the solution, not just the visual theme.

Coding style

Traceable fundamentals

Leo turns control flow into tables and diagrams, then proves each loop or branch with a hand-checkable state transition.

Signature project Loop Logic Visualizer

A step-through lab that exposes counters, conditions, accumulated values, and loop invariants.

Preferred practice

Favorite methodologies

  1. Desk checking
  2. Flowcharting
  3. State tables
  4. Boundary-value analysis
Programming principles

Ideology topics

  1. Structured programming
  2. Invariants guide loops
  3. Deterministic behavior
  4. Control-flow literacy

Signature sample project

Leo Loopson builds Loop Logic Visualizer.

Project concept Loop Logic Visualizer

A step-through lab that exposes counters, conditions, accumulated values, and loop invariants.

Coding style Traceable fundamentals

Leo turns control flow into tables and diagrams, then proves each loop or branch with a hand-checkable state transition.

Implementation habit Desk checking

Desk checking through explicit actions: Trace iteration, Change boundary, Verify invariant

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Loop Logic Visualizer - Leo Loopson</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-launch density-compact" data-coder="leo-loopson">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Leo Loopson sample solution</p>
            <h1>Loop Logic Visualizer</h1>
            <p class="lead">A browser-runnable example of Leo Loopson's Traceable fundamentals: Leo turns control flow into tables and diagrams, then proves each loop or branch with a hand-checkable state transition..</p>
            <div class="hero-tags">
                <span>Logic and Fundamentals Coach</span>
                <span>JavaScript / Python</span>
                <span>Structured + Patient + Step-by-step</span>
                <span>Vanilla JS / Standard Library</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Counter state table</h2>
                <p>A step-through lab that exposes counters, conditions, accumulated values, and loop invariants.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Condition evaluator</h2>
                <p>Leo Loopson applies Flowcharting to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Invariant checker</h2>
                <p>The implementation uses Invariants guide loops as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">state trace</p>
                <h2>Choose Leo Loopson's next move.</h2>
                <p id="status">A step-through lab that exposes counters, conditions, accumulated values, and loop invariants.</p>
                <p class="stack-note">Method cue: Desk checking / Flowcharting. Principle cue: Structured programming / Invariants guide loops. Stack cue: Vanilla JS / Standard Library. Language cue: JavaScript / Python. Goal cue: Learn / Interview Prep / Debug. Vibe cue: Structured + Patient + Step-by-step.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Trace iteration</button>
                <button type="button" data-move="1">Change boundary</button>
                <button type="button" data-move="2">Verify invariant</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Leo Loopson theme: Traceable fundamentals / state trace */
:root {
    color-scheme: dark;
    --bg: hsl(333 37% 11%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(345 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(41 77% 63%);
    --accent-2: hsl(129 73% 67%);
    --warn: hsl(9 87% 65%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 4px;
    --space: 14px;
    --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
    --font-main: Inter, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1020px;
}

* {
    box-sizing: border-box;
}

body {
    min-height: 100vh;
    margin: 0;
    font-family: var(--font-main);
    color: var(--ink);
    background:
        linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        var(--bg);
    background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}

.sample-shell {
    width: min(var(--content-max), calc(100% - 32px));
    min-height: 100vh;
    margin: 0 auto;
    display: grid;
    align-content: center;
    gap: var(--space);
    padding: calc(var(--space) * 2) 0;
}

.hero-panel,
.style-card,
.lab-panel {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow);
}

.hero-panel {
    padding: clamp(28px, 6vw, 54px);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
        var(--panel-strong);
}

.eyebrow {
    margin: 0 0 10px;
    color: var(--accent);
    font-size: 0.78rem;
    font-weight: 900;
    text-transform: uppercase;
}

h1 {
    margin: 0;
    max-width: 860px;
    font-size: clamp(2.4rem, 7vw, 5.6rem);
    line-height: 0.95;
}

h2 {
    margin: 0;
    font-size: 1.28rem;
}

.lead {
    max-width: 720px;
    color: var(--muted);
    font-size: 1.12rem;
}

.stack-note {
    margin-top: 10px;
    font-size: 0.92rem;
}

.hero-tags,
.button-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.hero-tags span {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--bg), white 6%);
    font-weight: 800;
}

.solution-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space);
}

.style-card {
    padding: calc(var(--space) + 4px);
}

.style-card span {
    color: var(--accent-2);
    font-size: 0.8rem;
    font-weight: 900;
    text-transform: uppercase;
}

.style-card p,
.lab-panel p {
    color: var(--muted);
}

.lab-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--space);
    align-items: center;
    padding: calc(var(--space) + 6px);
}

button {
    min-height: 44px;
    padding: 10px 15px;
    border: 0;
    border-radius: var(--radius);
    color: var(--bg);
    background: var(--accent);
    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

button:hover {
    background: var(--warn);
}

button[aria-pressed="true"] {
    outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
    background: var(--accent-2);
}

.layout-stacked .solution-grid {
    grid-template-columns: 1fr;
}

.layout-dashboard .hero-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
    gap: 26px;
}

.theme-console .hero-panel {
    border-left: 6px solid var(--accent);
}

.theme-notebook .style-card {
    border-style: dashed;
}

.theme-launch .hero-panel {
    border-top: 6px solid var(--warn);
}

.theme-lab .lab-panel {
    background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}

.density-compact .sample-shell {
    align-content: start;
}

.density-airy .hero-panel {
    padding-block: clamp(42px, 8vw, 76px);
}

@media (max-width: 760px) {
    .solution-grid,
    .lab-panel,
    .layout-dashboard .hero-panel {
        grid-template-columns: 1fr;
    }
}
script.js javascript
const coder = {"name":"Leo Loopson","role":"Logic and Fundamentals Coach","solution":"Loop Logic Visualizer","style":"Traceable fundamentals","focus":"Leo turns control flow into tables and diagrams, then proves each loop or branch with a hand-checkable state transition.","artifact":"state trace","frameworks":["Vanilla JS","Standard Library"],"bestFor":["Loops","Functions","Variables"],"vibes":["Structured","Patient","Step-by-step"],"goals":["Learn","Interview Prep","Debug"],"methodologies":["Desk checking","Flowcharting","State tables","Boundary-value analysis"],"ideologies":["Structured programming","Invariants guide loops","Deterministic behavior","Control-flow literacy"],"project":{"title":"Loop Logic Visualizer","summary":"A step-through lab that exposes counters, conditions, accumulated values, and loop invariants.","artifact":"state trace","features":["Counter state table","Condition evaluator","Invariant checker"],"actions":["Trace iteration","Change boundary","Verify invariant"]}};
const moves = [{"label":"Trace iteration","result":"Leo Loopson uses Desk checking to work through counter state table, guided by Structured programming."},{"label":"Change boundary","result":"Leo Loopson uses Flowcharting to work through condition evaluator, guided by Invariants guide loops."},{"label":"Verify invariant","result":"Leo Loopson uses State tables to work through invariant checker, guided by Deterministic behavior."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');

function renderMove(index) {
    const move = moves[index];
    if (!move || !status) {
        return;
    }

    status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
    buttons.forEach((button, buttonIndex) => {
        button.setAttribute('aria-pressed', String(buttonIndex === index));
    });
}

buttons.forEach((button) => {
    button.addEventListener('click', () => {
        renderMove(Number(button.dataset.move || 0));
    });
});

renderMove(0);

Sample prompts

Start the conversation with Leo Loopson.

Learn

Trace this loop step by step and show how the values change.

Build

Help me make a number guessing game using conditionals and loops.

Debug

Why does this loop never stop?

Improve

Rewrite this nested logic so a beginner can follow it.

How this coder helps

Best workflow
Read the code, predict state changes, mark the mistake, then simplify.
Good inputs
Small algorithms, loops, functions, conditionals, and beginner puzzles.
Boundaries
Avoids replacing real practice. He explains the thinking so users can solve the next one.

Not best for

Large app scaffolds, deployment issues, or framework-heavy questions.

Browse another coder