Find, validate, and compare home renovation products (fixtures, hardware, appliances, finishes) with confirmed working image URLs and product links, plus community review and longevity research per candidate. Handles retailer bot-protection by routing image sourcing through accessible CDNs. Runs a structured discovery interview first to narrow requirements before searching. Output is a comparison table ready to paste into a wiki page or shareable email. ALWAYS trigger this skill when the user...
Scanned 9/20/2026
Install to Claude Code
npx -y skills add tstapler/dotfiles --skill product-selection --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Product Selection?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tstapler-product-selection)More formats (shields.io, HTML) on the badges page.
---
name: product-selection
description: "Find, validate, and compare home renovation products (fixtures, hardware, appliances, finishes) with confirmed working image URLs and product links, plus community review and longevity research per candidate. Handles retailer bot-protection by routing image sourcing through accessible CDNs. Runs a structured discovery interview first to narrow requirements before searching. Output is a comparison table ready to paste into a wiki page or shareable email. ALWAYS trigger this skill when the user asks to find, research, compare, or select any physical product for the 711 N 60th remodel or any home improvement project — even if they don't say 'product selection' explicitly."
---
# product-selection — Home Renovation Product Research & Validation
## What This Skill Does
Given a product category and requirements, this skill:
1. **Interviews** the user to precisely define requirements before searching (avoids wasted research)
2. **Searches** for 2–4 options across price/quality tiers
3. **Digs into reviews and longevity** for each candidate — not just spec/price
4. **Sources** working image URLs from accessible CDNs (not guessed — validated)
5. **Validates** all product page links return HTTP 200 before including them
6. **Formats** a comparison table for wiki page or stakeholder email
7. **Records** the selection decision back to the relevant wiki page
## Stages & Gates
This skill runs as seven discrete stages (0-6 below), each with an entry gate (what must be true to start) and an exit gate (what must be true to advance). Don't skip a gate to save time — a failed gate is a normal, expected stopping point, not a problem to route around.
**Track progress with the task tool (if available).** At the start of Phase 0, create one task per stage if a task tool is available — Claude Code: `TaskCreate`/`TaskUpdate`; Gemini CLI/Antigravity: `write_todos`. Mark each stage `in_progress` when it starts and `completed` when its exit gate passes. If no task tool is available, skip this — it's a convenience for resuming, not a requirement.
---
## User Shopping Preferences
**Preferred retailers — always prioritize links from these when available:**
- **Lowe's** (lowes.com) — first preference
- **Amazon** (amazon.com) — second preference
When candidates are sold at Lowe's or Amazon, lead with those links in the comparison output. If a product is not available at either, note that explicitly and fall back to other retailers. Both domains block automated WebFetch (see Phase 3 domain table) — use their URLs as human-clickable links only, never for image sourcing or URL validation.
---
## Phase 0 — Discovery Interview
**Entry gate**: none — this is the first stage. Mark its task `in_progress` if a task tool is available.
**Run this phase before any searching.** Use `AskUserQuestion` for each question. Do not batch — ask one at a time, wait for the answer, then adapt follow-up questions based on responses. Do not propose solutions during the interview.
**HARD GATE: Do not run any WebSearch or WebFetch until Phase 0 is complete.**
### Question 1 — Product Category
```
header: "Product type"
question: "What type of product are you selecting?"
options:
- "Plumbing fixture (faucet, sink, shower, toilet)"
- "Door/cabinet hardware (knobs, levers, pulls, hinges)"
- "Appliance (range, refrigerator, hood, dishwasher)"
- "Finish material (tile, countertop, flooring, wallcovering)"
```
*(If "Other" selected, ask for a one-line description before proceeding)*
### Question 2 — Finish / Material Constraint
```
header: "Finish"
question: "What finish or material is required?"
options:
- "Must match an existing item — I'll specify (click Other)"
- "Polished chrome"
- "Brushed/satin nickel"
- "Matte black"
```
**Key follow-up**: If "must match an existing item" — ask which item and its exact model/SKU. Finish match is the #1 cause of selection mistakes.
### Question 3 — Functional Constraint
```
header: "Function"
question: "Are there any hard functional requirements?"
options:
- "No hard constraints beyond category and finish"
- "Physical constraint (hole spacing, size, rough-in) — I'll specify"
- "Occupant constraint (e.g., child/pet-proof, ADA, elderly user)"
- "Code or permit requirement — I'll specify"
```
**Examples of occupant constraints**: Lever handles can be opened by dogs or young children — knobs required. ADA requires lever handles (contradiction — must flag if both apply).
### Question 4 — Budget
```
header: "Budget tier"
question: "What price tier should the options span?"
options:
- "Budget + mid-range (show both, recommend mid)"
- "Mid-range + luxury (show both, recommend mid)"
- "Full range — budget through luxury"
- "I have a specific per-unit budget (click Other)"
```
**For hardware**: always ask for quantity to compute total cost — $150/door sounds reasonable; $900 for 6 doors may change the decision.
### Question 5 — Visual Coordination
```
header: "Coordination"
question: "What existing items does this need to visually coordinate with?"
options:
- "Other items in the same room — I'll list them (click Other)"
- "An existing product already specified for this project"
- "No specific coordination requirement"
- "I'll describe the overall design direction (click Other)"
```
Record all coordination constraints — they narrow options significantly and prevent mismatches.
### Question 6 — Output Format
```
header: "Output use"
question: "How will you use the comparison?"
options:
- "Email to stakeholder for approval (need inline images + links)"
- "Update the project wiki page"
- "Both — email and wiki"
- "Just for my own reference"
```
This determines whether to run full image validation (email requires confirmed image URLs) or a lighter wiki-only format.
### Exit gate — Pre-search Checklist
Before proceeding, confirm:
- [ ] Product category is specific (not "faucet" — "single-hole bar faucet, gooseneck, 1.8 GPM")
- [ ] Finish is locked and any "must match" item is identified by model number
- [ ] Functional constraints are captured (especially occupant constraints like pet/child)
- [ ] Quantity is known if this is hardware (knobs, hinges, pulls, etc.)
- [ ] Visual coordination notes are recorded
Do not proceed to Phase 1 until every box is checked — ask a follow-up question instead of guessing. Mark Phase 0's task `completed` if a task tool is available.
---
## Phase 1 — Search Strategy
**Entry gate**: Phase 0's checklist passed. Mark this stage's task `in_progress` if a task tool is available.
Run 2–3 parallel WebSearch calls based on requirements gathered in Phase 0. Follow the `meta-research-workflow` skill's search discipline (rate limits, search caps, full URL/title/date documentation for every result).
### Query Templates
```
"[specific product name] [finish] site:lowes.com" ← preferred retailer
"[specific product name] [finish] site:amazon.com" ← preferred retailer
"[specific product name] [finish] [brand if constrained] comparison options"
"[specific product name] [finish] site:[accessible-brand].com"
"[specific product name] [finish] [brand] site:pinterest.com" ← for image sourcing
```
### Identify Candidates
Find 2–4 candidates across price tiers. For each, record:
- Product name + model number/SKU (both manufacturer and retailer SKUs if different)
- Brand
- Approximate price (note source and date — prices drift)
- Retailer URLs (even blocked domains — they're for human-clickable links, not WebFetch)
- Any confirmed constraints it satisfies or violates
**Exit gate**: 2-4 candidates identified across at least 2 price tiers, each with the fields above recorded. Mark Phase 1's task `completed` if a task tool is available.
---
## Phase 2 — Review & Longevity Research
**Entry gate**: Phase 1's candidate list exists. Mark this stage's task `in_progress` if a task tool is available.
For **each** candidate, apply the `review-longevity-research` skill: search community/long-term-use sources, weigh sponsored vs. organic signal, and check longevity proxies (warranty, repairability, construction). Produce the skill's `### Review & Longevity — <Product Name>` block for every candidate.
**Exit gate**: every candidate has a Review & Longevity block — either real findings, or an explicit "no long-term data available" note if the product is too new. Never skip a candidate silently. Mark this stage's task `completed` if a task tool is available.
---
## Phase 3 — Image Sourcing
**Entry gate**: Phase 2's Review & Longevity blocks exist for every candidate. Mark this stage's task `in_progress` if a task tool is available.
Use tools in this order when a domain blocks WebFetch: `WebFetch` first, then `mcp__stapler-mcp__read_website` on 403/429 (often bypasses bot protection), then Chrome MCP navigate + `get_page_text` as a last resort for JS-rendered or login-walled pages. Never give up on a preferred retailer (Lowe's, Amazon) without trying all three. Source images in priority order: official brand CDN → Pinterest pins → other accessible third-party CDNs. Never fabricate or guess an image URL — if none is found, note "image available at [brand URL] — opens in browser."
See [Image Sourcing & Domain Routing](references/image-sourcing.md) for the full domain-by-domain routing table (which retailers block WebFetch and their fallbacks), the accessible-CDN list, and the brand-specific image-sourcing patterns.
**Exit gate**: every candidate has either a sourced image or an explicit "opens in browser" note — never a silently missing image. Mark this stage's task `completed` if a task tool is available.
---
## Phase 4 — URL Validation
**Entry gate**: Phase 3's image sourcing pass is done for every candidate. Mark this stage's task `in_progress` if a task tool is available.
**Validate every URL before including it — no exceptions.** For each image URL and product page URL, try the same three-tool fallback chain from Phase 3 until one succeeds. See [Image Sourcing & Domain Routing](references/image-sourcing.md#image-url-validation) for the exact prompts and how to interpret ambiguous results (e.g., a binary file under 3KB is likely a placeholder, not a real image).
### Validation Status Tags
Use these in the final output:
- `✓ confirmed` — any fetch tool returned 200 + matching content
- `✓ image confirmed` — image URL returns JPEG/PNG > 5KB via any tool
- `⚠ browser only` — all three fetch methods blocked; product link confirmed accessible in user's browser
- `❌ broken` — 404 confirmed across all tools with no working alternative found
**Exit gate**: every product page URL and image URL carries one of the four status tags above — nothing left unvalidated. Mark this stage's task `completed` if a task tool is available.
---
## Phase 5 — Format Output
**Entry gate**: Phase 4's validation pass is complete for every candidate. Mark this stage's task `in_progress` if a task tool is available.
### Comparison Table (wiki format)
```markdown
## [Category] Options
**Requirements**: [finish] · [functional constraint] · [coordination note]
| Option | Brand/Model | Price | Image | Link | Status |
|--------|-------------|-------|-------|------|--------|
| ⭐ A (Recommended) | Brand Model SKU | ~$X | [confirmed image URL] | [product link] | ✓ confirmed |
| B | ... | ~$X | [confirmed image URL] | [product link] | ✓ confirmed |
| C | ... | ~$X | N/A | [product link] | ⚠ browser only |
**Recommendation**: [1–2 sentences — finish match, value, design rationale, and any review/longevity signal that influenced the pick]
**Total cost** (if hardware): [unit price × quantity] = [range]
<!-- Append each candidate's Review & Longevity block from Phase 2 below the table -->
```
### Email Format (stakeholder-shareable)
When output is for email, use inline images with Markdown:
```markdown
### ⭐ Option A — [Brand Model] · ~$[price] · RECOMMENDED

👉 [View on [Site]](https://product-page-url)
| | |
|---|---|
| **Brand** | ... |
| **Model** | ... |
| **Finish match** | [specific note] |
| **Price** | ~$X |
```
**Email format rules:**
- Every option must have either a confirmed inline image OR an explicit note explaining why the image isn't embeddable
- All product links must be validated (200 or noted as "browser only")
- Total cost at bottom if hardware
- Summary table of recommendations at the end
**Exit gate**: the comparison table (and email format, if requested) is complete, every option has a status tag, and the Review & Longevity blocks are attached. Mark this stage's task `completed` if a task tool is available. Present the comparison to the user and wait for a selection before Phase 6.
---
## Phase 6 — Record Decision
**Entry gate**: the user has selected an option from Phase 5's comparison. Mark this stage's task `in_progress` if a task tool is available.
Apply the `knowledge-synthesis` skill's **Decision Write-Back Pattern** to record the choice on the relevant wiki page in `logseq/pages/`. Product-selection specifics on top of the generic pattern:
1. **Update the options table** to mark the selected item
2. **Move the item from "Outstanding Items — Owner's Side"** to "Decisions Made / Locked"
3. **Status progression**: `[ ] Pending approval` → `[x] Approved` → `[ ] Ordered`
4. **Link the chosen option** to its Product & Retailer Zettel (per the Decision Write-Back Pattern) if one was created — carry over the Review & Longevity findings from Phase 2 onto that page rather than losing them once the decision is made
```markdown
## Decisions Made / Locked
- **[Category]**: [[Brand Model SKU]] — [finish] — [rationale, e.g., "matches Levi faucet finish, same brand, stronger long-term reliability record"] — [x] Approved / [ ] Ordered
```
**Exit gate**: the wiki page reflects the decision (moved out of outstanding, status set, linked to the product zettel if one exists). Mark this stage's task `completed` if a task tool is available — this is the last stage.
---
## Known Product Category Sources
See [Known Product Category Sources](references/product-sources.md) for the brand-by-brand list (plumbing, door/cabinet hardware, appliances, tile/stone) with website and image-access notes — consult during Phase 1 search and Phase 3 image sourcing.
---
## Common Failure Modes & Recovery
| Failure | Cause | Fix |
|---|---|---|
| Image URL returns 403/404 | Retailer CDN blocking or stale URL | Try Pinterest pin for same product |
| Image returns < 3KB | Placeholder/icon served instead | URL is wrong; search for correct CDN path |
| Product page returns 404 | Retailer restructured URLs | Re-search `site:[domain] "[product name]"` |
| No image found on any source | Product only sold on blocked retailer | Note "images at [URL] — opens in browser"; provide description instead |
| Pinterest pin shows wrong finish | Multiple finishes share pins | Search for finish-specific pin (e.g., add "chrome" or "polished" to search) |
| Price seems wrong | Prices drift; older search results | Cross-reference 2 sources; note "approximate" and date |
---
## Quality Checklist Before Delivering Output
- [ ] All image URLs return JPEG/PNG > 5KB (or explicitly noted as unavailable)
- [ ] All product page links return 200 or noted as "browser only"
- [ ] Finish described exactly matches requirement (e.g., "polished chrome" ≠ "chrome" ≠ "brushed chrome")
- [ ] Model numbers confirmed against ≥ 2 sources
- [ ] Prices marked "approximate" with basis noted
- [ ] Total cost calculated if hardware (unit × quantity)
- [ ] At least 2 price tiers represented
- [ ] Recommendation includes finish-match and design rationale
- [ ] Functional constraints satisfied (checked against Phase 0 answers)
- [ ] Occupant constraints noted (dog-proof, ADA, child-safe, etc.)
- [ ] Every candidate has a Review & Longevity block (Phase 2) — real findings or an explicit "no long-term data" note
- [ ] Every non-obvious claim (price, review, longevity, failure mode) has a source URL per the `meta-research-workflow` skill
---
## Related Skills
- [[design-review]] — Verify selected products against CD set specs before ordering
- [[knowledge-synthesis]] — Synthesize product research into permanent wiki notes; supplies the Product & Retailer Zettel Template (Phase 2/3) and Decision Write-Back Pattern (Phase 6)
- [[review-longevity-research]] — Phase 2's method for community-review and longevity digging
- [[meta-research-workflow]] — Search methodology and sourcing discipline used throughout
- [[handy:plan]] — Plan installation of selected products
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!