interactive-tech-deck-builder
Interactive Tech Deck Builder
Self-contained HTML presentation framework for cloud-native talks. One canvas, many scenes, dark design system, click-driven games, modal terminal demos.
When to use
- The user asks for an interactive presentation, fundamentals deck, or "talk with games" on a tech / cloud topic.
- The user wants 3D Three.js animations to illustrate distributed-systems concepts (pods, traffic flow, scaling, image security, etc.).
- The user wants slides grounded in their real environment —
kubectloutput, registry contents, CI runs. - The user already has a deck built with this pattern and wants a new game / section / scene added.
If the user wants a static slide deck (Keynote, Google Slides, plain Markdown), use a generic presentation skill instead — this one is specifically for HTML / Three.js / browser-rendered decks.
Required structure
Every deck is a self-contained directory served as static files:
<deck-name>-presentation/
├── index.html # <section class="slide" data-section="X" data-color="Y" data-scene="Z"> per slide
├── styles.css # design system: --accent-* colors, .slide, .game-slide, .fullscreen-game
├── presentation.js # slide controller, keyboard nav, build steps, game wiring
├── scenes.js # Three.js scenes — one per data-scene name, registered in `scenes` map
├── demo.js # kubectl / CLI playback simulator (modal terminal)
├── code-examples/ # YAML / Dockerfile / etc. shown on slides AND used by the demo simulator
├── README.md # how to open + section map
├── OUTLINE.md # section-by-section structural map
└── SPEAKER-GUIDE.md # per-slide talking points (auto-generated from <aside class="notes">)
Run with python3 -m http.server 8765 from the parent directory, then open http://localhost:8765/<deck-name>-presentation/.
Workflow
- Pick the topic and section colors. Each major part gets one accent: teal (opening / closing), red (problem), purple (when to use), amber (why we need it), green (fundamentals), blue (security / scaling), cyan (cloud), rose (live data), deep-purple (registry). Reusing colors is fine if separated.
- Capture real data first. Before writing slides about "your cluster" or "your registry", run discovery commands and bake the numbers in:
kubectl get nodes -o wide,kubectl get pods -A | wc -l,kubectl get hpa -A,kubectl get sc. Real numbers (e.g. "92 pods across 22 namespaces, 4 HPAs, 17 storage classes") give the deck credibility. Loadreferences/live-data-integration.mdfor the discovery script. - Copy framework files from
assets/templates/into the new deck folder:index.html,styles.css,presentation.js,scenes.js,demo.js. These are the worked output of two shipped decks — modify, don't rewrite from scratch. - Author slides in
index.htmlas<section class="slide" data-section="..." data-color="..." [data-scene="..."]>. Use the established slide types: title, big-statement, framework, code, divider, game-slide, recap, qa-slide. Loadreferences/slide-types.mdfor the full template gallery. - Add a Three.js game for each concept that benefits from interaction. Patterns we've shipped: image-vs-container, density-race, cold-start-race, cve-hunt, self-healing, pod-scaling, cluster-topology, deploy-race, traffic-wave, rolling-deploy, chaos, canary, service-routing, edge-to-pod-flow. Each is a function in
scenes.jsthat returns{ scene, camera, update, ... }and is registered in thescenesmap. Loadreferences/threejs-scenes.mdfor the factory pattern + a worked example. - Wire the game to the slide —
data-scene="<name>"on the section + matching control elements + arefreshXxxUI()function inpresentation.jsfed by a callback the scene exposes viasetOnChange(). Loadreferences/game-wiring.mdfor the wiring contract. - Add demo simulator entries in
demo.js— one per scripted walkthrough (cluster overview, deploy, scale, self-heal). Each entry is an array of{ say }(narration) and{ run, out, status }(commands + simulated output). Triggered with theDkey. - Generate the speaker guide with
python3 scripts/extract-speaker-notes.py <deck-dir>after every slide-content change. - Add the fullscreen-game toggle to every game slide. Load
references/fullscreen-game-pattern.mdif a slide's right panel overflows the viewport in fullscreen mode — the fix isposition: fixed+ gridminmax(0, ...)+overflow: hidden. - Validate by opening in a browser. Don't trust the build alone. Walk every slide with arrows, toggle fullscreen on every game, open the demo modal on
D, confirm section colors render distinctly. Loadreferences/qa-checklist.mdfor the full pre-talk list.
Available resources
assets/templates/index.html— slide skeleton with persistent UI frame, help overlay, demo overlay, notes panel, overview gridassets/templates/styles.css— full design system including--accent-*,.slide,.game-slide,.fullscreen-gameoverridesassets/templates/presentation.js— slide controller, keyboard nav, build-step framework, game wiringassets/templates/scenes.js— Three.js scene factory pattern with shared renderer + animation loop and 14 worked-example scenesassets/templates/demo.js— modal terminal simulatorassets/examples/— pointers to the two reference decks (docker-fundamentals-presentation,kubernetes-fundamentals-presentation)scripts/extract-speaker-notes.py— generatesSPEAKER-GUIDE.mdfrom<aside class="notes">blocksscripts/discover-cluster.sh— runs read-onlykubectlqueries to gather facts for the "your cluster" sectionreferences/design-system.md— colors, typography, layout rulesreferences/slide-types.md— title, statement, framework, code, divider, game, recap, qareferences/threejs-scenes.md— scene factory pattern, render loop, accent-color sync, raycastingreferences/game-wiring.md—data-scene,refreshXxxUI, build stepsreferences/live-data-integration.md— discovery commands, what to bake inreferences/fullscreen-game-pattern.md— toggle button + CSS overrides for the bottom-bar layoutreferences/qa-checklist.md— pre-talk verification list
Top gotchas (always inline — do not skip)
- Three.js scene-local vs world coords. When a scene is offset (e.g.
scene.position.y = 3.5to push it into the upper viewport), child positions are scene-local. If you target a pod viapod.getWorldPosition(wp), you mustscene.worldToLocal(wp)before assigning to a particle whose movement is computed in scene-local space. Otherwise particles aim 3.5 units off and never visually arrive — this is exactly the edge-to-pod bug we hit. - Fullscreen-game CSS must use
position: fixed+ gridminmax(0, ...).position: absolute+ flex inside the slide can overflow the viewport on the right. Usemin-width: 0; overflow: hiddenon grid children to prevent text from blowing out the bar. canvas.style.pointerEventsdefaults tononeso clicks pass through to slides. Toggle to'auto'only on slides that need raycasting (self-healing). Forgetting this means the user can't click pods.- Aurora gradient shader needs a section-color setter. When you switch slides, call
scene.setColor(ACCENT[color])so the divider's radial gradient matches. Forgetting this is why every section divider looks the same. - Build-step navigation runs first. Pressing → first runs build steps inside the slide (progressive bullet reveals, code-line highlights), then advances to the next slide once steps are exhausted. Track this in slide controller state, not on the scene.
- Real cluster discovery is read-only.
kubectl get,kubectl top,kubectl describeare safe. Never runkubectl apply / delete / drain / cordonwhile building the deck.
What you DO
- Treat the framework templates as the source of truth — copy and extend, do not refactor speculatively.
- Capture real data with
kubectl/ cluster CLIs before writing the "your environment" section. - Build each game as a small, focused scene (~150–300 lines) illustrating exactly one concept.
- Use the section accent color in code-block borders, progress bar, kicker text, and aurora gradient — visual continuity matters.
- Write speaker notes inline in
<aside class="notes">so they show up in both the runtime panel (Skey) and the generatedSPEAKER-GUIDE.md. - Add a
▶ Play full-screentoggle button to every game slide so the 3D scene can take over without slide content covering it.
What you do NOT do
- Do not generate Three.js scenes from prose ("a 3D representation of containers"). Pick a concrete metaphor first (recipe vs meal, server filling with boxes, traffic particles flowing through stages), then code the scene.
- Do not put more than 5 bullets on a slide — split it.
- Do not use stock images, clip art, or emoji decoration.
- Do not animate everything — section dividers and big-statement slides should be still.
- Do not skip the speaker guide. The deck is half the artifact; the talk is the other half.
- Do not commit cluster credentials, registry URLs with auth, or anything that leaks production internals beyond what is already public.
More from mkabumattar/skills
linux-script-developer
Write production-ready Bash scripts with strict error handling (`set -euo pipefail`), validated argument parsing, colored user feedback, and cross-platform compatibility (Linux, macOS, Windows via Git Bash/WSL). Use this skill whenever the user asks for a `.sh` script, a shell script, a Bash one-liner installer, a deployment script, an automation/CI script, a CLI wrapper, or a file-batch processor — including casual phrasings like "write a script to ...", "automate this in bash", or "make me a shell tool". Also use when reviewing or hardening an existing Bash script.
16skill-builder
Build a new Agent Skill that follows the agentskills.io specification and best practices — slim `SKILL.md` (≤ 200 lines / 5K tokens), valid kebab-case `name`, imperative `description` under 1024 chars, progressive disclosure via `references/`, bundled `assets/` and `scripts/`, and an MIT `LICENSE`. Use this skill whenever the user asks to create, scaffold, build, write, or author a new Agent Skill — including phrasings like "build a skill for X", "scaffold a new skill", "create an agent skill", "make me a skill that does X", "write a SKILL.md for ...", or "I want to publish a skill on agentskills.io". Also use when reviewing or refactoring an existing oversized `SKILL.md` (a sign that detail should be moved to `references/`).
15python-script-developer
Write production-ready Python CLI tools, automation scripts, and batch file processors with type hints, structured `logging` (never `print` for diagnostics), `argparse` interfaces, `pathlib` for filesystem work, specific exception handling, and cross-platform support (Linux, macOS, Windows). Use this skill whenever the user asks to create a Python script, `.py` utility, CLI tool, automation, batch processor, or data pipeline — including casual phrasings like "write a python script that ...", "automate this in python", "I need a small tool", or "give me a one-off processor". Also use when reviewing or hardening an existing Python script.
15information-architecture
Plan the structural and execution architecture of a feature, app, or site — produce both an `INFORMATION_ARCHITECTURE.md` (site map, navigation, content hierarchy, user flows, URL strategy, naming conventions, component reuse map) AND a phased `PLAN.md` (phases by impact/effort/risk, vertical-slice tasks with sub-tasks, dependencies, estimates, and a detailed task breakdown with Why/How/Impact/Effort). Use this skill whenever the user wants to plan a product or feature, design site structure, lay out information architecture, map user flows, organize content, break work into phases, build a roadmap, plan an implementation order, or hits you with phrases like "plan the IA", "map the structure", "break this into tasks", "give me a roadmap", "phase out the work", "create an enhancement plan", or "what should I build first". Also use when reviewing or refactoring an existing IA or project plan.
15makefile-script-developer
Write production-ready GNU Makefiles with strict shell mode (`SHELL := /bin/bash` + `.SHELLFLAGS := -euo pipefail -c`), validated multi-environment configuration via `$(filter ...)`, pre-flight check targets (`check-tools`, `check-env`), structured logging with timestamps, confirmation gates for destructive ops, layered `.env` includes, platform detection, and self-documenting help. Use this skill whenever the user asks to write a Makefile, harden an existing one, add a target, build a deploy/release pipeline, automate Terraform/Helm/Kubernetes/Docker/build workflows, or expose tasks as `make <target>` — including casual phrasings like "write a Makefile", "add a make target", "automate this in make", "give me a build pipeline", or "clean up the Makefile". Also use when reviewing an existing Makefile for safety, error handling, or organization issues.
15qa
Run an interactive QA session — the user describes bugs and issues conversationally, you ask brief clarifying questions, explore the codebase for domain context, decide whether to file one issue or break it down, and create durable user-focused GitHub issues via `gh issue create` — without referencing internal file paths or line numbers. Use this skill whenever the user wants to do QA, report bugs, file issues, walk through a list of problems, or hits you with phrases like "let's do a QA session", "I found a bug", "this is broken", "file this as an issue", "I have a few things to report", or "let's go through these one by one". Also use when the user is reviewing a deployed feature and wants to track defects.
14