← Commit history

docs: control-surfaces SVG diagram

John Lauer ·70830c79e1 ·3mo ago ·parent 6d39093
1 file changed +83
control-surfaces.svgadded+83
@@ -0,0 +1,83 @@+<svg xmlns="http://www.w3.org/2000/svg" width="920" height="560" viewBox="0 0 920 560" font-family="'Segoe UI',Roboto,Helvetica,Arial,sans-serif">+  <defs>+    <marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">+      <path d="M0,0 L10,5 L0,10 z" fill="#64748b"/>+    </marker>+    <style>+      .lbl{fill:#0f172a;font-size:14px;font-weight:600}+      .sub{fill:#475569;font-size:11.5px}+      .pill{fill:#f1f5f9;stroke:#cbd5e1;stroke-width:1}+      .edge{stroke:#64748b;stroke-width:1.6;fill:none}+      .edgeL{fill:#64748b;font-size:11px}+      .surf{fill:#eff6ff;stroke:#3b82f6;stroke-width:1.4}+      .surfT{fill:#1e3a8a;font-size:13px;font-weight:700}+      .kicad{fill:#ecfdf5;stroke:#10b981;stroke-width:1.4}+      @media (prefers-color-scheme: dark){+        .lbl{fill:#e2e8f0}.sub{fill:#94a3b8}.pill{fill:#1e293b;stroke:#334155}+        .surf{fill:#172554;stroke:#3b82f6}.surfT{fill:#bfdbfe}+        .kicad{fill:#052e2b;stroke:#10b981}.edgeL{fill:#94a3b8}+      }+    </style>+  </defs>++  <!-- Cloud / AI -->+  <rect class="pill" x="330" y="18" width="260" height="52" rx="9"/>+  <text class="lbl" x="460" y="40" text-anchor="middle">Claude / Adom Desktop AI</text>+  <text class="sub" x="460" y="58" text-anchor="middle">calls kicad_* verbs over the relay</text>++  <!-- AD -->+  <rect class="pill" x="330" y="100" width="260" height="52" rx="9"/>+  <text class="lbl" x="460" y="122" text-anchor="middle">Adom Desktop (Tauri, user's laptop)</text>+  <text class="sub" x="460" y="140" text-anchor="middle">spawns the bridge · provisions Python · ADOM_BIND_HOST</text>++  <!-- Bridge -->+  <rect class="pill" x="300" y="182" width="320" height="56" rx="9" fill="#fef9c3" stroke="#eab308"/>+  <text class="lbl" x="460" y="206" text-anchor="middle">KiCad Bridge — server.py</text>+  <text class="sub" x="460" y="224" text-anchor="middle">HTTP on 127.0.0.1:{port} · POST /command · GET /status</text>++  <line class="edge" x1="460" y1="70" x2="460" y2="100" marker-end="url(#arrow)"/>+  <line class="edge" x1="460" y1="152" x2="460" y2="182" marker-end="url(#arrow)"/>++  <!-- four surfaces -->+  <g>+    <rect class="surf" x="24"  y="300" width="200" height="86" rx="9"/>+    <text class="surfT" x="124" y="322" text-anchor="middle">1 · kicad-cli</text>+    <text class="sub" x="124" y="342" text-anchor="middle">headless subprocess</text>+    <text class="sub" x="124" y="358" text-anchor="middle">DRC/ERC, export</text>+    <text class="sub" x="124" y="374" text-anchor="middle">gerber/pdf/svg/step/bom</text>++    <rect class="surf" x="248" y="300" width="200" height="86" rx="9"/>+    <text class="surfT" x="348" y="322" text-anchor="middle">2 · KiCad IPC (kipy)</text>+    <text class="sub" x="348" y="342" text-anchor="middle">KiCad 9+ API</text>+    <text class="sub" x="348" y="358" text-anchor="middle">board/schematic</text>+    <text class="sub" x="348" y="374" text-anchor="middle">introspection + place</text>++    <rect class="surf" x="472" y="300" width="200" height="86" rx="9"/>+    <text class="surfT" x="572" y="322" text-anchor="middle">3 · Embedded Python</text>+    <text class="sub" x="572" y="342" text-anchor="middle">adom_bridge.py in-proc</text>+    <text class="sub" x="572" y="358" text-anchor="middle">JSON-RPC on wx thread</text>+    <text class="sub" x="572" y="374" text-anchor="middle">ping/frames/wm_command</text>++    <rect class="surf" x="696" y="300" width="200" height="86" rx="9"/>+    <text class="surfT" x="796" y="322" text-anchor="middle">4 · Win32 / UIA</text>+    <text class="sub" x="796" y="342" text-anchor="middle">user32 ctypes</text>+    <text class="sub" x="796" y="358" text-anchor="middle">WM_COMMAND, SendInput</text>+    <text class="sub" x="796" y="374" text-anchor="middle">PrintWindow screenshots</text>+  </g>++  <line class="edge" x1="380" y1="238" x2="124" y2="300" marker-end="url(#arrow)"/>+  <line class="edge" x1="430" y1="238" x2="348" y2="300" marker-end="url(#arrow)"/>+  <line class="edge" x1="490" y1="238" x2="572" y2="300" marker-end="url(#arrow)"/>+  <line class="edge" x1="540" y1="238" x2="796" y2="300" marker-end="url(#arrow)"/>++  <!-- KiCad -->+  <rect class="kicad" x="180" y="452" width="560" height="72" rx="10"/>+  <text class="lbl" x="460" y="478" text-anchor="middle">KiCad 7–10 on Windows</text>+  <text class="sub" x="460" y="498" text-anchor="middle">project manager · eeschema · pcbnew · symbol/footprint editors · 3D viewer · kicad-cli</text>+  <text class="sub" x="460" y="514" text-anchor="middle">host app — the bridge DETECTS it, never bundles it</text>++  <line class="edge" x1="124" y1="386" x2="300" y2="452" marker-end="url(#arrow)"/>+  <line class="edge" x1="348" y1="386" x2="410" y2="452" marker-end="url(#arrow)"/>+  <line class="edge" x1="572" y1="386" x2="510" y2="452" marker-end="url(#arrow)"/>+  <line class="edge" x1="796" y1="386" x2="620" y2="452" marker-end="url(#arrow)"/>+</svg>