Creates interactive HTML teaching materials with clickable state diagrams. Use when the user asks to produce an explorable tutorial artifact, not to answer a question.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add korchasa/flowai --skill interactive-teaching-materials --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Interactive Teaching Materials?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/korchasa-interactive-teaching-materials)More formats (shields.io, HTML) on the badges page.
---
name: interactive-teaching-materials
description: Creates interactive HTML teaching materials with clickable state diagrams. Use when the user asks to produce an explorable tutorial artifact, not to answer a question.
effort: high
---
# Interactive Teaching Materials for Complex Processes
## Core Idea
The diagram is a navigation surface. Every element is clickable and opens a detail panel with rich text. The value is in the details, not in the arrows.
When one-word labels on arrows are enough — use Mermaid (`draw-mermaid-diagrams`). This format is for when every state and transition deserves paragraphs of context, config snippets, HTTP payloads, and debugging tips.
## Principles
1. **All states and transitions are explicit** — nothing implicit, nothing merged
2. **Every element has substance** — a node or edge without description is an error. If you can't explain what happens at this step — you don't understand the process yet
3. **Details are rich text** — HTML with paragraphs, code blocks, lists, config snippets. The detail panel is where the real teaching happens
4. **Transitions are first-class** — edges carry description and details, not just a label
5. **Minimalist chrome** — toolbar contains only: title, optional doc link, item counter. Navigation lives in the inspector panel
6. **Single self-contained HTML file** — all CSS + JS + data inline. SVG.js v3 (~16KB) loaded from CDN for cleaner SVG code, but is optional — templates work as a reference and can be rewritten with raw `document.createElementNS` if offline use is required
7. **Affordance** — interactive elements must look clickable: hover highlights, first element auto-selected on load. Navigation buttons in inspector with keyboard hints teach interaction instantly
## Anti-patterns
- Empty description or `details: {}` — every element must teach something
- Details as raw JSON without explanation — JSON shows WHAT, text explains WHY
- 3-4 simple steps with one-sentence descriptions — Mermaid is enough for that
- Overloaded diagram (40+ elements) — split into phases, one diagram each
## What Good Details Look Like
Details is an HTML string combining:
- An explanatory paragraph (what happens and why)
- A code/config/HTTP snippet in `<pre>` (the exact artifact)
- Key parameters or options in `<ul>` (what varies)
- Caveats or debugging hints (what can go wrong)
If details is a JS object instead of a string, the template renders it as highlighted JSON — useful for API payloads but not the primary mode.
## Data Schema
### Sequence diagram
```js
const TITLE = "string"; // Page title
const DOC_URL = "string"; // Optional link to external docs (shown in toolbar)
const ACTORS = ["A", "B", "C"]; // Horizontal actor columns, left to right
const STEPS = [
{
name: "string", // Required. Short label on the arrow (3-5 words)
from: "A", // Required. Actor name (must match ACTORS)
to: "B", // Required. Actor name (must match ACTORS)
preview: "string", // Optional. Secondary label below the arrow (e.g. "GET /authorize")
description: "string", // Required. 1-3 sentences for the inspector summary
details: "html string" // Required. Rich HTML for the inspector detail panel
}
];
```
### Flowchart diagram
```js
const TITLE = "string";
const DOC_URL = "string";
const NODES = [
{
id: "string", // Required. Unique identifier, used in EDGES
type: "action|state|decision|start|end", // Required. Determines shape
label: "string", // Required. Short label inside the shape (2-4 words)
x: 320, // Required. Center X position in pixels
y: 160, // Required. Center Y position in pixels
description: "string", // Required. 1-3 sentences for the inspector summary
details: "html string" // Required. Rich HTML for the inspector detail panel
}
];
const EDGES = [
{
from: "node_id", // Required. Source node id
to: "node_id", // Required. Target node id
label: "string", // Optional. Short label on the edge (e.g. "ok", "fail")
fromSide: "bottom", // Optional. Attach point: "top"|"bottom"|"left"|"right". Default: "bottom"
toSide: "top", // Optional. Attach point. Default: "top"
description: "string", // Required. 1-3 sentences for the inspector summary
details: "html string" // Required. Rich HTML for the inspector detail panel
}
];
```
Node types and their shapes:
- `action` — rounded rectangle (140x44). General processing step
- `state` — rounded rectangle with gray fill. Resting/waiting state
- `decision` — diamond (60x44). Branching point
- `start` — filled circle (r=22). Entry point
- `end` — filled circle with inner ring. Terminal state
## Workflow
1. Determine type: **sequence** (actors + messages) or **flowchart** (nodes + edges)
2. Read the corresponding template from `assets/` — it has a full working example
3. Replace the DATA section (between `// === DATA ===` and `// === END DATA ===`) with your data following the schema above
4. Write to target path
## Scaling
- Templates auto-size SVG to fit content
- Long labels: keep diagram labels short (3-5 words), put context in the detail panel
- Many steps (20+): the page scrolls, that's fine
- Complex topology (loops, convergence): the flowchart template handles directional bezier routing — specify `fromSide`/`toSide` on edges
## Design Constraints (do not change)
- CSS variables define the palette — never override inline
- Inspector: always right sidebar, never modal or tooltip
- Active element: blue stroke + blue text; everything else gray
- Navigation buttons live in the inspector panel (after details), not in toolbar. Flowchart follows graph topology: node -> edge -> node. On branching, buttons show choices with number keys (1, 2, ...). Space always clicks the first/only option
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!