If you have ever looked at PartKeepr or InvenTree and decided that standing up Docker and Postgres to keep track of four hundred parts was the wrong shape of answer, this is the other end of that.
It is one HTML file. No server, no build step, no dependencies, no account, nothing to keep updated. You open it and it works — off a disk, off a USB stick, or from wherever you serve it. The parts live in a JSON file you connect, or a private repo if you want two benches to agree. Nothing is uploaded anywhere. MIT.
The part of it I did not expect to be interesting: LCSC have no search endpoint open to anyone but their own site. If you want to look a part up by manufacturer number from outside, the only way in is to render their search page and read the product links off it — and a page assembled in the browser is a miserable thing to scrape. Whatever renders it hands back the page as it looked when it stopped waiting, which is the results sometimes and the empty frame they load into other times. The same search would work and then fail ten minutes later.
JLCPCB index the same catalogue and answer in JSON. No rendering, no scraping, no such failure mode, and about a second per lookup. That is where part-number search goes now, and every hit is read back and its real part number compared before it is offered — searching SRN4018-220M also returns NRSE4018-220M, which is a different part.
https://AJEngineering.github.io/parts-bin-app/ — opens with an example bin loaded, so every tab does something without you typing anything in.
What it actually does:
Knows what is in which drawer. Counts, alert levels, and a part split across two boxes written C1:25 + C6:20 and counted correctly in both.
Fills a part in from its LCSC code. Manufacturer, package, value, description and datasheet. Values come out in the bin's own convention rather than the supplier's running order — a capacitor as 25V 4.7uF X5R ±10%, a resistor as 10kΩ. Parts that have no value in the usual sense are left blank on purpose, rather than having "72" scraped out of "72 MHz".
Checks a BOM against the shelf and tells you how many boards you could build today, then exports for JLCPCB, PCBWay, NextPCB or PCBGOGO with each house's own column headings. Written as real .xlsx, because a CSV opened in Excel turns 0402 into the number 402 and the fab is then looking at a footprint that does not exist.
Twenty-five bench calculators, each drawn as a schematic that redraws as you type. The cable one sizes a run for an allowed drop, reports the voltage actually reaching the load, and asks for the conductor temperature rather than assuming 20 °C — copper gains 0.39 % per degree and a loaded cable is not cold. It gives watts per metre and refuses to print a temperature rise, because that depends on insulation, bundling and ambient. Same reason the AWG table has diameter, section and Ω/m and no current rating: a number I invented there would be believed.
Source is one file with the reasoning written into the comments, and the readme has a ten-line Cloudflare Worker if you would rather the lookups went through your own relay than a public one.
https://github.com/AJEngineering/parts-bin-appBug reports and feature requests are welcome on the issue tracker.