skills/slideshow/SKILL.md
Generate self-contained HTML slideshows for technical concepts with diagrams, code highlighting, math, and charts
npx skillsauth add benwaffle/skills slideshowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You create self-contained, single-file HTML slideshows for explaining technical concepts. Every slideshow opens directly in a browser with no build step or server required.
Include these via CDN in every slideshow. Use pinned versions for stability.
<!-- Reveal.js — slide framework -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@6/dist/reveal.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@6/dist/theme/black.css" id="theme">
<script src="https://cdn.jsdelivr.net/npm/reveal.js@6/dist/reveal.js"></script>
<!-- Mermaid — diagrams (flowcharts, sequence, ER, state, gantt, etc.) -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
<!-- highlight.js — syntax highlighting (bundled with Reveal.js) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@6/dist/plugin/highlight/monokai.css">
<script src="https://cdn.jsdelivr.net/npm/reveal.js@6/dist/plugin/highlight.js"></script>
<!-- KaTeX — math/equations -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js"></script>
<!-- Chart.js — data visualizations (bar, line, pie, radar, etc.) -->
<script src="https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js"></script>
Only include libraries that are actually used in the slideshow. For example, skip KaTeX if there are no equations.
Every slideshow must follow this structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SLIDESHOW_TITLE</title>
<!-- CDN links here (only those needed) -->
<style>
/* Custom styles scoped to the presentation */
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<!-- Title slide -->
<section>
<h1>Title</h1>
<p>Subtitle or description</p>
</section>
<!-- Content slides -->
<section>
<h2>Slide Title</h2>
<!-- content -->
</section>
<!-- Vertical sub-slides for drill-downs -->
<section>
<section><h2>Overview</h2></section>
<section><h3>Detail</h3></section>
</section>
</div>
</div>
<script>
// Initialize Reveal.js
Reveal.initialize({
hash: true,
slideNumber: true,
plugins: [ RevealHighlight ], // add only plugins in use
// Mermaid init (if used)
});
// Mermaid (if used)
mermaid.initialize({ startOnLoad: false, theme: 'dark' });
Reveal.on('slidechanged', async () => {
await mermaid.run({ querySelector: '.mermaid:not([data-processed])' });
});
Reveal.on('ready', async () => {
await mermaid.run({ querySelector: '.mermaid' });
});
// KaTeX auto-render (if used)
Reveal.on('ready', () => {
renderMathInElement(document.body, {
delimiters: [
{ left: '$$', right: '$$', display: true },
{ left: '$', right: '$', display: false }
]
});
});
// Chart.js instances (if used) — create per-slide in Reveal 'ready' callback
</script>
</body>
</html>
<section>
<h2>System Architecture</h2>
<div class="mermaid">
graph TD
A[Client] -->|HTTP| B[API Gateway]
B --> C[Service A]
B --> D[Service B]
C --> E[(Database)]
</div>
</section>
Supported diagram types: flowchart, sequence, class, state, ER, gantt, pie, mindmap, timeline, quadrant, sankey, and more. Choose the best type for the concept.
<section>
<h2>Example</h2>
<pre><code class="language-go" data-trim data-noescape>
func main() {
fmt.Println("Hello, world!")
}
</code></pre>
</section>
<section>
<h2>Big-O Notation</h2>
<p>Binary search runs in $O(\log n)$ time.</p>
<p>$$T(n) = 2T\left(\frac{n}{2}\right) + O(n)$$</p>
</section>
<section>
<h2>Latency Distribution</h2>
<canvas id="latencyChart" width="600" height="400"></canvas>
</section>
Then in the script section:
Reveal.on('ready', () => {
new Chart(document.getElementById('latencyChart'), {
type: 'bar',
data: {
labels: ['p50', 'p90', 'p95', 'p99'],
datasets: [{
label: 'Latency (ms)',
data: [12, 45, 78, 230],
backgroundColor: 'rgba(54, 162, 235, 0.7)'
}]
},
options: {
responsive: false,
scales: { y: { beginAtZero: true } }
}
});
});
<section>
<h2>Steps</h2>
<ol>
<li class="fragment">First, this appears</li>
<li class="fragment">Then this</li>
<li class="fragment">Finally this</li>
</ol>
</section>
data-line-numbers to highlight specific lines.theme/black.css). Mention the user can switch themes (white, moon, dracula, etc.) in the title slide or notes.Available Reveal.js themes (change the theme CSS link):
black (default) — dark background, white textwhite — light background, dark textmoon — dark bluedracula — purple/darknight — dark with blue accentserif — light with serif fontssimple — minimal light themesolarized — solarized colorsleague — gray textured backgroundbeige — warm light backgroundsky — light blue gradientblood — dark with red accentskubernetes-networking.html).open <filename>.html so the user can view it immediately.responsive: false and explicit width/height on the canvas so charts render correctly inside slides.rgba) for better appearance on dark backgrounds.Reveal.on('ready') callback.bar, line, pie, doughnut, radar, polarArea, bubble, scatter.plugins array for Chart.js plugins like ChartDataLabels if needed (add CDN separately).theme: 'dark' in mermaid.initialize() when using dark Reveal.js themes.graph TD (top-down) over graph LR (left-right) for tall/narrow layouts.%% comments in the Mermaid source to document the structure.<br/> for line breaks in labels, NOT \n. \n is silently ignored in node labels, participant aliases, edge labels, and Note text.tools
Put formatted content on the macOS clipboard so it renders correctly when pasted into a Slack message composer (bold/italic/lists via HTML, tables via TSV).
tools
Generate an interactive HTML report of your Claude Code usage (sessions, messages, tokens, active days, streaks, peak times, model usage by day, top projects/tools) by parsing ~/.claude/projects/*.jsonl. Use when the user asks for their Claude stats, usage, activity, streaks, token breakdown, or wants to see how they use Claude over time.
databases
Query and analyze Apple .logarchive files using the macOS `log show` command
development
Android Debug Bridge (ADB) assistant for inspecting, debugging, and managing Android devices