{
  "schema_version": 1,
  "type": "skill",
  "slug": "kicad-donut-pad",
  "title": "KiCad Donut Pad Designer",
  "brief": "Generate annular-ring (donut) copper pads for KiCad footprints with NPTH acoustic ports — MEMS microphones, pressure sensors, vented packages",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "discovery_triggers": [
    "donut pad",
    "annular ring pad",
    "ring pad",
    "NPTH ring",
    "copper ring pad",
    "acoustic port pad",
    "sound port pad",
    "MEMS microphone footprint",
    "kicad annular ring",
    "donut footprint",
    "ring-shaped pad",
    "hollow pad",
    "pad around NPTH",
    "IM72D128 pad",
    "microphone GND pad"
  ],
  "discovery_pitch": "Interactive designer that generates KiCad donut/annular-ring pads for footprints with NPTH holes — common on MEMS microphones and pressure sensors.",
  "sample_prompts": [
    {
      "label": "Generate donut pad",
      "prompt": "Create a donut pad footprint for the IM72D128 microphone"
    },
    {
      "label": "Ring pad",
      "prompt": "Make a KiCad annular ring pad with outer radius 1.04mm and inner 0.58mm"
    },
    {
      "label": "MEMS mic footprint",
      "prompt": "Generate a MEMS microphone GND pad with acoustic port hole"
    },
    {
      "label": "Open designer",
      "prompt": "Open the donut pad designer in the viewer"
    },
    {
      "label": "Custom donut",
      "prompt": "Create a donut pad with custom dimensions for a pressure sensor vent hole"
    }
  ],
  "source_path": "SKILL.md",
  "readme": "# KiCad Donut Pad Designer\n\nGenerate annular-ring (donut) copper pads for KiCad footprints. These appear on components like MEMS microphones where a GND pad surrounds a central acoustic port hole (NPTH).\n\n## What it does\n\n- Interactive Hydrogen webview app with live SVG preview\n- Adjustable parameters: outer/inner radius, drill diameter, segments, paste aperture config, mask margin\n- Presets for common MEMS microphones: IM72D128, IM69D130, SPH0645\n- Exports valid `.kicad_mod` files directly to your project directory\n- Python CLI generator (`donut_pad.py`) for scripted/batch use\n\n## How the donut pad works\n\nKiCad has no native ring pad shape. The workaround uses a **custom SMD pad** with a `gr_poly` primitive whose outline traces the outer circle CCW, then bridges to the inner circle and traces it CW. This creates a filled polygon with a hole.\n\n```\nOuter copper (R_outer) ──┐\n                         │  copper annulus\nInner clearance (R_inner)┘\n         NPTH drill ─── acoustic port / vent hole\n```\n\nThe generator also produces:\n- **NPTH hole** at the center\n- **Segmented paste apertures** (quarter-arc stencil openings with gaps)\n- **Solder mask opening** circle\n- **Courtyard** rectangle\n\n## Installation\n\nThe skill is installed via gallia. It lives at `~/.claude/skills/kicad-donut-pad/`.\n\nTo launch the interactive designer:\n\n```bash\n# Start the server (if not already running)\ncd ~/.claude/skills/kicad-donut-pad && python3 server.py &\n\n# Open in Hydrogen webview\nadom-cli hydrogen webview open-or-refresh --name \"Donut Pad Designer\" \\\n  --url \"$(echo $VSCODE_PROXY_URI | sed 's/{{port}}/8847/')\"\n```\n\nOr use the Python CLI directly:\n\n```bash\npython3 ~/.claude/skills/kicad-donut-pad/donut_pad.py \\\n  --outer 1.04 --inner 0.58 --drill 0.8 \\\n  --center-x 0 --center-y 0.68 \\\n  --pad-number 5 --segments 36\n```\n\n## Common use cases\n\n| Component type | Typical R_outer | R_inner | NPTH | Notes |\n|---|---|---|---|---|\n| MEMS microphone (3x4mm) | 0.9-1.1 mm | 0.5-0.6 mm | 0.8 mm | Acoustic port |\n| MEMS microphone (2.5x3.5mm) | 0.7-0.9 mm | 0.4-0.5 mm | 0.6 mm | Smaller package |\n| Pressure sensor | 0.8-1.2 mm | 0.4-0.6 mm | 0.5-0.8 mm | Vent hole |\n\n## Source\n\n- **Gallia repo:** `skills/kicad-donut-pad/` in [adom-inc/gallia](https://github.com/adom-inc/gallia)\n- **Files:** `SKILL.md`, `index.html` (webview app), `server.py` (HTTP + save API), `donut_pad.py` (CLI generator)\n",
  "author": {
    "id": "695820315b5f1e4db2fcf602",
    "name": "Kyle Bergstedt",
    "email": "[email protected]"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "metadata": {},
  "created_at": "2026-05-28T05:29:30.605Z",
  "updated_at": "2026-05-28T05:29:30.605Z",
  "sub_skills": [],
  "parent_app": null
}