{
  "schema_version": 1,
  "type": "app",
  "slug": "mosfet-iv-visualizer",
  "title": "MOSFET IV Characterization Visualizer",
  "brief": "Interactive web-based visualizer for MOSFET IV curves (Id vs Vds). Plot multiple Vgs sweeps, overlay devices, compute saturation boundaries, and extract Vth/Rds(on).",
  "version": "0.1.0",
  "tags": [],
  "license": "MIT",
  "install": {
    "binary_name": "mosfet-iv-visualizer",
    "install_dir": "",
    "install_hint": "",
    "version_cmd": ""
  },
  "readme": "# MOSFET IV Characterization Visualizer\n\nInteractive web-based visualizer for MOSFET IV curves. Plot Drain Current (Id) vs Drain-to-Source Voltage (Vds) with multiple gate voltage (Vgs) sweeps, overlay data from different devices, compute saturation boundaries, and extract device parameters.\n\n**Source:** [adom-inc/mosfet-visualizer](https://github.com/adom-inc/mosfet-visualizer)\n\n## Installation\n\nClone from GitHub and start the server. Idempotent — safe to run multiple times.\n\n```bash\nINSTALL_DIR=\"/home/adom/mosfet-visualizer\"\n\nif [ -d \"$INSTALL_DIR/.git\" ]; then\n  echo \"[mosfet-visualizer] Updating...\"\n  cd \"$INSTALL_DIR\" && git pull origin main\nelse\n  echo \"[mosfet-visualizer] Installing...\"\n  git clone https://github.com/adom-inc/mosfet-visualizer.git \"$INSTALL_DIR\"\nfi\n\ncd \"$INSTALL_DIR\" && npm install --production\nbash \"$INSTALL_DIR/start-mosfet-visualizer.sh\"\n```\n\nVerify: `curl -sf http://127.0.0.1:8778/health`\n\nThe service auto-starts via `service.json` if placed in `$GALLIA_DIR/services/`. No CLI binary needed — Claude uses the HTTP API directly.\n\n## Features\n\n- **Multiple Vgs sweep curves** with per-sweep color coding\n- **Device overlay** — compare multiple MOSFETs on the same chart\n- **Custom legend** — eyeball toggle per device and per sweep, sweep count badges\n- **Saturation boundary detection** — compute the linear/saturation region boundary via knee detection algorithm\n- **Parameter extraction** — threshold voltage (Vth), on-resistance (Rds_on)\n- **Linear/Log scale toggle** — essential for subthreshold characterization\n- **Crosshair cursor** with hover tooltip showing exact Vds, Id, Vgs values\n- **Export** — PNG, SVG, CSV, JSON\n- **CSV import** — drag-and-drop curve tracer CSV files directly onto the chart\n- **Real-time API control** — WebSocket pushes all state changes to the frontend instantly\n- **Shot log** — monitor all API calls with timestamps and durations\n\n## Data Formats\n\n### JSON Sweeps\n```json\n{\n  \"action\": \"plot\",\n  \"device\": { \"id\": \"IRF540N\", \"name\": \"IRF540N\", \"type\": \"NMOS\" },\n  \"sweeps\": [\n    { \"vgs\": 4.0, \"data\": [{ \"vds\": 0, \"id\": 0 }, { \"vds\": 5, \"id\": 0.5 }] }\n  ]\n}\n```\n\n### Curve Tracer CSV\nColumn triplets per sweep: `VN (V), IN (A), RN (Ohm)` — auto-detected from headers.\n\n## AI Prompts\n\n| Prompt | What it does |\n|--------|-------------|\n| \"Install the MOSFET IV visualizer\" | Clones repo, installs deps, starts server |\n| \"Plot my MOSFET IV curves from this CSV file\" | Reads CSV, sends to visualizer |\n| \"Show me the MOSFET visualizer with sample data\" | Starts server, loads demo, opens panel |\n| \"Compute the saturation boundary curve\" | Runs knee finder, draws red dashed parabola |\n| \"What's the threshold voltage?\" | Analyzes data, extracts Vth |\n| \"Switch to log scale\" | Toggles Y-axis to log10 |\n| \"Overlay my BSS138 data on the IRF540N\" | Adds second device for comparison |\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| L | Toggle linear/log scale |\n| K | Compute/clear saturation curve |\n| S | Load sample data |\n| R | Reset zoom |\n\n## Architecture\n\n- **Server:** Node.js HTTP + WebSocket (port 8778)\n- **Frontend:** Self-contained HTML with Plotly.js\n- **Brand:** Adom dark theme (teal #00b8b0)\n- **No CLI needed** — Claude reads the skill and uses `curl` to control the API\n",
  "author": {
    "id": "695820315b5f1e4db2fcf602",
    "name": "Kyle Bergstedt",
    "email": "kyle@adom.inc"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:29:23.339Z",
  "updated_at": "2026-05-28T05:29:23.339Z",
  "skills": []
}