diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs
index 9135203..04d2544 100644
--- a/docs-site/astro.config.mjs
+++ b/docs-site/astro.config.mjs
@@ -59,6 +59,7 @@ export default defineConfig({
{ label: "Troubleshooting", slug: "development/troubleshooting" },
],
},
+ { label: "Lightning Talk", link: "/lightning-talk/" },
],
head: [
{
diff --git a/docs-site/src/content/docs/index.mdx b/docs-site/src/content/docs/index.mdx
index e8eb348..2b74abc 100644
--- a/docs-site/src/content/docs/index.mdx
+++ b/docs-site/src/content/docs/index.mdx
@@ -75,3 +75,9 @@ mckicad just gives them a voice.
description="Install mckicad and connect it to your first KiCad project."
href="/getting-started/installation/"
/>
+
+
diff --git a/docs-site/src/pages/lightning-talk.astro b/docs-site/src/pages/lightning-talk.astro
new file mode 100644
index 0000000..8daef3d
--- /dev/null
+++ b/docs-site/src/pages/lightning-talk.astro
@@ -0,0 +1,176 @@
+---
+import "../styles/lightning-talk.css";
+
+const title = "Teaching a language model to draw schematics";
+const description =
+ "A 90-second lightning talk on mckicad: why I replaced kicad-sch-api with an internal SchDocument engine, and what it unlocked.";
+
+// lucide-style icon paths (stroke, viewBox 24)
+const icons = {
+ problem: '',
+ engine: '',
+ wire: '',
+ check: '',
+ zap: '',
+};
+
+const beats = [
+ {
+ n: "01",
+ icon: icons.problem,
+ tag: "The problem",
+ heading: "The library kept lying to me",
+ body: [
+ "mckicad is an MCP server that lets a language model design KiCad schematics on its own. For a long time it stood on kicad-sch-api — and that library kept returning wrong answers.",
+ "Global labels: dropped silently. Custom library pins: empty lists. When the layer you build on returns confident nonsense, nothing downstream can be trusted. So I did the reckless thing and ripped it out.",
+ ],
+ },
+ {
+ n: "02",
+ icon: icons.engine,
+ tag: "The engine",
+ heading: "A parser that round-trips clean",
+ body: [
+ "The heart is sexp_tree — a full S-expression parser and serializer for KiCad's native format. Parse it, mutate it, write it back, byte-for-byte identical.",
+ "On top sits SchDocument: load a schematic and ask it real questions. Where is every pin. What net is this wire on. Which labels actually connect. Answers from the file itself, not a guess.",
+ ],
+ },
+ {
+ n: "03",
+ icon: icons.wire,
+ tag: "Autowire",
+ heading: "It routes around itself",
+ body: [
+ "Place the components; autowire pulls the nets for you — with real collision detection, so wires route around each other instead of bridging into shorts.",
+ "It clamps stub lengths when they would overlap, offsets labels so they don't collide, and tracks power-wire stubs as obstacles. The messy part of drawing a schematic, done carefully.",
+ ],
+ },
+ {
+ n: "04",
+ icon: icons.check,
+ tag: "It checks its own work",
+ heading: "One call, zero ambiguity",
+ body: [
+ "run_schematic_erc runs the full electrical rules check and reports back: zero errors — or exactly what's wrong, and where.",
+ "The engine grades its own homework, so the model gets a hard signal instead of a hopeful vibe.",
+ ],
+ },
+ {
+ n: "05",
+ icon: icons.zap,
+ tag: "The proof",
+ heading: "It drew Timbre",
+ body: [
+ "It generated the phase-1 bench schematic for Timbre, a Cypress PSoC-based synthesizer. Zero ERC errors.",
+ "A language model, placing parts and pulling nets, for real hardware headed to a bench. That's the whole point.",
+ ],
+ },
+];
+---
+
+
+
+