training/dashboard(stack): lead with 'live, not staged'; trim prose

Audience takeaway is supposed to be that everything they're seeing is
genuine live data from the devices. The library list moves to a
single supporting paragraph instead of dominating the slide.
This commit is contained in:
Max Gorog 2026-05-07 21:51:47 -05:00
parent e682562c6e
commit 9373e8c057

View file

@ -34,7 +34,7 @@
<!-- 2. stack — Python stack & libraries used in the project -->
<div class="stage-view" data-view="stack">
<div class="metric-stack metric-stack-wide">
<div class="metric-eyebrow">the stack · stdlib-first, four runtime deps, every choice annotated</div>
<div class="metric-eyebrow">the stack behind the live data on the right</div>
<div class="code-grid">
<div class="code-card">
<div class="code-card-header">pyproject.toml</div>
@ -188,22 +188,17 @@
<section class="scene" data-stage="stack">
<div class="prose">
<h2>The stack</h2>
<p>Four runtime dependencies. <strong>Starlette</strong> +
<strong>uvicorn</strong> give us the async HTTP / WebSocket
surface; <strong>msgpack</strong> talks to Metasploit's RPC over
TLS for the Tier-3 exploit driver; <strong>pycdlib</strong> mints
NoCloud cidata ISOs in pure Python so we don't shell out to
<code>genisoimage</code>.</p>
<p>Everything else is the standard library — <code>asyncio</code>,
<code>pathlib</code>, <code>json</code>, <code>logging</code>,
<code>secrets</code>. Every module opens with <code>from
__future__ import annotations</code> and types its function
signatures, so ten months from now the docstring tells you what
it does and the signature tells you what it eats.</p>
<p>Every dep in <code>pyproject.toml</code> carries a one-line
comment explaining why it's there. If a future maintainer can't
justify a dep in ten words, it doesn't go in.</p>
<h2>Live, not staged</h2>
<p>Every panel from here on is real data from real devices —
counters, bars, the episode database, all driven by the
<code>cis490-receiver</code> service running on this Pi as
you scroll.</p>
<p>The code on the left is how it gets here. Four runtime deps:
<strong>starlette</strong> + <strong>uvicorn</strong> for the
async HTTP and WebSocket surface, <strong>msgpack</strong>
talks to Metasploit's RPC, <strong>pycdlib</strong> builds the
lab-VM cidata ISOs. Everything else is the standard library,
and every dep is annotated with a one-line reason it's there.</p>
</div>
</section>