app
Parts Search
Public Made by Adomby adom
One search box across Mouser, DigiKey and JLCPCB: parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time.
← Commit history
Publish 1.1.1
8 files changed
+138−36
CHANGELOG.md+9@@ -1,5 +1,14 @@ # Changelog +## 1.1.1 (2026-08-23)++Quota guard, copy-only Say it phrases, neutral best-source language++- An identical search repeated within 5 minutes is answered from the app's own cache instead of hitting the vendor backends, so a polling AI or a retry loop can never drain the shared daily API quota. The skill now states the rule: one search per question, never a loop.+- Say it phrases are copy-to-clipboard only for now (the stage-into-AI-thread mechanism is parked platform-side); the Try it buttons are gone.+- Recommendation and policy copy now says "preferred vendor, fastest, lowest-cost fulfillment" everywhere; delivery-mechanism specifics removed from every user-facing surface.+- README gained a Dock Bar section with a real capture of the dock-launched page in ah.+ ## 1.1.0 (2026-08-23) Dock Bar ready page with a settings modal, Say it strip, bundled brand fonts, taskbar progress, and AI drive verbs
README.md+21−4@@ -26,8 +26,8 @@ You do not have to drive the page. Ask your AI, using the words **parts search** - "check stock on an ESP32-S3-WROOM-1 with parts search" - "source the parts in my BOM with parts search" -The same phrases sit at the top of the page: click one to copy it, or **Try it** to stage it into-your Parts Search AI thread.+The same phrases sit at the top of the page; click one to copy it. The strip has an X: close it+once and it stays closed (Settings brings it back). ## Quick start @@ -72,6 +72,23 @@ Hover anything and a tooltip says what it does and what will change, written for  +## The Dock Bar card++Parts Search is a card in the Hydrogen Dock Bar, the app-launcher rail on the right edge of the+ah workspace. One click runs the whole path in your workspace container: install the CLI from the+wiki (skipped when it is already there), start the page server with `adom-parts-search serve+--print-url`, health-check the URL it prints, and land the tab on the Parts Search page. The+card's LED is live health read from this app's own `/api/status` every 15 seconds: green when all+three vendor backends answer, yellow when one is degraded or switched off, red when none are+reachable. The page you get is the same page `adom-parts-search show` drives; there is no+separate launcher.++++Not in your rail? Dock settings (the gear at the top of the rail), Add app,+`adom/adom-parts-search`. The full contract and diagnosis table live in the+`adom-parts-search-dock` skill.+ ## Dependencies | Dependency | Required? | Why |@@ -87,8 +104,8 @@ error and the recommendation reasons around it. ## Features - **One interface, three distributors**: parallel queries, side-by-side product photos.-- **Mouser-preferred routing**: 40-minute drone delivery from Mansfield, TX to the Fort Worth- facility plus near-zero shipping is why Mouser wins when it is in stock.+- **Mouser-preferred routing**: Mouser is Adom's preferred vendor (fastest, lowest-cost+ fulfillment), so it wins when it is in stock. - **A recommendation that flips**: DigiKey wins when Mouser is out of stock or long-lead, and a second policy, cheapest in stock, compares unit prices across every vendor that answered. - **Two faces**: a page for browsing, a JSON CLI for scripting and BOMs.
SKILL.md+8−10@@ -1,11 +1,13 @@ --- name: adom-parts-search-description: Unified parts search across Mouser + DigiKey + JLCPCB with Mouser-preferred routing (40-min drone delivery from Mansfield, TX to our Fort Worth facility; near-zero shipping). CLI and Hydrogen webview app. Use when the user asks to source a part, price a component, compare vendors, check stock across distributors, or assemble a BOM. Trigger words: find part, search parts, source component, parts search, component search, where can I get, compare distributors, Mouser or DigiKey, compare prices, BOM sourcing, stock check, parts availability, open parts search, parts search app, parts search UI, parts search settings, parts search health, parts search dock.+description: Unified parts search across Mouser + DigiKey + JLCPCB with a Mouser-preferred best-source recommendation. CLI and Hydrogen webview app. IMPORTANT, vendor searches are quota-limited (shared daily API keys), so never poll or retry searches in a loop. Use when the user asks to source a part, price a component, compare vendors, check stock across distributors, or assemble a BOM. Trigger words: find part, search parts, source component, parts search, component search, where can I get, compare distributors, Mouser or DigiKey, compare prices, BOM sourcing, stock check, parts availability, open parts search, parts search app, parts search UI, parts search settings, parts search health, parts search dock. --- # adom-parts-search -Searches Mouser + DigiKey + JLCPCB in parallel. Rust CLI + Hydrogen webview. Recommends **Mouser by default** because our Fort Worth facility has a 40-minute drone delivery arrangement with Mouser's Mansfield, TX fulfillment center + near-zero shipping cost.+Searches Mouser + DigiKey + JLCPCB in parallel. Rust CLI + Hydrogen webview. Recommends **Mouser by default** (Adom's preferred vendor: fastest, lowest-cost fulfillment).++**Quota rule: NEVER search in a loop.** Every search spends the shared daily vendor API quota (Mouser's free tier is about 1000/day for everyone combined). One search per user question. Never retry a rate-limited vendor on a timer, never poll /search, never re-run a search to refresh a page (the page re-renders from `GET /state` for free). The server answers an identical repeat within 5 minutes from its own cache, but do not lean on that: just do not loop. ## CLI @@ -88,7 +90,7 @@ DIGIKEY total= 1 hits= 1 676ms [ok] JLCPCB total= 0 hits= 0 74ms [ok] RECOMMENDATION → Mouser iCE40HX4K-TQ144 $10.20 stock 42- Mouser has it in stock: 40-minute drone delivery from Mansfield.+ Mouser has it in stock and is the preferred vendor. ``` followed by the full unified JSON (same schema as `search` below) so downstream tooling has structured access.@@ -106,7 +108,7 @@ The `search` output is a unified JSON: "mpn": "iCE40HX4K-TQ144", "unit_price": "$10.20", "stock": 42,- "reason": "Mouser has it in stock: 40-minute drone delivery from Mansfield, near-zero shipping."+ "reason": "Mouser has it in stock and is the preferred vendor: fastest, lowest-cost fulfillment." } } ```@@ -117,7 +119,7 @@ Each `hit` includes `image_url` for the webview: use `show` when the user needs `adom-parts-search show` (or `serve`, or the Dock Bar card) opens a Hydrogen tab titled **"Parts Search"**. The page is the dashboard: a 44px header (brand, current query, vendor health LED, settings cog), a **Say it** strip of phrases the user can copy or stage into this app's AI thread, the search bar, the recommendation banner, and three columns: -- **Mouser column**: preferred under the default policy (40-minute drone, near-zero shipping)+- **Mouser column**: preferred under the default policy - **DigiKey column**: the alternative when Mouser cannot ship - **JLCPCB column**: parts library only (SMT assembly), never recommended for delivery @@ -190,11 +192,7 @@ picks it up. ## Why Mouser is preferred -See the companion skill `adom-parts-search` for the full policy. Short version:--- **40-minute drone delivery** (Mansfield TX → Fort Worth TX, ~15 miles)-- **Near-zero shipping cost** (drone route, Mouser-operated)-- DigiKey wins only when Mouser is out of stock, lead time >14 days, or DigiKey is >30% cheaper on a volume order+Mouser is Adom's preferred vendor (fastest, lowest-cost fulfillment for Adom orders). DigiKey wins only when Mouser is out of stock or long-lead; under the `cheapest` policy the lowest in-stock unit price wins across every vendor. ## Backend URLs
bin/adom-parts-search⋯ 1 unchanged line ⋯
dockbar.json+1−1@@ -36,7 +36,7 @@ ], "on_ready": "navigate_placeholder", "ai": {- "prompt": "The user just opened Parts Search from the dock. It searches Mouser, DigiKey, and JLCPCB in one query and recommends where to buy (Mouser-preferred: 40-minute drone delivery from Mansfield to Fort Worth, near-zero shipping). Run `adom-parts-search health` and, if any vendor LED is not green, offer the fix its _hint names. Then ask which part they want to source and run `adom-parts-search show \"<part>\"` so the results render on the page.",+ "prompt": "The user just opened Parts Search from the dock. It searches Mouser, DigiKey, and JLCPCB in one query and names the best source (Mouser preferred). Run `adom-parts-search health` and, if any vendor LED is not green, offer the fix its _hint names. Then ask which part they want to source and run `adom-parts-search show \"<part>\"` so the results render on the page. Searches spend a shared daily vendor quota: one search per question, never a retry loop.", "thread": "existing", "thread_fallback": "new", "submit": "staged"
package.json+42−3@@ -1,8 +1,8 @@ { "slug": "adom-parts-search",- "version": "1.1.0",+ "version": "1.1.1", "type": "app",- "description": "One search box across Mouser, DigiKey and JLCPCB. Parallel queries, side-by-side product photos, and a Mouser-preferred recommendation (40-minute drone delivery to Fort Worth) that reasons around stock and lead time. Dock Bar ready: serve, health, settings, Say it.",+ "description": "One search box across Mouser, DigiKey and JLCPCB. Parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time. Dock Bar ready: serve, health, settings, Say it.", "dependencies": { "adom/adom-mouser": "*", "adom/adom-digikey": "*",@@ -38,5 +38,44 @@ "SKILL.md", "BUILD-SKILL.md", "CHANGELOG.md"+ ],+ "changelog": "Quota guard, copy-only Say it phrases, neutral best-source language",+ "discovery_triggers": [+ "parts search",+ "find part",+ "source component",+ "source part",+ "compare distributors",+ "compare vendors",+ "Mouser or DigiKey",+ "BOM sourcing",+ "price this part",+ "where can I get",+ "check stock",+ "parts availability",+ "fastest delivery",+ "cheapest part",+ "component search",+ "part lookup",+ "price breaks"+ ],+ "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.",+ "sample_prompts": [+ {+ "label": "source an STM32F103RBT6",+ "prompt": "source an STM32F103RBT6"+ },+ {+ "label": "where can I get an ESP32-S3-WROOM cheape",+ "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"+ },+ {+ "label": "compare Mouser, DigiKey and JLCPCB for a",+ "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"+ },+ {+ "label": "price this BOM across distributors",+ "prompt": "price this BOM across distributors"+ } ]-}+}
page.json+49−8@@ -4,7 +4,7 @@ "slug": "adom-parts-search", "title": "Parts Search", "brief": "One search box across Mouser, DigiKey and JLCPCB: parallel queries, side-by-side product photos, and a Mouser-preferred recommendation (40-minute drone delivery to Fort Worth) that reasons around stock and lead time.",- "version": "1.1.0",+ "version": "1.1.1", "install": { "binary_name": "adom-parts-search", "install_dir": "",@@ -36,10 +36,22 @@ "path": "screenshots/hero.png" }, "sample_prompts": [- "source an STM32F103RBT6",- "where can I get an ESP32-S3-WROOM cheapest and fastest",- "compare Mouser, DigiKey and JLCPCB for an LM555",- "price this BOM across distributors"+ {+ "label": "source an STM32F103RBT6",+ "prompt": "source an STM32F103RBT6"+ },+ {+ "label": "where can I get an ESP32-S3-WROOM cheape",+ "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"+ },+ {+ "label": "compare Mouser, DigiKey and JLCPCB for a",+ "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"+ },+ {+ "label": "price this BOM across distributors",+ "prompt": "price this BOM across distributors"+ } ], "discovery_triggers": [ "parts search",@@ -54,12 +66,41 @@ "where can I get", "check stock", "parts availability",- "fastest delivery"+ "fastest delivery",+ "cheapest part",+ "component search",+ "part lookup",+ "price breaks" ],- "discovery_pitch": "Search Mouser + DigiKey + JLCPCB in parallel from one interface, with product photos and a Mouser-preferred recommendation for 40-min drone delivery from Mansfield to our Fort Worth facility.",+ "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.", "metadata": { "platform": "linux" }, "category": "tools",- "org": "adom"+ "org": "adom",+ "description": "One search box across Mouser, DigiKey and JLCPCB. Parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time. Dock Bar ready: serve, health, settings, Say it.",+ "dependencies": {+ "adom/adom-mouser": "*",+ "adom/adom-digikey": "*",+ "adom/adom-jlcpcb": "*"+ },+ "needs_sudo": false,+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh"+ },+ "files": [+ "bin/**",+ "skills/**",+ "docs/icon.svg",+ "dockbar.json",+ "install.sh",+ "uninstall.sh",+ "package.json",+ "README.md",+ "SKILL.md",+ "BUILD-SKILL.md",+ "CHANGELOG.md"+ ],+ "changelog": "Quota guard, copy-only Say it phrases, neutral best-source language" }
skills/adom-parts-search/SKILL.md+8−10@@ -1,11 +1,13 @@ --- name: adom-parts-search-description: Unified parts search across Mouser + DigiKey + JLCPCB with Mouser-preferred routing (40-min drone delivery from Mansfield, TX to our Fort Worth facility; near-zero shipping). CLI and Hydrogen webview app. Use when the user asks to source a part, price a component, compare vendors, check stock across distributors, or assemble a BOM. Trigger words: find part, search parts, source component, parts search, component search, where can I get, compare distributors, Mouser or DigiKey, compare prices, BOM sourcing, stock check, parts availability, open parts search, parts search app, parts search UI, parts search settings, parts search health, parts search dock.+description: Unified parts search across Mouser + DigiKey + JLCPCB with a Mouser-preferred best-source recommendation. CLI and Hydrogen webview app. IMPORTANT, vendor searches are quota-limited (shared daily API keys), so never poll or retry searches in a loop. Use when the user asks to source a part, price a component, compare vendors, check stock across distributors, or assemble a BOM. Trigger words: find part, search parts, source component, parts search, component search, where can I get, compare distributors, Mouser or DigiKey, compare prices, BOM sourcing, stock check, parts availability, open parts search, parts search app, parts search UI, parts search settings, parts search health, parts search dock. --- # adom-parts-search -Searches Mouser + DigiKey + JLCPCB in parallel. Rust CLI + Hydrogen webview. Recommends **Mouser by default** because our Fort Worth facility has a 40-minute drone delivery arrangement with Mouser's Mansfield, TX fulfillment center + near-zero shipping cost.+Searches Mouser + DigiKey + JLCPCB in parallel. Rust CLI + Hydrogen webview. Recommends **Mouser by default** (Adom's preferred vendor: fastest, lowest-cost fulfillment).++**Quota rule: NEVER search in a loop.** Every search spends the shared daily vendor API quota (Mouser's free tier is about 1000/day for everyone combined). One search per user question. Never retry a rate-limited vendor on a timer, never poll /search, never re-run a search to refresh a page (the page re-renders from `GET /state` for free). The server answers an identical repeat within 5 minutes from its own cache, but do not lean on that: just do not loop. ## CLI @@ -88,7 +90,7 @@ DIGIKEY total= 1 hits= 1 676ms [ok] JLCPCB total= 0 hits= 0 74ms [ok] RECOMMENDATION → Mouser iCE40HX4K-TQ144 $10.20 stock 42- Mouser has it in stock: 40-minute drone delivery from Mansfield.+ Mouser has it in stock and is the preferred vendor. ``` followed by the full unified JSON (same schema as `search` below) so downstream tooling has structured access.@@ -106,7 +108,7 @@ The `search` output is a unified JSON: "mpn": "iCE40HX4K-TQ144", "unit_price": "$10.20", "stock": 42,- "reason": "Mouser has it in stock: 40-minute drone delivery from Mansfield, near-zero shipping."+ "reason": "Mouser has it in stock and is the preferred vendor: fastest, lowest-cost fulfillment." } } ```@@ -117,7 +119,7 @@ Each `hit` includes `image_url` for the webview: use `show` when the user needs `adom-parts-search show` (or `serve`, or the Dock Bar card) opens a Hydrogen tab titled **"Parts Search"**. The page is the dashboard: a 44px header (brand, current query, vendor health LED, settings cog), a **Say it** strip of phrases the user can copy or stage into this app's AI thread, the search bar, the recommendation banner, and three columns: -- **Mouser column**: preferred under the default policy (40-minute drone, near-zero shipping)+- **Mouser column**: preferred under the default policy - **DigiKey column**: the alternative when Mouser cannot ship - **JLCPCB column**: parts library only (SMT assembly), never recommended for delivery @@ -190,11 +192,7 @@ picks it up. ## Why Mouser is preferred -See the companion skill `adom-parts-search` for the full policy. Short version:--- **40-minute drone delivery** (Mansfield TX → Fort Worth TX, ~15 miles)-- **Near-zero shipping cost** (drone route, Mouser-operated)-- DigiKey wins only when Mouser is out of stock, lead time >14 days, or DigiKey is >30% cheaper on a volume order+Mouser is Adom's preferred vendor (fastest, lowest-cost fulfillment for Adom orders). DigiKey wins only when Mouser is out of stock or long-lead; under the `cheapest` policy the lowest in-stock unit price wins across every vendor. ## Backend URLs