feat(market-research): scaffold plugin, command, README, marketplace entry

This commit is contained in:
fatih.bulut 2026-06-22 00:46:09 +03:00
parent 1baf142ae5
commit 31502b5bbe
5 changed files with 125 additions and 0 deletions

View File

@ -35,6 +35,19 @@
"license": "Apache-2.0",
"keywords": ["android", "clone", "feasibility", "effort-estimation", "market-analysis"],
"category": "security"
},
{
"name": "market-research",
"source": "./plugins/market-research",
"description": "Research the app/game market and surface scored, non-repeating clone candidates that feed into clone-app.",
"version": "0.1.0",
"author": {
"name": "masa2146"
},
"repository": "https://github.com/masa2146/clone-app-skill",
"license": "Apache-2.0",
"keywords": ["market-research", "app-discovery", "trends", "clone"],
"category": "security"
}
]
}

View File

@ -0,0 +1,13 @@
{
"name": "market-research",
"version": "0.1.0",
"description": "Autonomously research the app/game market (free web + LLM trend synthesis) and surface scored, non-repeating clone candidates that feed into the clone-app skill.",
"author": {
"name": "masa2146"
},
"repository": "https://github.com/masa2146/clone-app-skill",
"license": "Apache-2.0",
"keywords": ["market-research", "app-discovery", "trends", "clone", "play-store", "app-store"],
"skills": "./skills/",
"commands": "./commands/"
}

View File

@ -0,0 +1,37 @@
# market-research
A Claude Code plugin that autonomously researches the app/game market and surfaces
scored, non-repeating clone candidates, then hands user-chosen candidates to the
`clone-app` plugin for feasibility analysis.
## What it does
`/market-research` runs a 6-phase workflow:
0. **Seed rotation** — pick varied search angles (category × region × niche) so runs differ.
1. **Gather** — App Store RSS chart data (`fetch-charts.py`) + free web search for trends.
2. **Synthesize** — cluster findings into ≥10 distinct app/game ideas.
3. **Score** — composite score: cloneability + market opportunity + monetization fit.
4. **Dedup** — exclude anything already in `./work/market-research/history.json`.
5. **Present + handoff** — show the ranked table; chosen candidates flow into `clone-app`.
## State
Written under `./work/market-research/` in your current directory:
- `history.json` — every past suggestion; the non-repeat memory.
- `research-<date>.md` — the full report for a run.
## Scripts
- `scripts/fetch-charts.py` — fetch App Store RSS chart feeds → normalized JSON.
- `scripts/history.py` — read / append / dedup the suggestion history.
Python is stdlib-only. Tests run offline against `tests/fixtures/`:
```bash
bash plugins/market-research/tests/run-all.sh
```
## Effort convention
Effort is measured in **AI Sprints** (one focused Claude session), never calendar time.

View File

@ -0,0 +1,30 @@
---
allowed-tools: Bash, Read, Glob, Grep, Write, Edit, WebFetch, WebSearch, Skill
description: Research the app/game market and surface scored, non-repeating clone candidates
user-invocable: true
argument-hint: [optional focus, e.g. "casual games" or "fintech LATAM"]
argument: optional market focus or angle (optional)
---
# /market-research
Run the market-research workflow: scan the market, score candidates, hand picks to clone-app.
## Instructions
Follow the market-research skill workflow in
`${CLAUDE_PLUGIN_ROOT}/skills/market-research/SKILL.md` exactly, phases 0 through 5.
### Step 1: Optional focus
If the user passed a focus argument (e.g. "casual games", "fintech LATAM"), bias
the Phase 0 seed selection toward it. Otherwise rotate seeds normally.
### Step 2: Run the skill
Execute Phase 0 → Phase 5 from SKILL.md. Pause for the user at Phase 5 (pick
candidates to hand to clone-app).
### Step 3: Deliver
Ensure the report is written to `./work/market-research/research-<date>.md` and
the new suggestions are appended to `./work/market-research/history.json`. For
each candidate the user picks, resolve it to a Google Play package/URL and invoke
the `clone-app` skill on it.

View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -uo pipefail
ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" # repo root
P="$ROOT/plugins/market-research"
fail=0
must_exist() { [[ -e "$1" ]] && echo "PASS exists: ${1#$ROOT/}" || { echo "FAIL missing: ${1#$ROOT/}"; fail=1; }; }
must_exec() { [[ -x "$1" ]] && echo "PASS exec: ${1#$ROOT/}" || { echo "FAIL not exec: ${1#$ROOT/}"; fail=1; }; }
must_exist "$P/.claude-plugin/plugin.json"
must_exist "$P/commands/market-research.md"
must_exist "$P/README.md"
must_exist "$P/skills/market-research/SKILL.md"
for s in fetch-charts.py history.py; do
must_exist "$P/skills/market-research/scripts/$s"
must_exec "$P/skills/market-research/scripts/$s"
done
for r in research-angles scoring-guide report-template; do
must_exist "$P/skills/market-research/references/$r.md"
done
# JSON validity: plugin manifest + marketplace
python3 -c "import json;json.load(open('$P/.claude-plugin/plugin.json'));json.load(open('$ROOT/.claude-plugin/marketplace.json'))" \
&& echo "PASS json valid" || { echo "FAIL json invalid"; fail=1; }
# all three plugins present in marketplace
python3 -c "
import json;d=json.load(open('$ROOT/.claude-plugin/marketplace.json'))
names=[p['name'] for p in d['plugins']]
assert 'market-research' in names and 'clone-app' in names and 'android-reverse-engineering' in names
print('PASS marketplace has all three plugins')" || { echo "FAIL marketplace entries"; fail=1; }
exit $fail