soldermask
A prompt to a fab-ready two-layer board. You describe a board in a sentence; soldermask has a model design it, resolves every part against live JLCPCB stock, checks the netlist, places and routes the board, writes the Gerbers, assembly files, a KiCad project and 3D models, prices it at several quantities — and keeps every version so you can come back, compare, and go back.

What you get from one sentence
| Stage | Output |
|---|---|
| Design | A structured netlist: parts, packages, nets, assumptions, open decisions, and what the model could not do |
| Parts | Every component resolved to a real LCSC part number in stock, with price and basic/extended status |
| Checks | An electrical rule check with named rules, and pin functions verified against the KiCad symbol library |
| Layout | Placement and autorouting (freerouting) on a two-layer board with a ground pour |
| Fab | Gerbers and drill file (verified by reading them back), BOM and CPL in JLCPCB's format, a .kicad_pcb you can open and edit, VRML 3D models |
| Money | Cost and stock headroom at 1 / 10 / 25 / 100 boards, from live inventory |
| Memory | Every turn saved as an immutable version: diff, restore, fork, label, export |
The one rule
Every stage reports what it could not do, and that report is shown next to the board rather than in a log. A board that routes is not the same as a board that works, and the gaps list is the difference. Read What is not guaranteed before you send anything to a fab.
Where to start
-
Five minutes, one API key, Java for the router.
-
From a sentence to Gerbers, and what to look at along the way.
-
Projects, the workbench, versions, exports, two devices on one board.
-
Every stage: what it decides, what it reports, what it cannot promise.
-
Every command, endpoint, file and environment variable.
-
Running it for real: the server, access, deploying, troubleshooting.
Two kinds of version
The app has a version (soldermask version, semantic, tagged, changelogged). Each project keeps every board it has built as a numbered version on disk. They are different things and both are explained in Versioning and releases.