← Commit history
BUILD-SKILL.md+3−3
@@ -44,10 +44,10 @@ A release syncs five places to the same version X.Y.Z:    curl -s https://jlcpcb-<slug>.adom.cloud/health | jq '.version'   # → "X.Y.Z"    ``` -7. **Verify on a fresh user container** (optional, but catches gallia regressions):+7. **Verify on a fresh user container** (optional, but catches install regressions):    ```bash    # on a fresh container:-   node ~/gallia/install.mjs                 # Tier A block fetches from wiki+   adompkg install --refresh                 # Tier A block fetches from the registry    adom-jlcpcb --version                     # → "adom-jlcpcb X.Y.Z"    ``` @@ -57,7 +57,7 @@ A release syncs five places to the same version X.Y.Z: - [ ] Wiki page at `apps/adom-jlcpcb` renders the new `install_hint` one-liner - [ ] User has seen a working screenshot of the webview - [ ] No console errors via `GET /console`-- [ ] `gallia/install.mjs` Tier A block still works (pulls + installs the new version)+- [ ] `adompkg install --refresh` still pulls + installs the new version (Tier A) - [ ] **Brand audit — in-app icons are monochrome white.** Run:       ```       grep -nE 'fill="#00b8b0"|stroke="#00b8b0"|color: var\(--accent\)' src/app/*.html src/app/*.svg 2>/dev/null
README.md+64−61
@@ -2,94 +2,97 @@  **Know it's in the JLCPCB library — Basic or Extended — before you commit a board to fab.** -`adom-jlcpcb` is the single-vendor JLCPCB / LCSC tool for the Adom ecosystem: one Rust binary with-three faces — a JSON **CLI**, a first-class **Hydrogen webview app**, and the shared **backend-service** that powers `service-jlcpcb` and feeds [`adom-parts-search`](/adom/adom-parts-search).+![Is it in the JLCPCB library? Check Basic vs Extended, LCSC stock and assembly pricing before you fab](/blob/app/adom-jlcpcb/screenshots/hero.png) -## Install+`adom-jlcpcb` is the single-vendor JLCPCB / LCSC tool for the Adom ecosystem — one Rust binary,+three faces: -```bash-adompkg install adom-jlcpcb-```--## Quick start+- **CLI** — `adom-jlcpcb search | part | health` for quick JSON-returning shell use and BOMs.+- **Hydrogen app** — `adom-jlcpcb app` opens a searchable UI as a first-class Hydrogen tab.+- **Backend service** — `adom-jlcpcb serve` runs the shared proxy (port 8779) that powers the+  `service-jlcpcb` container and feeds [`adom-parts-search`](/adom/adom-parts-search).  ```bash-# One-shot search+adompkg install adom-jlcpcb adom-jlcpcb search "0402 10k resistor"--# Interactive UI as a Hydrogen tab-adom-jlcpcb app--# One exact LCSC code-adom-jlcpcb part "C7950" ``` -## Screenshots+## Basic vs Extended — the question that costs money -### Basic vs Extended — the question that costs money-On a JLCPCB assembly run, **Basic** parts are pre-loaded on the line (no fee); **Extended** parts-add a per-part feeder charge. Every card shows the tier, LCSC code, stock and price, so you design-around what's actually cheap to place.+On a JLCPCB assembly run, **Basic** parts are pre-loaded on the line (no fee), while **Extended**+parts add a per-part feeder setup charge. Picking a Basic equivalent up front can shave real money+off a build. `adom-jlcpcb` shows the library tier on every card, alongside LCSC code, stock and+price, so you design around what's actually cheap to place. -![adom-jlcpcb results for an 0402 10k resistor and an LM358 op-amp, flagged as Basic parts with LCSC codes and assembly pricing](/blob/app/adom-jlcpcb/screenshots/results-passives.png)+![adom-jlcpcb results for an 0402 10k resistor and an LM358 op-amp, all flagged as Basic parts with LCSC codes and assembly pricing](/blob/app/adom-jlcpcb/screenshots/results-passives.png) -### Catch the Extended part before fab does-Search your MCU or regulator and see at a glance whether your first pick is Basic — and what the-Basic alternative is. Here a popular STM32 is Basic while a drop-in GD32 is Extended.+## Catch the Extended part before fab does -![adom-jlcpcb results comparing an STM32F103C8T6 Basic part with a GD32 Extended alternative and a Basic MLCC, with LCSC stock and pricing](/blob/app/adom-jlcpcb/screenshots/results-mcu.png)+Search your MCU or regulator and you'll see at a glance whether your first pick is Basic, and what+the Basic alternative is. Here a popular STM32 is Basic, while a drop-in GD32 equivalent is+Extended — exactly the trade-off you want to make *before* the board goes out. -### Scriptable from the first keystroke-`search`/`part`/`health` return JSON — pipe to `jq`, a BOM, or a board-cost estimator.+![adom-jlcpcb results comparing an STM32F103C8T6 Basic part with a GD32 Extended alternative and a Basic MLCC, with LCSC stock and pricing](/blob/app/adom-jlcpcb/screenshots/results-mcu.png) -![Terminal showing adom-jlcpcb search piped to jq for the first component including its Basic library tier, then a health check](/blob/app/adom-jlcpcb/screenshots/cli.png)+## Scriptable from the first keystroke -## Dependencies+`search` returns JSON; `part` fetches one LCSC code; `health` checks the backend. Pipe it into+`jq`, a BOM, or a board-cost estimator. -| Dependency | Required? | Why |-|---|---|---|-| `service-jlcpcb` backend (`adom-jlcpcb serve`) | Recommended | LCSC resolve + cache; the CLI auto-detects it |+![Terminal showing adom-jlcpcb search piped to jq for the first component including its Basic library tier, then a health check](/blob/app/adom-jlcpcb/screenshots/cli.png) -## Features+```bash+adom-jlcpcb search "LM358" | jq '.components[0]'+adom-jlcpcb part "C7950"+adom-jlcpcb health+``` -- **Three faces** — CLI verbs, a Hydrogen webview app, and the shared backend service.-- **Library tier on every card** — Basic vs Extended, so you avoid surprise feeder-setup fees.-- **LCSC codes + assembly pricing** — what JLCPCB will actually charge to place the part.-- **Assembly-first** — in [`adom-parts-search`](/adom/adom-parts-search) it's the library column, not a buy-now vendor.+## Install -## Talk to the AI+```bash+adompkg install adom-jlcpcb+``` -- "is the LM358 a JLCPCB basic part?"-- "find a basic 0402 10k resistor on JLCPCB"-- "is my STM32 a basic or extended part on JLCPCB"-- "what's the LCSC code for an LM358"+## How it works -## Skills+```+  any container                          service-jlcpcb+  $ adom-jlcpcb search "LM358"  ──POST──▶  adom-jlcpcb serve  (:8779)+  $ adom-jlcpcb app                        LCSC resolve + cache+    (Hydrogen webview tab)+                                                 │+                                                 ▼+                                          JLCPCB / LCSC parts API+``` -| Skill | Purpose |-|---|---|-| `adom-jlcpcb` | When/how Claude drives the search — Basic/Extended, LCSC codes, reading the cards |-| `adom-jlcpcb-build` | Release workflow (build, publish to the wiki) |+JLCPCB is an assembly-first workflow, so in [`adom-parts-search`](/adom/adom-parts-search) it shows+as a library column rather than competing on the buy-now recommendation — but for "can JLCPCB+place this for me, and is it Basic?" it's the fastest answer in the workspace. -## CLI reference+## See also -| Command | What it does |-|---|---|-| `adom-jlcpcb search "<q>"` | Search JLCPCB / LCSC → JSON |-| `adom-jlcpcb part "<lcsc>"` | Fetch one LCSC code → JSON |-| `adom-jlcpcb app` | Open the searchable Hydrogen tab |-| `adom-jlcpcb health` | Check the backend + LCSC reachability |-| `adom-jlcpcb serve` | Run the shared backend proxy (port 8779) |+- [`adom-parts-search`](/adom/adom-parts-search) — searches Mouser, DigiKey and JLCPCB at once and picks the best buy.  ## Open source — make it yours, then give it back -This app is **open source under the MIT license**. Fork it, improve it, then send it back: `adompkg-publish` your own version, or open a pull request against this page so the change lands for everyone.+This app is **open source under the MIT license**. Fork it, rewrite it, rename it, bend it to your+own workflow — and when you've made it better, **send your changes back to the Adom Wiki so the+whole community benefits**. Every wiki page is a git repo with a package registry on top, so+contributing back is first-class — improvements that land here ship to every Adom user who installs+the app.++```bash+adompkg install adom-jlcpcb      # install it+#   …edit the source to taste…+adompkg publish             # publish your own fork, or+#   open a pull request against this page so the change lands for everyone+``` -> **One caveat — the search backend is an Adom service.** Lookups run against Adom's hosted JLCPCB /-> LCSC backend (`service-jlcpcb`), which uses Adom's API credentials and counts against Adom's quota-> — an Adom service, **subject to change**. Everything client-side is yours to fork and republish.+> **One caveat — the search backend is an Adom service.** The actual lookups run against+> Adom's hosted JLCPCB / LCSC backend (`service-jlcpcb`), which uses **Adom's vendor API credentials and counts against Adom's quota**. That+> hosted backend is an Adom service and is **subject to change** — rate limits, endpoints, and+> availability can move at any time. Everything client-side (the CLI, the webview, the rendering+> and recommendation logic) is yours to fork and republish; the cloud API quota is not.  ## License 
SKILL.md+1−1
@@ -188,7 +188,7 @@ adom-jlcpcb search "LM317" adom-jlcpcb app        # UI reads $JLCPCB_API automatically ``` -Gallia users don't need to set `JLCPCB_API` explicitly — `adom-jlcpcb` is a Tier A app (see `adom-app-model`), so it's installed by every `gallia/install.mjs` run from the wiki binary. The CLI autodetects a local `adom-jlcpcb serve` on 127.0.0.1:8774 and falls back to calling JLCPCB directly if `JLCPCB_API_KEY_UNUSED_placeholder` is set locally.+Users don't need to set `JLCPCB_API` explicitly — `adom-jlcpcb` is a Tier A app (see `adom-app-model`), so it's installed by every `adompkg install` run from the registry. The CLI autodetects a local `adom-jlcpcb serve` on 127.0.0.1:8774 and falls back to calling JLCPCB directly if `JLCPCB_API_KEY_UNUSED_placeholder` is set locally.  ### Local-only (quick testing) 
bin/._adom-jlcpcbadded
⋯ 1 unchanged line ⋯
bin/adom-jlcpcbadded
⋯ 1 unchanged line ⋯
package.json+5−2
@@ -1,6 +1,6 @@ {   "slug": "adom-jlcpcb",-  "version": "1.0.1",+  "version": "1.0.2",   "type": "app",   "description": "Check the JLCPCB / LCSC parts library before you fab \u2014 Basic vs Extended tier, LCSC stock and assembly pricing, so you avoid surprise feeder-setup fees. CLI, a Hydrogen app, and a shared backend.",   "dependencies": {},@@ -32,5 +32,8 @@     "SKILL.md",     "BUILD-SKILL.md",     "screenshots/**"-  ]+  ],+  "hero": {+    "path": "screenshots/hero.png"+  } }\ No newline at end of file
page.json+26−6
@@ -3,8 +3,8 @@   "type": "app",   "slug": "adom-jlcpcb",   "title": "JLCPCB Parts Library",-  "brief": "Check the JLCPCB / LCSC parts library before you fab \u2014 Basic vs Extended tier, LCSC stock and assembly pricing, so you avoid surprise feeder-setup fees. CLI, a Hydrogen app, and a shared backend.",-  "version": "1.0.1",+  "brief": "Check the JLCPCB / LCSC parts library before you fab — Basic vs Extended tier, LCSC stock and assembly pricing, so you avoid surprise feeder-setup fees. CLI, a Hydrogen app, and a shared backend.",+  "version": "1.0.2",   "install": {     "binary_name": "adom-jlcpcb",     "install_dir": "",@@ -32,8 +32,8 @@     "public": true   },   "hero": {-    "path": "screenshots/hero.png",-    "type": "image"+    "type": "image",+    "path": "screenshots/hero.png"   },   "sample_prompts": [     "is the LM358 a JLCPCB basic part?",@@ -53,8 +53,28 @@     "feeder fee",     "pcba parts"   ],-  "discovery_pitch": "Check the JLCPCB / LCSC parts library for Basic vs Extended tier, stock and assembly pricing before you commit a board to fab \u2014 CLI + Hydrogen webview app + shared backend service.",+  "discovery_pitch": "Check the JLCPCB / LCSC parts library for Basic vs Extended tier, stock and assembly pricing before you commit a board to fab — CLI + Hydrogen webview app + shared backend service.",   "metadata": {     "platform": "linux"-  }+  },+  "description": "Check the JLCPCB / LCSC parts library before you fab — Basic vs Extended tier, LCSC stock and assembly pricing, so you avoid surprise feeder-setup fees. CLI, a Hydrogen app, and a shared backend.",+  "dependencies": {},+  "needs_sudo": false,+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "files": [+    "bin/**",+    "skills/**",+    "install.sh",+    "uninstall.sh",+    "package.json",+    "page.json",+    "README.md",+    "SKILL.md",+    "BUILD-SKILL.md",+    "screenshots/**"+  ],+  "org": "adom" }\ No newline at end of file
screenshots/._cli.pngadded
⋯ 1 unchanged line ⋯
screenshots/._hero.pngadded
⋯ 1 unchanged line ⋯
screenshots/._results-mcu.pngadded
⋯ 1 unchanged line ⋯
screenshots/._results-passives.pngadded
⋯ 1 unchanged line ⋯
screenshots/hero.png
⋯ 1 unchanged line ⋯
skills/._adom-jlcpcbadded
⋯ 1 unchanged line ⋯
skills/._adom-jlcpcb-buildadded
⋯ 1 unchanged line ⋯
skills/adom-jlcpcb-build/._SKILL.mdadded
⋯ 1 unchanged line ⋯
skills/adom-jlcpcb-build/SKILL.md+3−3
@@ -44,10 +44,10 @@ A release syncs five places to the same version X.Y.Z:    curl -s https://jlcpcb-<slug>.adom.cloud/health | jq '.version'   # → "X.Y.Z"    ``` -7. **Verify on a fresh user container** (optional, but catches gallia regressions):+7. **Verify on a fresh user container** (optional, but catches install regressions):    ```bash    # on a fresh container:-   node ~/gallia/install.mjs                 # Tier A block fetches from wiki+   adompkg install --refresh                 # Tier A block fetches from the registry    adom-jlcpcb --version                     # → "adom-jlcpcb X.Y.Z"    ``` @@ -57,7 +57,7 @@ A release syncs five places to the same version X.Y.Z: - [ ] Wiki page at `apps/adom-jlcpcb` renders the new `install_hint` one-liner - [ ] User has seen a working screenshot of the webview - [ ] No console errors via `GET /console`-- [ ] `gallia/install.mjs` Tier A block still works (pulls + installs the new version)+- [ ] `adompkg install --refresh` still pulls + installs the new version (Tier A) - [ ] **Brand audit — in-app icons are monochrome white.** Run:       ```       grep -nE 'fill="#00b8b0"|stroke="#00b8b0"|color: var\(--accent\)' src/app/*.html src/app/*.svg 2>/dev/null
skills/adom-jlcpcb/._SKILL.mdadded
⋯ 1 unchanged line ⋯
skills/adom-jlcpcb/SKILL.md+1−1
@@ -188,7 +188,7 @@ adom-jlcpcb search "LM317" adom-jlcpcb app        # UI reads $JLCPCB_API automatically ``` -Gallia users don't need to set `JLCPCB_API` explicitly — `adom-jlcpcb` is a Tier A app (see `adom-app-model`), so it's installed by every `gallia/install.mjs` run from the wiki binary. The CLI autodetects a local `adom-jlcpcb serve` on 127.0.0.1:8774 and falls back to calling JLCPCB directly if `JLCPCB_API_KEY_UNUSED_placeholder` is set locally.+Users don't need to set `JLCPCB_API` explicitly — `adom-jlcpcb` is a Tier A app (see `adom-app-model`), so it's installed by every `adompkg install` run from the registry. The CLI autodetects a local `adom-jlcpcb serve` on 127.0.0.1:8774 and falls back to calling JLCPCB directly if `JLCPCB_API_KEY_UNUSED_placeholder` is set locally.  ### Local-only (quick testing)