main
John Lauer README.html with embedded 3D walkthrough viewer, full BOM and schematic, source bundle, build outputs 23c1d5e 2mo ago

Plan — Evan's LED Nameplate

Original prompt

can you make a nameplate for Evan with 0603 led's where you spell out Evan's name, cuz he's always wanted his name in lights. put a usbc connector on the right side so he can plug it into his iphone charger. use adom-tsci.

Refinements during the build

  • Font. The first pass used the 3 × 5 bitmap font inherited from the BRIANNA nameplate. At three columns wide the N degenerates into a filled blob that reads as H or M. Moved to a proper 5 × 7 dot-matrix font so the N gets a real diagonal, walking column 1 to 2 to 3 down the glyph, and the V gets a real point. 66 LEDs instead of 42.
  • USB-C. The first pass used the BRIANNA-era UsbCReceptacle.tsx, whose footprint puts anchor holes on both sides of the pad row. Replaced with the corrected wrapper from adom/alex-nameplate (2026-08-07), which keeps all holes on the mouth side under the shell, then re-derived the body offset. See below.
  • Parts. Every line of the BOM is now an Adom Basic Part carrying its real MPN, not a generic tscircuit footprint.

The USB-C body offset fix

The upstream wrapper's BODY_FORWARD_MAG = 2.5034 left the shell floating 2.09 mm forward of its own pad row and hanging 2.5 mm off the board edge. The cause is that tscircuit anchors cadModel.positionOffset at pcb_component.center, the bounding box of pads and holes, rather than at the pad row. Every hole in this footprint sits on the mouth side, so that centre is 2.7366 mm forward of the pads and the offset inherits the error. adom-tsci lint does not catch it, because it derives the mouth vector from cad.rotation.z and the error cancels out of the check.

Re-derived in lib/UsbCReceptacle.tsx as

BODY_FORWARD_MAG      = MODEL_ORIGIN_TO_BACK − FOOTPRINT_CENTER_FROM_PADS
USB_C_MOUTH_FROM_PADS = MODEL_ORIGIN_TO_BACK + MODEL_ORIGIN_TO_MOUTH

with the model numbers measured off the J1 node of a built 3d.glb, the artifact that actually gets rendered, so it cannot disagree with what you see. The result: shell back face exactly on the pad row, mouth 0.4 mm proud of the board edge, easternmost copper 1.68 mm inside it.

scripts/check-usbc.mjs re-runs that measurement against the GLB and fails the build if either lands outside tolerance. Run it after any change to the receptacle or the board size.

Hardware decisions

  • 66 green 0603 LEDs, IN-S63BTG from Inolux: InGaN 527 nm, Vf 3.2 V typ at 20 mA, 560 mcd, 25 mA max. One per lit pixel of a 5 × 7 bitmap of "EVAN".
  • 330 Ω 0402 per LED, CR0402-FX-3300GLF. (5 − 3.0) / 330 works out to about 6 mA each, so 66 LEDs draw roughly 400 mA total at 2.0 W, inside what a source advertising Default USB Power will hand out. These are bright parts, so 6 mA is a comfortable desk brightness rather than a dim one.
  • USB-C TYPE-C-31-M-12 (LCSC C165948) on the east edge, mouth 0.4 mm proud so any cable seats. Adom part page: wiki.adom.inc/adom/type-c-31-m-12.
  • 4.7 kΩ CC pulldowns, two of them, CR0402-FX-4701GLF. Rd tells the charger to enable VBUS. 4K7 rather than 5K1 because that is the Adom stocked value, it sits inside the spec's tolerance band, and it is what adom/alex-nameplate already ships.
  • 10 µF 0805 bulk plus 100 nF 0402 HF, CL21A106KOQNNNG and 0402B104J160CT, for inrush when 66 LEDs light at once.
  • 96 × 44 mm 4-pin molecule, MachinePinMediumStandard, absolute sizing so the real outer edge is 96.4 × 44.4 with the nominal wing. The USB-C needs a known edge to work back from.

Layout notes

  • Resistors sit 1.65 mm below their LED. That exact offset is load bearing: at 1.5, 1.55 or 1.6 mm the autorouter puts a via inside a pad's clearance, 0.053 to 0.083 mm against a 0.1 mm minimum. 1.65 mm routes clean. If you change the pitch, the board size, or the part placement, sweep this again and re-check circuit.json for pcb_pad_pad_clearance_error.
  • The east 16 mm or so is reserved for J1 and its support parts, so the letters sit left of centre rather than centred on the board.

Out of scope (deliberate)

  • No microcontroller, no firmware, no animation, no PWM. It lights up when you plug it in.
  • No power LED. The letters are the power indicator.
  • No ground pour. Each LED is fed by its own resistor and returns through autorouted GND, so one LED dying does not affect the others.

Build and preview

cd ~/project/evan-led-nameplate
bun install
bunx tsci build lib/index.tsx --glbs --svgs --3d-png --pcb-png
node scripts/check-usbc.mjs        # USB-C geometry, measured off the GLB
adom-tsci lint                     # DRC, routing, schematic overlap
adom-tsci start . --texture-resolution 4096
adom-tsci stop                     # when done, so tsci dev processes do not leak

Future work

  • Different name. TEXT plus the glyphs in FONT are the whole design. A different four-letter name is a one-line change. A longer one needs BOARD_W grown to keep the 16 mm USB-C reservation.
  • Different colour. Swap LED_MPN for another Adom 0603 LED (IN-S63BTA amber, IN-S63BT5B blue, IN-S63BTR red, IN-S63BT5UW white) and re-derive R_VALUE for that part's forward voltage. Red and amber are roughly 2.0 V parts, so they want about 470 Ω, not 330 Ω.
  • Fab. Not quoted yet. adom-tsci export --format kicad-zip or gerbers produces the fab package.
  • Wiki page. Published as a molecule alongside the rest of the nameplate family at wiki.adom.inc/adom/evan-led-nameplate.