app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
dashboard: use the REAL KiCad logo (extracted from the installed kicad.exe) as the favicon and header mark instead of an invented teal glyph - the browser tab, the pup window tile and the taskbar badge now match the icon the user already knows
3 files changed
+14−8
dashboard/kicad_dashboard.py+11−5@@ -54,9 +54,12 @@ AI_THREAD = "kicad-dashboard" DEFAULT_PORT = 8931 UI_DIR = Path(__file__).resolve().parent / "ui" -FAVICON = ('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" '- 'stroke="#00b8b1" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="3"/>'- '<path d="M8 12h8M12 8v8"/></svg>')+# The REAL KiCad logo, extracted from the installed kicad.exe (John, 2026-08-18:+# "just go with the logo the user is familiar with and not try to reinvent the+# wheel" - the old favicon was an invented teal square-and-plus mark). It is the+# icon the user already sees on their own taskbar, so the browser tab, the pup+# window tile and the taskbar badge all agree with KiCad itself.+LOGO_PATH = UI_DIR / "kicad-logo.png" # ---------------------------------------------------------------- bridge calls@@ -786,8 +789,11 @@ class Handler(BaseHTTPRequestHandler): def do_GET(self): path = urlparse(self.path).path.rstrip("/") or "/"- if path in ("/favicon.svg", "/favicon.ico"):- return self._send(200, "image/svg+xml", FAVICON)+ if path in ("/favicon.png", "/favicon.ico", "/favicon.svg", "/kicad-logo.png"):+ try:+ return self._send(200, "image/png", LOGO_PATH.read_bytes())+ except Exception:+ return self._json({"error": "logo missing"}, 404) if path == "/health": return self._json({"ok": True, "app": "kicad-dashboard", "version": VERSION, "sseClients": HUB.count()})
dashboard/ui/index.html+3−3@@ -4,7 +4,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>KiCad Dashboard</title>-<link rel="icon" type="image/svg+xml" href="favicon.svg">+<link rel="icon" type="image/png" href="favicon.png"> <style> :root{ --bg:#0d1117;--surface:#161b22;--elevated:#1c2128;--overlay:#21262d;--border:#30363d;@@ -18,7 +18,7 @@ body{background:var(--bg);color:var(--text-body);font:15px/1.5 'Satoshi',sans-serif;min-height:100vh} header{height:44px;display:flex;align-items:center;gap:12px;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--border)} .brand{display:flex;align-items:center;gap:8px;font-family:'Familjen Grotesk',sans-serif;font-weight:600;color:var(--accent);white-space:nowrap;cursor:default}-.brand svg{width:16px;height:16px;stroke:var(--text)}+.brand img{width:18px;height:18px;border-radius:4px;display:block} .vsep{width:1px;height:20px;background:var(--border)} .subject{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .meta{font:12px 'JetBrains Mono',monospace;color:var(--text-2)}@@ -108,7 +108,7 @@ main a:hover{border-bottom-color:var(--accent)} <body> <header> <div class="brand">- <svg viewBox="0 0 24 24" fill="none" stroke-width="1.8"><rect x="3" y="3" width="18" height="18" rx="3"/><path d="M8 12h8M12 8v8"/></svg>+ <img src="kicad-logo.png" alt="KiCad" width="18" height="18"> KiCad Dashboard <span style="color:var(--text-2)">· bridge launch page</span> </div> <div class="vsep"></div>
dashboard/ui/kicad-logo.pngadded⋯ 1 unchanged line ⋯