Skip to content

wholeboard.design

The design spec the AI writes, and its validation against the KiCad libraries.

A spec is plain JSON:

{ "name": "usb_led_blinker", "summary": "one paragraph", "board": {"width_mm": 50, "height_mm": 30, "layers": 2, "thickness_mm": 1.6, "corner_radius_mm": 1.0, "mounting_holes": {"diameter_mm": 3.2, "inset_mm": 3.5}, "ground_pour": "GND", "planes": {"In1.Cu": "GND", "In2.Cu": "+3V3"}, "test_points": true}, "rules": {"track_mm": 0.25, "power_track_mm": 0.5, "clearance_mm": 0.2, "via_diameter_mm": 0.6, "via_drill_mm": 0.3}, "components": [{"ref": "U1", "value": "AMS1117-3.3", "footprint": "Package_TO_SOT_SMD:SOT-223-3_TabPin2", "symbol": "Regulator_Linear:AMS1117-3.3", "lcsc": "C6186", "description": "3.3 V LDO", "no_connect": ["4"], "placement": {"x_mm": 5, "y_mm": 15, "rotation": 90, "side": "top", "locked": true}}], "nets": [{"name": "GND", "class": "power", "pins": ["U1.1", "C1.2"]}] }

Pin references are "REF.PAD" where PAD is the footprint pad name. A component may also carry "height_mm" (its datasheet height above the board) for the enclosure.

normalise(spec)

Fill defaults so later stages can rely on every key.

hole_positions(spec)

Mounting hole centres: the listed positions, or one in each corner.

on_bottom(c)

True for a part the spec puts on the bottom side of the board.