--- name: product-research description: "Validate product ideas from Reddit pain points, competitor reviews, and market signals, with a scored list. Use when researching a niche or an app idea." license: Apache-2.0 allowed-tools: Bash(playwright-cli *) Bash(playwright-cli) Bash(sleep *) --- # Product Research & Idea Validation ## What this skill does Two-pass research process to find and validate product opportunities in a target niche: - **Pass 1 (Reddit):** Raw pain points, complaints, tool requests from real community conversations - **Pass 2 (Corroboration):** Verify freshness, check existing solutions, read competitor reviews, confirm the pain still exists today ## Inputs The user provides: - **Niche/audience** (e.g., "Amazon FBA sellers", "Shopify store owners", "freelance designers") - **Optional constraints** (e.g., "solo dev", "prefer simple to build", "B2B only") --- ## Pass 1: Reddit Community Research ### Browser setup **Always use `playwright-cli open --headed --persistent`.** Both flags required — Reddit blocks if either is missing. Headed avoids headless fingerprint detection, persistent preserves login cookies. ### Phase 1: Identify communities (1 min) 1. Open browser: `playwright-cli open --headed --persistent` 2. Navigate to Reddit, identify top 2-3 subreddits for the niche 3. Check subscriber counts to prioritize (biggest first) ### Phase 2: Landscape scan (3-5 min per subreddit) For each subreddit, extract top posts using JS eval (NOT snapshot parsing): ```bash # Navigate to top posts playwright-cli goto "https://www.reddit.com/r/{subreddit}/top/?t=year" # Extract titles + metadata in one shot playwright-cli eval "JSON.stringify([...document.querySelectorAll('a[href*=\"/comments/\"]')].map(a => ({title: a.textContent?.trim()?.slice(0,150), href: a.href})).filter(x => x.title && x.title.length > 20 && !x.title.includes('Skip') && !x.title.includes('Navigate')).reduce((acc, x) => { if (!acc.seen.has(x.href)) { acc.seen.add(x.href); acc.result.push(x); } return acc; }, {seen: new Set(), result: []}).result.slice(0, 25))" ``` Repeat for `t=month` to get recent trends. **Time bias: prioritize 2026 > 2025. Threads older than 2024 are background context only — never primary evidence.** ### Phase 3: Deep-dive threads (2-3 min per thread) Read 4-5 highest-signal threads. Extract comments: ```bash playwright-cli eval "JSON.stringify([...document.querySelectorAll('[id*=\"comment\"] p, article p')].map(p => p.textContent?.trim()).filter(t => t && t.length > 25).slice(0, 35))" ``` **What to look for in comments:** - Complaints about existing tools ("X is clunky", "X doesn't do Y") - Explicit asks ("I wish there was...", "does anyone know a tool that...") - Workarounds people describe (manual processes = automation opportunity) - Recurring frustrations (same problem in multiple threads = high confidence) - Tool recommendations + why they're insufficient **Track freshness for every data point:** - Note the age of each thread/comment (Reddit shows "Xmo ago", "Xy ago") - Flag anything older than 12 months as potentially stale - Recent threads (< 3 months) with the same pain = strong signal - Old threads with no recent equivalents = possibly solved or irrelevant ### Phase 4: Targeted search (only if needed, 2 min) Only after understanding the landscape from Phase 2-3. Use informed queries based on patterns already observed, not generic "wish there was a tool" queries. ```bash playwright-cli goto "https://www.reddit.com/r/{subreddit}/search/?q={informed_query}&sort=relevance&t=all" ``` ### Phase 5: Compile Pass 1 findings Create a raw list of pain points with thread URLs and freshness tags before moving to Pass 2. --- ## Pass 2: Corroboration & Validation For each top 5-7 ideas from Pass 1, verify with external sources. This is what separates "someone complained on Reddit" from "this is a real, current, underserved market." ### 2A: Freshness check For each idea, ask: **Is this pain point still active TODAY, or was it solved / became irrelevant?** - Search for the same pain in recent (last 3 months) posts - If the pain is old (e.g., PPC was painful in 2019) — check if the same complaints exist in 2025-2026 threads, or if new tools solved it - Look for "I switched to X and it fixed it" comments — that means the problem may be solved ### 2B: Existing solution audit For each idea, find what already exists: ```bash # Search for existing tools playwright-cli goto "https://www.google.com/search?q={niche}+{pain_point}+tool+OR+software+OR+app" # Check review sites playwright-cli goto "https://www.g2.com/search?query={tool_name}" playwright-cli goto "https://www.capterra.com/search/?query={tool_name}" ``` **What to capture:** - Tool name, pricing, rating - Top complaints in reviews (1-2 star reviews are gold — they show unmet needs) - Feature gaps mentioned by reviewers - "I switched FROM X because..." comments ### 2C: Competitor weakness analysis For the top 3 ideas, read 1-star and 2-star reviews of existing solutions: ```bash # Extract review text playwright-cli eval "JSON.stringify([...document.querySelectorAll('[class*=\"review\"] p, [class*=\"Review\"] p, [data-testid*=\"review\"] p')].map(p => p.textContent?.trim()).filter(t => t && t.length > 30).slice(0, 20))" ``` **Key patterns in bad reviews:** - "Too expensive for what it does" → price disruption opportunity - "Clunky UI / hard to use" → UX opportunity - "Missing X feature" → feature gap opportunity - "Support is terrible" → service opportunity - "Hasn't been updated in years" → abandoned product opportunity ### 2D: Market size signals Quick checks for each top idea: - Google the main existing tool — check their pricing page for plan tiers (indicates market maturity) - Check Chrome Web Store for related extensions (install counts = market size proxy) - Check ProductHunt for similar launches (comments show reception) --- ## Scoring Framework | Factor | 1 | 2 | 3 | |--------|---|---|---| | **Pain (P)** | Nice-to-have | Saves hours/week | Critical to revenue/survival | | **Confidence (C)** | 1-2 mentions | 3-5 threads + upvotes | Recurring theme, multiple sources | | **Ease (E)** | Complex orchestration, many integrations | Standard web app, some API work | Simple SaaS, weeks to MVP | | **Promotability (M)** | Hard to reach, enterprise sale | Niche communities, word of mouth | Reddit/YouTube/SEO natural fit, viral potential | | **TAM (T)** | Small subset of niche | Most active members | Everyone in the niche | | **Freshness (F)** | Modifier: 0.5x if only old threads, 1x if mixed, 1.5x if hot right now | **Score = P x C x E x M x T x F** (higher = better) Adjustments per user constraints: - If user says "solo dev" or "easy to build" → weight Ease higher (multiply E by 1.5) - If user says "complex is fine" → don't penalize Ease - If user specifies revenue model → factor willingness-to-pay signals from threads ## Output Format ```markdown # {Niche} App Ideas — Research Report **Date:** YYYY-MM-DD **Pass 1 Sources:** {subreddits with member counts} **Pass 2 Sources:** {review sites, competitor tools checked} ## Scoring Framework {table} ## Ranked Ideas ### 1. [Idea Name] — Score: X (P:X C:X E:X M:X T:X F:X) **Problem:** What the audience is struggling with **Freshness:** {ACTIVE / STALE / EMERGING} — {one-line justification, e.g., "3 threads in last 2 months, complaints intensifying due to 2026 fee changes"} **Evidence (Reddit):** - [Thread title](https://reddit.com/r/.../comments/...) — "key quote" (X upvotes, Y comments, Z ago) - [Thread title](https://reddit.com/r/.../comments/...) — "key quote" (X upvotes, Z ago) **Existing solutions & gaps:** - {Tool} (${price}/mo, {rating} on G2) — Gap: "{what users complain about}" - {Tool} (${price}/mo) — Gap: "{missing feature}" **Opportunity angle:** What specifically to build differently **MVP scope:** What v1 looks like + rough timeline ### 2. ... ## Top 3 Recommendation {Brief rationale for the top picks given user's constraints} ``` ## Behavioral Rules 1. **Add small random jitter** between actions: `sleep $((RANDOM % 2 + 1))` between navigations 2. **Use JS eval for data extraction**, not snapshot parsing — 10x faster and more reliable 3. **Browse organically first** — read top posts to understand the landscape before searching 4. **Don't use overly literal search queries** — people don't write "I wish someone built X." They complain, ask for alternatives, describe workarounds 5. **Read comments, not just titles** — titles are clickbait, comments contain the real pain 6. **Always track thread age** — a pain point from 3 years ago with no recent mentions may be solved 7. **Corroborate before scoring** — Reddit gives signal, Pass 2 gives conviction. Don't rank high on Reddit alone 8. **Close browser when done** — `playwright-cli close` 9. **Target 10-15 ideas from Pass 1, detail top 5 with Pass 2** — diminishing returns after ~30 min total per niche 10. **Always use `--headed --persistent`** — user wants to watch, session persists 11. **Always include thread URLs** — every evidence point must link to the source so user can verify firsthand