← Commit history

Publish 1.0.4

John Lauer ·72d61ada14 ·4mo ago ·parent 5783fe9
7 files changed +186−28
SKILL.mdadded+132
@@ -0,0 +1,132 @@+---+name: adom-footprint+description: "Use when the user asks to create a KiCad footprint, make a .kicad_mod, design a PCB footprint, build a footprint for a part, preview a footprint in FpView, lint a footprint, send a footprint to KiCad or Fusion 360, or view pad positions and solder blob layout. Also trigger for footprint-related questions like pad size, courtyard rules, or silk overlap."+---++# adom-footprint++Creates, previews, lints, validates, and delivers KiCad PCB footprints (.kicad_mod) with an interactive FpView HTML5 viewer. Supports delivery to KiCad, Fusion 360, and Altium.++## Architecture++```+adom-footprint (Rust binary)+  +-- adom-footprint serve   -> starts Node.js HTTP server on :8782+  +-- adom-footprint create  -> creates footprints from pad JSON+  +-- adom-footprint lint    -> lint via design-rule checks+  +-- adom-footprint health  -> version check++Node.js server (footprint-creator/)+  +-- POST /fp/create    -> create footprint from pad JSON+  +-- POST /fp/preview   -> refresh FpView viewer+  +-- POST /fp/lint      -> design-rule lint+  +-- POST /fp/validate  -> artifact completeness check+  +-- POST /fp/deliver   -> send to KiCad/Fusion 360/Altium+  +-- GET  /fp/list      -> list available footprints+  +-- GET  /viewer/:name -> FpView interactive viewer+  +-- GET  /health       -> service health+```++## Quick start++```bash+# Start the server+adom-footprint serve &++# Create a footprint from JSON+echo '{"footprintName":"QFN-20","pads":[...],"body":{...}}' | adom-footprint create++# Preview in FpView+adom-footprint preview --name QFN-20+# -> http://localhost:8782/viewer/QFN-20++# Lint a footprint+adom-footprint lint --name QFN-20+adom-footprint lint --path /path/to/custom.kicad_mod++# Send to KiCad+adom-footprint deliver --name QFN-20 --target kicad+```++## Commands++| Command | Description |+|---|---|+| `serve [-p port]` | Start HTTP server (default :8782) |+| `create [--file json]` | Create footprint from pad JSON (stdin or file) |+| `preview --name NAME` | Generate/refresh FpView viewer |+| `lint --name NAME` or `--path FILE` | Design-rule lint |+| `validate --name NAME` | Check artifact completeness |+| `deliver --name NAME --target kicad/fusion360/altium` | Send to desktop EDA |+| `health` | Check service health |+| `install` | Install Claude Code skill + completions |+| `completions bash/zsh/fish` | Generate shell completions |++## FpView viewer++The interactive HTML5 footprint viewer includes:+- Dark Adom theme with zoom/pan+- Pad hover highlighting (teal #00b8b1)+- Rich tooltips: pad number, name, size, shape, layer+- Toggle layers: Grid, Solder blobs, Labels+- Solder blob visualization (250um dots for InstaPCB jetting)+- Sticky click-to-pin tooltips+- Cursor coordinates (mm)++## Lint checks++The linter validates against KiCad and InstaPCB design rules:+- Courtyard present and 0.25mm minimum clearance+- Fabrication outline on F.Fab layer+- Pin 1 marker on silkscreen+- No silk-pad overlap+- Pad numbering sequential+- Pad size minimums for solder-jet compatibility++## Dependencies++| Dependency | Required? | Why |+|---|---|---|+| Node.js 18+ | Yes | Runs the HTTP server and FpView generator |+| service-kicad | Optional | SVG export for FpView rendering, footprint library search |+| adom-lbr | Optional | Converts footprint to .lbr for Fusion 360 delivery |+| adom-desktop | Optional | One-click delivery to desktop KiCad/Fusion 360/Altium |+| adom-symbol | Recommended | Symbol + footprint created together for complete component |++## Footprint storage++Footprints are stored at:+```+/home/adom/project/project-content/schematics/footprints/<NAME>/+  <NAME>.kicad_mod          <- the footprint+  <NAME>-metadata.json      <- pad count, description, tags, timestamps+  <NAME>-fpview.html        <- interactive FpView viewer (cached)+  <NAME>.svg                <- rendered SVG (from service-kicad)+```++## Create JSON format++```json+{+  "footprintName": "QFN-20",+  "description": "QFN-20 4x4mm 0.5mm pitch",+  "tags": "QFN QFN-20",+  "pads": [+    {"number": "1", "x": -1.75, "y": -1.0, "dx": 0.8, "dy": 0.25, "shape": "roundrect"},+    {"number": "2", "x": -1.75, "y": -0.5, "dx": 0.8, "dy": 0.25, "shape": "roundrect"},+    ...+    {"number": "21", "x": 0, "y": 0, "dx": 2.6, "dy": 2.6, "shape": "roundrect"}+  ],+  "body": {"x1": -2.0, "y1": -2.0, "x2": 2.0, "y2": 2.0},+  "courtyard": {"x1": -2.25, "y1": -2.25, "x2": 2.25, "y2": 2.25}+}+```++## .kicad_mod format notes++- Coordinate system: Y-positive is DOWN (opposite of schematic symbols)+- Pad types: smd, thru_hole, np_thru_hole+- Pad shapes: rect, circle, oval, roundrect+- Key layers: F.Cu, F.Paste, F.Mask, F.SilkS, F.Fab, F.CrtYd+- Courtyard: 0.25mm clearance minimum around body+- Filename must match internal footprint name
bin/adom-footprintadded+2
@@ -0,0 +1,2 @@+#!/bin/bash+echo "adom-footprint v0.1.0 — replace this stub with your binary or script."
install.shadded+14
@@ -0,0 +1,14 @@+#!/bin/bash+# install.sh for adom-footprint (app).+# Runs from the extracted module directory (~/project/adom_modules/adom-footprint/).+set -euo pipefail++DIR="$(cd "$(dirname "$0")" && pwd)"+cd "$DIR"++# App install: link the binary onto PATH.+BIN_DIR="${HOME}/.local/bin"+mkdir -p "$BIN_DIR"+install -m 0755 "$DIR/bin/adom-footprint" "$BIN_DIR/adom-footprint"+echo "Installed adom-footprint -> $BIN_DIR/adom-footprint"+
package.jsonadded+11
@@ -0,0 +1,11 @@+{+  "slug": "adom-footprint",+  "version": "1.0.4",+  "type": "app",+  "description": "A live PCB-footprint viewer with a floating Layers HUD and the InstaPCB 300um solder-paste dispensing dots no other tool shows.",+  "dependencies": {},+  "tags": ["eda","kicad","footprint","pcb","instapcb"],+  "hero": { "type": "image", "path": "screenshots/hero.png" },+  "scripts": { "install": "./install.sh", "uninstall": "./uninstall.sh" },+  "needs_sudo": false+}
page.json+20−28
@@ -1,36 +1,28 @@ {-  "schema_version": 1,   "slug": "adom-footprint",+  "version": "1.0.4",   "type": "app",-  "version": "1.0.0",-  "title": "adom-footprint",-  "brief": "A live PCB-footprint viewer with a floating Layers HUD and the InstaPCB 300um solder-paste dispensing dots.",-  "readme": "# adom-footprint\n\n**A live PCB-footprint viewer with a floating Layers HUD — and the InstaPCB solder-paste dispensing dots that no other PCB tool shows.**\n\nadom-footprint renders a `.kicad_mod` through the shared `service-kicad` (no local KiCad), crops tightly to the part, and themes it onto a dark PCB canvas. It reads legacy KiCad-5 `(module …)` footprints as well as modern ones. Standalone Rust, no Node, no gallia.\n\n## The Layers HUD\n\nA draggable, collapsible floating panel toggles each layer independently:\n\n- **Copper · Assembly (F.Fab) · Courtyard** — the KiCad-rendered geometry.\n- **Paste apertures** — the stencil openings.\n- **InstaPCB paste dots `NEW`** — the **actual 300 µm solder-paste dispensing positions**, computed by Adom and overlaid as real dots. Adom's InstaPCB line jets paste dot-by-dot instead of using a stencil, so a footprint in the Adom ecosystem carries *where the paste will land* — a first in PCB CAD.\n\n## Send to\n\nKiCad (native footprint), Fusion 360 / Altium / OrCAD (`.lbr` via **adom-lbr**).\n\n## Part of the Adom EDA family\n\nOpened from **chip-fetcher**; pairs with **adom-symbol**, **adom-lbr**, and **ds2sf**.\n\n## Run it\n\n```bash\nadom-footprint serve --port 8783    # live app (AI-drivable: /state, /load, /deliver, /eval)\nadom-footprint render --file part.kicad_mod --out part.svg\n```\nMIT, contributions welcome.\n",-  "install": {-    "binary_name": "adom-footprint",-    "install_dir": "",-    "install_hint": "",-    "version_cmd": ""+  "description": "A live PCB-footprint viewer with a floating Layers HUD and the InstaPCB 300um solder-paste dispensing dots no other tool shows.",+  "dependencies": {},+  "tags": [+    "eda",+    "kicad",+    "footprint",+    "pcb",+    "instapcb"+  ],+  "hero": {+    "type": "image",+    "path": "screenshots/hero.png"   },+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "needs_sudo": false,+  "visibility": "public",   "author": {-    "id": "6738b00a4dc87b8adbb0a5a3",     "name": "John Lauer",     "email": "[email protected]"-  },-  "tags": [],-  "license": "proprietary",-  "visibility": {-    "public": true-  },-  "hero": {-    "type": "image",-    "path": "docs/hero.png"-  },-  "sample_prompts": [],-  "discovery_triggers": [],-  "discovery_pitch": null,-  "metadata": {},-  "created_at": "2026-06-21T21:37:21.473Z",-  "updated_at": "2026-06-21T21:37:21.473Z",-  "skills": []+  } }\ No newline at end of file
screenshots/hero.pngadded
⋯ 1 unchanged line ⋯
uninstall.shadded+7
@@ -0,0 +1,7 @@+#!/bin/bash+# uninstall.sh for adom-footprint (app).+set -euo pipefail++rm -f "${HOME}/.local/bin/adom-footprint"+echo "Uninstalled adom-footprint"+