| 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:
- Interviews the user to precisely define requirements before searching (avoids wasted research)
- Searches for 2โ4 options across price/quality tiers
- Digs into reviews and longevity for each candidate โ not just spec/price
- Sources working image URLs from accessible CDNs (not guessed โ validated)
- Validates all product page links return HTTP 200 before including them
- Formats a comparison table for wiki page or stakeholder email
- 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:
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.
Fetch Tool Hierarchy
Use tools in this order when a domain blocks WebFetch:
WebFetch โ try first; fast and sufficient for accessible domains
mcp__read-website-fast__read_website โ try when WebFetch returns 403/429; often bypasses bot protection that blocks WebFetch. Save to /tmp if page is large.
- Chrome MCP (
mcp__claude-in-chrome__navigate + mcp__claude-in-chrome__get_page_text) โ last resort for pages that require JavaScript rendering or are behind login walls. Use when read-website-fast also fails. Load tools via ToolSearch before calling.
Never give up on a preferred retailer (Lowe's, Amazon) without trying all three tools.
Critical Domain Routing
Try mcp__read-website-fast__read_website before giving up โ may bypass bot protection:
| Domain | WebFetch result | Fallback |
|---|
| lowes.com | 403 Forbidden โ preferred human link | try read-website-fast, then Chrome MCP |
| amazon.com | 500 / robot challenge โ preferred human link | try read-website-fast, then Chrome MCP |
| homedepot.com | 403 Forbidden | try read-website-fast |
| wayfair.com | 429 / 403 | try read-website-fast |
| walmart.com | Robot challenge | try read-website-fast |
| signaturehardware.com | 403 Forbidden | try read-website-fast |
| ferguson.com | Akamai bot | try read-website-fast |
| fergusonhome.com | 403 Forbidden | try read-website-fast |
| ebay.com | Timeout | try read-website-fast |
| faucet.com | 404 (stale URL patterns) | re-search for updated URL |
| faucetdirect.com | 404 (stale URL patterns) | re-search for updated URL |
| build.com โ fergusonhome.com | 403 Forbidden | try read-website-fast |
Only mark a domain โ browser only after all three fetch methods have failed.
ACCESSIBLE โ Use for images and validation:
| Domain | Notes |
|---|
| i.pinimg.com | Pinterest CDN โ most reliable fallback for any product |
| emtek.com | Full pages + CDN images |
| baldwinhardware.com | Product pages; images at images.baldwinhardware.com |
| images.baldwinhardware.com | Scene7 CDN โ use ?fmt=jpeg&wid=600 |
| kohler.com | Accessible |
| deltafaucet.com | Accessible |
| moen.com | Accessible |
| schlage.com | Accessible |
| kwikset.com | Accessible |
| houseofrohl.com | Official Rohl site โ accessible; images on BigCommerce CDN |
| cdn11.bigcommerce.com | BigCommerce CDN โ usually accessible |
| Pinterest pin pages (pinterest.com/pin/...) | Fetch og:image to get pinimg.com URL |
Image Sourcing Priority Order
For each candidate product:
1. Official brand website CDN (best quality, most stable)
- Fetch the brand's own product page (only if domain is on ACCESSIBLE list)
- Extract og:image or main img src
- Emtek CDN pattern:
https://www.emtek.com/media/salsify/images/[size]/[hash]-[date]-[ProductName]_EM_KO.jpg
- Baldwin CDN:
https://images.baldwinhardware.com/is/image/Baldwin/[sku]?fmt=jpeg&wid=600
2. Pinterest pins (reliable fallback for any brand)
- Search:
site:pinterest.com "[exact product name] [finish]"
- Prefer pins with specific product name AND finish in the title (e.g., "amberley-singlehole-bar-faucet-chrome-in-2024")
- UK/regional Pinterest pins often have cleaner titles: try
uk.pinterest.com
- Fetch the pin page:
WebFetch(url, "Find the og:image meta tag content URL. Return the full pinimg.com URL and confirm the product name and finish shown.")
- Validate the returned i.pinimg.com URL
3. Accessible third-party CDNs
- houseofrohl.com products use BigCommerce CDN (cdn11.bigcommerce.com)
- Some specialty retailers (patioliving.com, focalpointhardware.com) have accessible CDNs
If no image found after all three attempts: Note "image available at [brand URL] โ opens in browser" in the comparison. Never fabricate or guess an image URL.
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.
Image URL Validation
Try tools in order until one succeeds:
1. WebFetch(url=image_url, prompt="Is this a valid accessible image? Return HTTP status and approximate file size in KB.")
2. mcp__read-website-fast__read_website(url=image_url) โ if WebFetch blocked
3. Chrome MCP navigate + screenshot โ if both above fail and domain is a preferred retailer
Interpreting results (WebFetch/read-website-fast can't render binary images โ binary saves are valid):
- Valid signal: Binary JPEG/PNG file saved, size > 5KB โ confirmed working image
- Invalid: HTTP 403 or 404 on all three tools โ discard, find alternative
- Ambiguous: File saved but < 3KB โ likely a placeholder or error icon โ discard
Product Page Validation
Try tools in order:
1. WebFetch(url=product_url, prompt="Return HTTP status and page title.")
2. mcp__read-website-fast__read_website(url=product_url) โ if WebFetch blocked
3. Chrome MCP navigate โ if both above fail; navigate and read page text
- Success + matching page title โ confirmed โ
- HTTP 404 on all tools โ URL is stale; search for updated URL on the same domain
- All tools blocked โ note โ browser only; URL still usable as human link
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)
## [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:
### โญ 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:
- Update the options table to mark the selected item
- Move the item from "Outstanding Items โ Owner's Side" to "Decisions Made / Locked"
- Status progression:
[ ] Pending approval โ [x] Approved โ [ ] Ordered
- 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
## 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
Plumbing Fixtures
| Brand | Website | Image access | Notes |
|---|
| Signature Hardware | signaturehardware.com | โ 403 | Use Pinterest pins for images |
| Rohl / Perrin & Rowe | houseofrohl.com | โ | Images on BigCommerce CDN |
| Kohler | kohler.com | โ | CDN at content.kohler.com |
| Delta / Brizo | deltafaucet.com | โ | |
| Moen | moen.com | โ | |
| Hansgrohe | hansgrohe-usa.com | โ | |
Door & Cabinet Hardware
| Brand | Website | Image access | Notes |
|---|
| Emtek | emtek.com | โ | Images at /media/salsify/images/ |
| Baldwin Reserve | baldwinhardware.com | โ | Scene7 CDN at images.baldwinhardware.com |
| Schlage | schlage.com | โ | |
| Kwikset | kwikset.com | โ | |
| Top Knobs | topknobs.com | check | |
Appliances
| Brand | Notes |
|---|
| Viking | vikingrange.com |
| Bosch | bosch-home.com/en-us/ |
| Zephyr | zephyronline.com |
| Wolf | subzero-wolf.com |
Tile & Stone
| Brand | Notes |
|---|
| Zia Tile | ziatile.com |
| Fireclay | fireclaytile.com |
| Ann Sacks | annsacks.com |
| Caesarstone | caesarstoneus.com |
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
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