Loading files…
An AI PCB engineer for KiCad and JLCPCB. Printed circuit boards, designed from a written brief.
This page is also a PDF with bigger pictures, the hwde showcase: hwde-showcase.pdf. To install and run hwde, see Using hwde.
You describe a board in plain words. hwde researches the parts, draws the schematic, lays out and routes the board, checks it, and hands you the files a factory needs to make it. A person reads the work and signs it off at each stage before the next one starts.
lumina-carrier · 4 layers · 100 × 80 mm · 116 footprints · ordered, fabricated. A carrier board for a stage-lighting fixture. hwde designed it, and it was ordered from JLCPCB and made.
A board goes through five stages, and each stage ends with checks and a person's sign-off.
Figure 1. Each box is a stage, and each one writes a file the next one reads.
A run starts from a brief, which can be a paragraph or a page. hwde first researches the parts and picks an architecture, then chooses the real parts and draws the schematic. Layout places the parts and routes the copper. The checks run the electrical rules, the design rules and the circuit simulations, and then the factory's own manufacturing rules on the exported Gerbers. What comes out is the package: Gerbers, a bill of materials and a placement file that JLCPCB can build and assemble from.
The work is split two ways. Subagents make the judgement calls, such as which topology to use, how big a part must be, or whether a schematic is right, and each one has a written contract that says what it may decide. Scripts do the mechanical work, and they do it the same way every time. They drive KiCad, run the routers and export the Gerbers. A script never makes a judgement, and an agent never edits a board file by hand. Everything either of them makes is a file in the board's own folder, so you can read it without hwde.
Figure 2. A failed check or a refused sign-off goes to the fix loop, which reworks the file and sends it round again.
The checks that run depend on the stage, and each one writes its own report. A pass only proves the checks that actually ran, which is why the reports are kept one per check and not folded into a single verdict. When a check fails, the fix loop reworks the file the stage made and the checks run again. When they pass, a person still has to read the work and agree before the next stage starts.
Every run also writes down what went wrong and why, with a date and a tag. The next board reads those notes before it starts, so a mistake that cost one board some time is not paid for again on the next.
Three things can follow a finished package. A person can order the board, /fwe can write its firmware, and /npie can plan how to bring it up.
Figure 3. An order needs a person. Firmware and the bring-up plan have so far run only in simulation.
Ordering is deliberately hard to do by accident. JLCPCB has no public API for its manufacturability review, so a person does that step in a browser. One code path can place an order, and it takes 2-layer boards only. It refuses a board whose files already record an order, and it will not run without a fresh quote and a design that matches the one quoted. A person then has to type a confirmation that names the board, the quantity and the total.
/fwe and /npie are two newer skills that take over where hwde stops. They live in their own repositories, ihsan-sa/fwe and ihsan-sa/npie. /fwe writes firmware for a board, working from the board's own netlist to get the pin map. /npie reads the same design and writes a staged bring-up procedure, with pass and fail limits taken from the design, then runs it through one driver layer that talks either to real instruments or to a simulated bench. So far both have worked on one board, the motor driver, and neither has touched hardware. The firmware builds, its unit tests pass on the host, and it runs in the Renode emulator. The bring-up procedure has been run once, against the simulated bench.
Twenty-three boards have reached a routed layout. They run from a linear regulator with five parts to a three-phase motor driver.
| Board | What it is | Layers | Size (mm) | Where it stopped |
|---|---|---|---|---|
| stereo-class-d-amp | stereo class-D amplifier | 2 | 53.6 × 36.8 | made and measured, verification not passed |
| pd-trigger | USB-C PD bench trigger | 2 | 48 × 30 | ordered and made |
| lumina-carrier | lighting carrier, PoE-powered | 4 | 100 × 80 | ordered and made |
| rf-load-50ohm | 50 ohm / 200 W RF load at 13.56 MHz, fan-cooled, -40 dB tap | 2 | 60 × 60 | package ready |
| rp2040-mini | RP2040 dev board on the Pico footprint, USB-C | 2 | 21 × 51 | package ready |
| esp32c3-node | WiFi/BLE sensor node, LiPo | 2 | 26 × 38 | verification, findings open |
| lipo-boost | LiPo charger and 5 V boost | 2 | 53.9 × 38.8 | package ready |
| nfc-card | NFC business card | 2 | 88.9 × 50.8 | package ready |
| bldc-motor-driver | three-phase motor driver | 4 | 78 × 78 | package ready |
| pd-trigger-lite | small USB-C PD trigger | 2 | 25 × 15 | package ready |
| pd-trigger-lite-dip | the same, set by DIP switch | 2 | 25 × 21 | package ready |
| g0-sense | USB-C sensor node | 2 | 35.8 × 28.3 | package ready |
| bb-adc | single-channel ADC | 2 | 54.8 × 34.9 | package ready |
| bb-mcu | bare microcontroller board | 2 | 34.8 × 22.3 | package ready |
| bb-ldo | bare linear regulator | 2 | 34.7 × 34.7 | package ready |
| bb-amp | sensor amplifier chain | 2 | 48 × 28.3 | package ready |
| bb-buck | bare buck converter | 2 | 35 × 25 | package ready |
| rf-term-150w | 150 W RF dummy load head | 2 | 26 × 20 | package ready |
| rf-de-20m | 20 MHz Class E GaN stage | 4 | 120 × 80 | routing, findings open |
| sbuck-5v3a | 5 V / 3 A synchronous buck | 4 | 50 × 40 | package ready |
| usb-buck | USB device dev board | 4 | 50 × 40 | package ready |
| lumina-par | RGBW PAR daughter board | 4 | 100 × 80 | manufacturability, findings open |
| stm32-blinky | minimal STM32 dev board | 2 | 50 × 40 | package ready |
“Where it stopped” is the last stage the board reached, and it does not mean the board is fit to release. Three boards were ordered from JLCPCB and made. “Made and measured” means the board was also tested on a bench. “Package ready” means every recorded check passed and the manufacturing package is built. “Findings open” means a check failed and a person has yet to rule on it. Each size is the bounding box of the board outline, and not every outline is a rectangle.
These boards were added after the rest of this chapter was written, so each description is taken from the board's own requirements.
| rf-load-50ohm · 2 layers · 60 × 60 mm · 21 footprints · package ready. A 50 ohm resistive RF load (dummy load) for 200 W continuous wave at 13.56 MHz, usable 1-30 MHz, for the owner's RF test system (it terminates the PCB-0023-A GaN inverter). | rp2040-mini · 2 layers · 21 × 51 mm · 54 footprints · package ready. A general-purpose RP2040 microcontroller board that is a drop-in for the Raspberry Pi Pico (Raspberry Pi Ltd, 2021): same 21 x 51 mm outline, same 40-pin through-hole edge (as built: plain PTH, not castellated) with the Pico's pinout, same 3-pin SWD header position class (bottom edge, opposite USB). |
bldc-motor-driver · 4 layers · 78 × 78 mm · 175 footprints · package ready. A three-phase driver for brushless motors, running from 10 to 28 V. Six N-channel MOSFETs make three half-bridges, a DRV8300 drives their gates, and an STM32G431 runs the motor control. Each low-side leg has a 3 mΩ shunt read by an INA240 current amplifier. The brief was a general spec and one frame of a video showing someone else's demo board, so hwde wrote down every gap it had to fill as a numbered assumption.
The FETs are rated 60 V although the board runs at 28 V at most. The input TVS diode clamps a surge at about 45 V, and every part on the motor supply is chosen to survive that clamp, not just the working voltage. There is no fuse on the board, and the notes call for a 20 A slow fuse in the supply lead.
bldc-motor-driver, top copper · F.Cu with net names. The three half-bridges sit along the bottom edge, with phase A, B and C left to right, each with its current amplifier below it. The board passes its checks with 390 written waivers, and the board's notes ask you to read them before you trust it. Most cover stitching vias and the thin Kelvin and gate-return taps, which the current-capacity check counts as power copper.
This is the one board that /fwe and /npie have worked on. /fwe wrote the first stage of its firmware, which spins the motor with six-step commutation. It builds with warnings treated as errors, its unit tests pass on the host, and it runs on an emulated STM32G431 in Renode. /npie wrote a bring-up procedure for the board and ran it once against a simulated bench, where it passed. Neither result says anything about real hardware, because the board has not been made.
stereo-class-d-amp · 2 layers · 53.6 × 36.8 mm · 44 footprints · made and measured, verification not passed. A stereo class-D amplifier that runs from a single 12 V supply and drives 4 to 8 Ω speakers. Each output has a 10 µH LC filter. The brief asked hwde to reproduce a published reference design, so the two can be compared.
The brief named the TPA3116D2, but hwde used the TPA3118D2 instead. The 3116 only comes with its thermal pad on top, which needs a heatsink bolted on. The 3118 has the pad underneath and sheds its heat into the board, so hwde kept a 25 by 25 mm ground area clear around it on both layers. That area is why the board is bigger than the 44 by 34 mm reference.
stereo-class-d-amp, top copper · F.Cu with net names. The amplifier sits in the middle of a solid ground pour, with the left channel's filter below it and the right channel's above. The input connector is on the left edge and the speaker pads are on the right.
Ten assembled boards were ordered from JLCPCB on 30 September 2026, and one was wired up and measured on the bench on 13 October. From 12 V into 6 Ω speakers, one channel gave 10.9 W at 0.37% THD, and at 4.1 W a channel the board delivered about 90% of its supply power to the speakers. It was ordered before its verification checks passed, with eight waivers unsigned, and nobody has yet measured the chip's temperature under load.
These three were designed unattended on the same morning. The owner told hwde to decide for itself, so hwde signed off its own stages and wrote down each call it made, with the reason.
nfc-card · 2 layers · 88.9 × 50.8 mm · 19 footprints · package ready. A business card you tap with a phone. The phone reads a web address from the NFC tag and opens it, and while the phone is near, the tag takes power from its field and lights a pattern of LEDs. There is no battery and no microcontroller. The antenna is a coil printed around the edge of a 0.8 mm board, thin enough to carry in a wallet.
| esp32c3-node · 2 layers · 26 × 38 mm · 41 footprints · verification, findings open. A small WiFi and Bluetooth sensor node built around an ESP32-C3 module. USB-C powers it and also flashes it, through the chip's own USB, so there is no USB-serial bridge. It charges a single LiPo cell and keeps running with or without one, and a BME280 and a Qwiic connector share one I²C bus. | lipo-boost · 2 layers · 53.9 × 38.8 mm · 33 footprints · package ready. It charges a single LiPo cell from USB and makes 5 V at 1 A on a USB-A socket from the cell. While USB is plugged in, the output keeps running from USB as the cell charges. The brief asked for a board in the class of the PowerBoost 1000C, designed from the datasheets rather than copied. |
| pd-trigger-lite · 2 layers · 25 × 15 mm · 15 footprints · package ready. Plug in a USB-C charger and the board asks it for 9, 12, 15 or 20 V, at up to 3 A, and passes it to two output holes. One solder link picks the voltage. hwde chose the CH224A over the CH224K the brief named, because its sense pin takes the bus voltage directly. That removes a dropper resistor, a sense resistor and the pull-ups. | pd-trigger-lite-dip · 2 layers · 25 × 21 mm · 13 footprints · package ready. The same board with a five-way DIP switch instead of the solder links, which adds 5 V to the choices. You set exactly one switch before you plug it in. The board grew from 15 to 21 mm to make room for the switch. |
Both are smaller versions of pd-trigger, the bench tool that was ordered and made.
lumina-carrier, the board at the start, is the carrier for a stage-lighting fixture. It takes power over Ethernet through a PD controller and a 100 V buck, and it has an expansion connector that a fixture-specific daughter board plugs into. The connector's pinout is frozen, because another board depends on it. The amplifier was ordered too, and the third board that was ordered is a bench tool.
pd-trigger · 2 layers · 48 × 30 mm · 30 footprints · ordered and made. A USB-C Power Delivery sink asks a charger for 5, 9, 12, 15 or 20 V, and you pick which on the board. The rail comes out on a screw terminal rated for 5 A. The board converts nothing and just passes the rail through.
| sbuck-5v3a · 4 layers · 50 × 40 mm · 44 footprints · package ready. A synchronous buck that takes 7–18 V in and holds 5.0 V ±2% at 3 A out. It is an open-frame power module. | rf-term-150w · 2 layers · 26 × 20 mm · 6 footprints · package ready. A 50 Ω, 150 W dummy load head for DC to 25 MHz. The element bolts to a heatsink you supply, so the board is only the RF launch and the mounting. It looks almost bare because none of its six footprints has a 3D model, so the connector and the element are not drawn. |
rf-de-20m · 4 layers · 120 × 80 mm · 80 footprints · routing, findings open. A 20 MHz Class E RF power stage that puts 200 W into 50 Ω from a 40 V bus. A GaN gate driver buffers the PWM drive from an SMA input, and one eGaN FET switches. A resonant tank and an L-match turn the 4.6 Ω load line into 50 Ω at the output SMA. The owner fixed the topology and the two core parts after a costed trade study, and hwde did the rest.
lumina-par · 4 layers · 100 × 80 mm · 158 footprints · manufacturability, findings open. The RGBW PAR daughter board that stacks on lumina-carrier. It takes the carrier's frozen connector as given. Its power budget depends on the power-over-Ethernet class the fixture is granted, so hwde worked it out again here. The silkscreen warns that the board floats at the power-over-Ethernet potential, because an earthed probe breaks the fixture's power negotiation.
| lumina-par, straight down · top-down view. The same board from straight above, so the routing shows. | lumina-carrier, underneath · bottom view. Every part on the carrier is on the top side, so the back carries routing and vias and nothing else. |
g0-sense · 2 layers · 35.8 × 28.3 mm · 30 footprints · package ready. A temperature and humidity node that runs off USB-C. An LDO makes 3.3 V from the 5 V supply, and an STM32G030 reads a Sensirion SHT4x over I²C. The same bus comes out on a Qwiic connector, the readings go out on a UART header, and you program it over SWD. hwde designed this one from end to end in a single unattended run.
| usb-buck · 4 layers · 50 × 40 mm · 28 footprints · package ready. An STM32F103 board that talks USB at full speed. The Micro-B socket carries both power and data, and there is an LED, a button and an SWD header. | stm32-blinky · 2 layers · 50 × 40 mm · 20 footprints · package ready. The simplest useful board here: an STM32F103, an 8 MHz crystal, one LED, an LDO and an SWD header. |
These five boards each carry a single block and nothing else. They are meant to be studied and measured on a bench, so they leave out protection, filtering, indicators and spare rails on purpose.
| bb-buck · 2 layers · 35 × 25 mm · 20 footprints · package ready. 18–30 V in and 5 V at 2 A out, on a screw terminal. It carries the converter and exactly what its datasheet requires. | bb-ldo · 2 layers · 34.7 × 34.7 mm · 5 footprints · package ready. 5 V in and 3.3 V at 500 mA out. It stays in regulation in still air on the board's own copper. |
| bb-mcu · 2 layers · 34.8 × 22.3 mm · 14 footprints · package ready. One MCU with a 3.3 V rail coming in, its debug header and four GPIO. There is no regulator and no second rail. | bb-adc · 2 layers · 54.8 × 34.9 mm · 25 footprints · package ready. 0–5 V in on a screw terminal and 12 bits at up to 10 kSa/s out on a header. It gives up speed for DC accuracy. |
| bb-amp · 2 layers · 48 × 28.3 mm · 14 footprints · package ready. A 0–20 mV bridge signal in and 0–3.3 V out, from DC to 1 kHz. |
Two more boards stopped before layout and have no PCB to show: lumina-strobe (LUMINA strobe daughter board) and buck-5v3a (12 V to 5 V / 3 A synchronous buck). They are in the boards repository at the stage they reached.
hwde is an engineering assistant. It does not release a board on its own, and a person signs off at every stage.
What holds
What does not
Board facts come from each board's own files in the boards repository
(.kicad_pcb, state.json and its notes), and the gallery above is
regenerated from them whenever a board is added or changed. How that works,
and how to rebuild the pictures and the PDF, is in
docs/showcase.
To install and run hwde, call it from another agent, or find which document answers which question, see Using hwde.
MIT - see LICENSE. Vendor datasheets, component 3D models and footprints pulled from LCSC/EasyEDA are third-party material, not under MIT - see NOTICE.
No comments yet. Be the first to ask about this board.