2026-05-15

JLCPCB's auto-match almost shipped me
1206-footprint LEDs as 0603 parts.

Five things I learned on my first PCBA order. The TL;DR: don't trust the fab's auto-matched BOM. Populate the LCSC field on every schematic symbol before you export.

I uploaded my first PCBA order to JLCPCB last week — ten boards of v0.0.0.17. It got paused immediately by JLCPCB's manual review with a flag on the LEDs. Here's what happened and what I'd do differently.

1. Auto-match matches on value, not footprint

My schematic specifies LED_1206_3216Metric for L1–L9 (nine per-key backlight LEDs). JLCPCB's auto-match looked at the symbol value — "white LED" — and confidently picked KT-0603W (LCSC C2290), which is a 0603-size white LED. That's roughly half the size of the 1206 pad I designed for. If it had gone to placement, the parts would've tombstoned during reflow or floated off-pad.

The auto-match algorithm doesn't read your footprint name. It reads the value field and picks something cheap that has the same value. There is no validation that the part you're buying physically fits the pad you designed.

2. JLCPCB's part-search UI is fuzzy text, not constrained to your footprint

After the LED was flagged, I went into the parts library to manually pick the right one. Searched "1606 LED" thinking I was looking at a 1606-class part. Found XL-1606UWC (LCSC C965866), confirmed it. Almost clicked "use this." It's actually 1.7×1.1 mm — 0805-class. The "1606" in the part number isn't a footprint code; it's part of the manufacturer's internal SKU.

I caught it because the description had the dimensions in mm spelled out, and I cross- checked against my 3.2×1.6 mm 1206 footprint. Always read the description's millimetres, never trust the part name.

3. The 68 Ω resistor was also flagged

Original auto-match was RTT0268R0FTH (LCSC C103146) — an Extended part with a $3 setup fee per unique Extended part. There was a perfectly fine Basic part in the same Yageo family at the same value (0603WAF680JT5E, LCSC C27592) that costs less and doesn't trigger the setup fee. Auto-match doesn't know to prefer Basic over Extended for cost.

4. The fix: populate the LCSC field on every schematic symbol

In eeschema, every symbol has a property table. Add a property called LCSC with the part number you actually want, on every symbol that has a JLCPCB equivalent. Then when Fabrication Toolkit exports the BOM, it emits explicit LCSC numbers per designator. JLCPCB's review skips the auto-match step entirely and uses what you specified.

For v0.0.0.18 I'm doing this before submission. The verified-good LCSC numbers from the v0.0.0.17 fab run are committed in the PCB repo's bom/ directory — reference values for whoever builds on this design next.

5. Always check "Confirm Parts Placement: Yes"

On the JLCPCB order form, there's an option called "Confirm Parts Placement". If you set it to Yes, the order gets paused at manual review before any actual placement happens, and you get an email with their proposed BOM. If you set it to No, your order goes straight to production with whatever auto-match picked.

For hobbyist orders this is your safety net. Always check yes. The few-hours delay while their engineer reviews is the only thing that saved this run from arriving with the wrong LEDs.


The final corrected BOM

For posterity (and for anyone forking this design), these are the LCSC numbers that actually shipped on the v0.0.0.17 boards:

Designator Wrong (auto-match) Correct
L1–L9 (LEDs) KT-0603W C2290 (0603) KT-1206W C71796 (1206)
R1–R9 (68 Ω) RTT0268R0FTH C103146 (Extended) 0603WAF680JT5E C27592 (Basic)
D1–D9 (1N4148) ✓ matched 1N4148W C81598
Q1 (S8050 NPN) ✓ matched S8050 J3Y C2146

Next: The first key fired →
Previous: ← Why I forked the ANAVI Macro Pad 10