Evan

An Adom molecule LED nameplate. Evan's name is spelled out by 66 green 0603 LEDs on a 5 × 7 dot-matrix grid, powered from a USB-C receptacle on the east edge. Plug it into a phone charger and it lights up.

The viewer loads when it scrolls into view, about 15 MB. The guided walkthrough starts on its own, seven steps, and the PCB / Schematic / Parts tabs are live. Open it full screen.

The one idea: the letters are the components. There is no display, no driver, no firmware. Each lit pixel of the bitmap is a physical 0603 LED placed at that coordinate, with its own 330 Ω resistor tucked 1.65 mm below it. The board is a picture of the word made out of the parts that light it, and the netlist is 66 identical two-part branches hanging off one 5 V rail.

The board

Board96 × 44 mm nominal, 96.4 × 44.4 mm real (nominal wing adds 0.2 mm per side), 2 layer
Moleculetype="4pin", MachinePinMediumStandard, absolute sizing, rounded edges
Letters66 LEDs, 5 × 7 glyphs, 3 mm pixel pitch, 3 mm letter gap, 69 mm of text
Power inUSB-C on the east edge, mouth 0.4 mm proud of the board edge
Draw~400 mA at 5 V, 2.0 W, all 66 LEDs lit
Components141 total: 66 LEDs, 68 resistors, 2 capacitors, 1 connector, 4 machine pins
DRCZero errors in circuit.json. adom-tsci lint: routing, CAD models and USB-C geometry all pass; the one open item is the four machine-pin symbols, see below.

Bill of materials

Every line is an Adom Basic Part, so the whole board builds off reels already loaded on the PnP line.

RefdesQtyPartPackageNotes
D0–D6566IN-S63BTG Inolux0603Green InGaN, 527 nm dominant, Vf 3.2 V typ @ 20 mA, 560 mcd, 25 mA max
R0–R6566CR0402-FX-3300GLF Bourns0402330 Ω 1%, one per LED, sets ~6 mA
J11TYPE-C-31-M-12SMD 16PLCSC C165948. Adom part page
R_CC1, R_CC22CR0402-FX-4701GLF Bourns04024.7 kΩ Rd pulldowns, tell the charger to enable VBUS
C_BULK1CL21A106KOQNNNG Samsung080510 µF X5R, inrush when 66 LEDs light at once
C_HF10402B104J160CT Walsin0402100 nF X7R, high frequency decoupling
MP1–MP44MachinePinMediumStandardWorkcell fixturing, mechanical only, no electrical function

How the letters are generated

FONT in src/lib/index.tsx holds one 5 × 7 glyph per character and TEXT = "EVAN" selects them. A generator walks each glyph's lit pixels and emits one <led> plus one <resistor> per pixel. Changing the name is a one-line change; a longer name needs BOARD_W grown to keep the 16 mm USB-C reservation on the east edge.

Why 5 × 7 and not the 3 × 5 the earlier nameplates used. Three columns is not enough for an N. The diagonal has nowhere to go, so it fills the middle and the glyph reads as H or M. Five columns gives the N a real diagonal, walking column 1 to 2 to 3 down the glyph, and gives the V a real point. The cost is 66 LEDs instead of 42.

Power

IN-S63BTG is an InGaN part: Vf 3.2 V typ at 20 mA, dropping to about 3.0 V at single-digit mA. From a 5 V rail:

(5 V − 3.0 V) / 330 Ω  =  6.1 mA per LED
66 LEDs × 6.1 mA        =  ~400 mA, 2.0 W

That is inside what a source advertising Default USB Power will hand out, so it runs off a phone charger without negotiation. At 560 mcd @ 20 mA these are bright parts, so 6 mA is a comfortable desk brightness rather than a dim one.

There is deliberately no power LED. The letters are the power indicator: lit means 5 V is present. And because each LED is fused by its own resistor, one LED dying does not affect the others. Replace the LED and its 330 Ω pair.

The USB-C body offset fix

Worth recording, because it bit this build and will bite the next one.

The wrapper this board inherited placed the receptacle's 3D body 2.09 mm forward of its own pad row, hanging 2.5 mm off the board edge. The cause is that tscircuit anchors cadModel.positionOffset at pcb_component.center, which is the bounding box of pads and holes, not 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. It derives the mouth vector from cad.rotation.z, so the error cancels out of its own check and it reports a healthy body_fwd.

The constants are re-derived in src/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, easternmost copper 1.68 mm inside the edge.

src/scripts/check-usbc.mjs re-runs that measurement against the GLB and exits non-zero if either lands outside tolerance. Step 2 of the walkthrough above flies the camera to the receptacle so you can see the seating for yourself.

Schematic and layout

PCB layout, copper and silkscreen
Copper and silkscreen. The letters are the component field; J1 and its support parts occupy the east 16 mm.
Rendered top view of the assembled board
Assembled top view. 66 green LEDs, USB-C cantilevered off the right edge.

Full vector versions: schematic.svg (141 symbols) and pcb.svg. Both are also tabs inside the interactive viewer above.

Mechanical and molecule compliance

Known issues and lessons learned

Variants

Reproducing it

tar xzf evan-led-nameplate-source.tar.gz
cd src && 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

Files

Source, to recreate the molecule

Build outputs

Provenance

Authored in tscircuit (TSX) with adom-tsci, autorouted by the tscircuit autorouter. @tsci/adom-inc.molecule 1.1.15, @tsci/adom-inc.library 1.2.1, tscircuit 0.0.2375. Walkthrough generated by adom-tsci walkthrough-gen from circuit.json. Part of the Adom LED nameplate family alongside brianna-led-nameplate and alex-nameplate. Designed by Adom in Fort Worth, Texas. 2026-08-20.