impact-compass 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/DOCUMENTATION.md CHANGED
@@ -1,40 +1,151 @@
1
1
  # Impact Compass Documentation
2
2
 
3
- Impact Compass is a purely statistical, deterministic CLI tool that runs your startup idea against public evidence from seven major platforms. It uses zero AI. It calculates demand, pain, momentum, and competition volume using strict mathematical formulas to generate a ruthless product-market fit score.
3
+ Impact Compass is a purely statistical, deterministic CLI tool that runs your project idea against public evidence from seven major platforms. It uses zero AI. It calculates demand, pain, momentum, competition fit, activity, channel fit, and evidence quality using strict scoring logic to generate a ruthless project validation score.
4
4
 
5
5
  ## Creating Your Idea File
6
6
 
7
- The CLI requires a JSON file containing the core elements of your startup idea. You do not need to overthink this. Just write down what you know.
7
+ The CLI requires a JSON file containing your idea brief and the keyword bundle it should search. You do not need to overthink this, but do not feed it lazy keywords like `app` or `software` unless you enjoy drowning in garbage data.
8
8
 
9
9
  Create a file named `idea.json` with the following structure:
10
10
 
11
11
  ```json
12
12
  {
13
- "name": "Your Idea Name",
14
- "targetUser": "Who is going to use this?",
15
- "lens": "What category does this fall under? (e.g. Developer Tools, Productivity)",
16
- "problem": "What specific problem are you solving?",
17
- "audienceKeywords": ["keyword1", "keyword2"],
18
- "problemKeywords": ["complaint1", "pain point 2"],
19
- "solutionKeywords": ["solution name", "technology"],
20
- "competitorKeywords": ["existing app 1", "competitor 2"],
21
- "exclusions": ["unrelated meaning"]
13
+ "idea": {
14
+ "name": "Your Idea Name",
15
+ "problem": "What specific problem are you solving?",
16
+ "targetUser": "Who is going to use this?",
17
+ "lens": "What category does this fall under?"
18
+ },
19
+ "queryBundleForm": {
20
+ "problemKeywords": "complaint one, pain point two",
21
+ "solutionKeywords": "solution name, technology",
22
+ "audienceKeywords": "target user, buyer persona",
23
+ "competitorKeywords": "existing app one, competitor two",
24
+ "exclusions": "unrelated meaning, wrong market"
25
+ }
22
26
  }
23
27
  ```
24
28
 
25
29
  ### Keywords Matter
26
- The scoring engine is merciless. If you use generic keywords like "app" or "software", the engine will pull in thousands of irrelevant results. Use the `exclusions` array to filter out noise. If your tool is for "React State Management," put "React Native" in the exclusions if you don't support mobile.
30
+ The scoring engine is merciless. If you use generic keywords, the engine will pull in thousands of irrelevant results and confidently tell you the ocean is soup. Use `exclusions` to filter out wrong meanings. If your tool is for React state management, put `vue` and `angular` in exclusions if you do not care about those worlds.
27
31
 
28
32
  ## Running the Evaluation
29
33
 
30
34
  Execute the CLI by passing your input file and a destination for the report:
31
35
 
32
36
  ```bash
33
- npm run cli idea.json output.json
37
+ npm i impact-compass
38
+ npx impact-compass idea.json output.json
34
39
  ```
35
40
 
36
41
  The tool takes about 5-10 seconds to scrape the live APIs. It does not use cached data. It will then print an ASCII dashboard to your terminal and save the raw data to your output file.
37
42
 
43
+ ## Output JSON Schema
44
+
45
+ The output file is a full report, not just a cute score slapped in a JSON trench coat.
46
+
47
+ ```json
48
+ {
49
+ "methodologyVersion": "0.1",
50
+ "idea": {
51
+ "name": "A fast global state manager for React",
52
+ "problem": "Redux has too much boilerplate...",
53
+ "targetUser": "React Developers",
54
+ "lens": "Developer Tools"
55
+ },
56
+ "queryBundle": {
57
+ "version": 1,
58
+ "locked": true,
59
+ "problemKeywords": ["react state management"],
60
+ "solutionKeywords": ["atomic state"],
61
+ "audienceKeywords": ["frontend developer"],
62
+ "competitorKeywords": ["zustand"],
63
+ "painPhrases": ["manual process", "workaround"],
64
+ "exclusions": ["vue", "angular"]
65
+ },
66
+ "queryQuality": {
67
+ "label": "Strong",
68
+ "warning": "Ambiguity controlled with audience terms and exclusions."
69
+ },
70
+ "pillars": [
71
+ {
72
+ "key": "demand",
73
+ "label": "Demand",
74
+ "score": 100,
75
+ "note": "Demand reads public-search targets..."
76
+ }
77
+ ],
78
+ "formulas": [
79
+ {
80
+ "pillar": "Demand",
81
+ "score": 100,
82
+ "formula": "0.45 volume + 0.25 unique authors + ...",
83
+ "formulaLatex": "0.45V + ...",
84
+ "inputs": ["mention volume", "unique authors"]
85
+ }
86
+ ],
87
+ "summary": {
88
+ "score": 69,
89
+ "uncertainty": 9,
90
+ "confidence": "Medium",
91
+ "range": {
92
+ "lower": 60,
93
+ "upper": 78
94
+ }
95
+ },
96
+ "integrity": {
97
+ "finalScoreAvailable": true,
98
+ "confidenceCap": "Low",
99
+ "warnings": []
100
+ },
101
+ "evidence": [
102
+ {
103
+ "id": "gh-123",
104
+ "source": "GitHub",
105
+ "sourceType": "repo",
106
+ "date": "2026-05-24",
107
+ "query": "atomic state",
108
+ "snippet": "owner/repo-name",
109
+ "link": "https://github.com/owner/repo-name",
110
+ "metricContribution": "Activity",
111
+ "included": true,
112
+ "reason": "25 stars",
113
+ "duplicateCluster": "gh-123",
114
+ "signalStrength": 42
115
+ }
116
+ ],
117
+ "strongestPillar": {
118
+ "key": "demand",
119
+ "label": "Demand",
120
+ "score": 100,
121
+ "note": "..."
122
+ },
123
+ "weakestPillar": {
124
+ "key": "competitionFit",
125
+ "label": "Competition Fit",
126
+ "score": 22,
127
+ "note": "..."
128
+ },
129
+ "interpretation": "Public evidence supports deeper validation...",
130
+ "disclaimer": "This score reflects public evidence..."
131
+ }
132
+ ```
133
+
134
+ ### Output Fields
135
+
136
+ - `methodologyVersion`: Report logic version.
137
+ - `idea`: The idea brief you submitted.
138
+ - `queryBundle`: The locked, parsed keyword bundle the engine actually used.
139
+ - `queryQuality`: A label and warning about whether your keywords are too broad, too narrow, ambiguous, good enough, or strong.
140
+ - `pillars`: The seven score pillars: Demand, Pain, Momentum, Competition Fit, Activity, Channel Fit, and Evidence Quality.
141
+ - `formulas`: Human-readable formula notes for each pillar. `formulaLatex` is included for tools that can render it, but the README keeps things readable for normal humans.
142
+ - `summary`: Final score, uncertainty, confidence label, and score range.
143
+ - `integrity`: Whether a final score is available and any confidence warnings from weak evidence, low diversity, or noisy queries.
144
+ - `evidence`: The normalized source hits used by the report. This is where the bodies are buried.
145
+ - `strongestPillar` / `weakestPillar`: Fast diagnosis of what is carrying the idea and what is trying to sink it.
146
+ - `interpretation`: The blunt verdict text printed by the engine.
147
+ - `disclaimer`: Reminder that public signal is not destiny, it is just better than asking a chatbot to bless your startup.
148
+
38
149
  ## Interpreting the Score
39
150
 
40
151
  - **90 - 100:** You found a unicorn. Massive demand, massive pain, almost zero competition. Start building immediately.
package/README.md CHANGED
@@ -2,13 +2,26 @@
2
2
 
3
3
  *grab a compass before you sail soldier*
4
4
 
5
- A purely statistical, deterministic project idea validator and market research CLI.
5
+ ```bash
6
+ npm i impact-compass
7
+ npx impact-compass idea.json output.json
8
+ ```
9
+
10
+ [Documentation](DOCUMENTATION.md) / [Agent Skill Guide](SKILLS.md)
11
+
12
+ A purely statistical, deterministic startup idea validator and market research CLI for founders, indie hackers, builders, and developer-tool maniacs.
6
13
 
7
- Impact Compass fetches keyword rankings and engagement signals from real sources like GitHub, npm, Reddit, Stack Exchange, Hacker News, Wikipedia, and the App Store. It checks the *hype* around your project before you waste six months, a billion tokens, and enough coffee to make your keyboard anxious.
14
+ Impact Compass runs product-market fit checks, demand validation, competitive analysis, and market saturation scoring from public evidence. It fetches keyword rankings and engagement signals from real sources like GitHub, npm, Reddit, Stack Exchange, Hacker News, Wikipedia, and the App Store. It checks the *hype* around your project before you waste six months, a billion tokens, and enough coffee to make your keyboard anxious.
8
15
 
9
16
  No AI. No vibes. No GPT wrapper whispering "*yo this idea is goated*" right before it lies to your face and stabs you in the roadmap.
10
17
 
11
- Impact Compass is a deterministic engine. It pulls live, real-world evidence through an API-based keyword scoring pipeline, then runs that data through a brutal scoring engine to tell you if you found a blue ocean or if you are walking into another brilliant project that nobody wants.
18
+ Impact Compass is a deterministic validation engine. It pulls live, real-world evidence through an API-based keyword scoring pipeline, then runs that data through a brutal scoring engine to tell you if you found a blue ocean or if you are walking into another brilliant project that nobody wants.
19
+
20
+ Built for:
21
+ - founders doing startup validation before writing code
22
+ - indie hackers checking if a niche has actual demand
23
+ - developers comparing saturated markets before shipping another clone
24
+ - AI coding agents that need real market evidence before they start generating files like caffeinated interns
12
25
 
13
26
  ## The Problem
14
27
 
@@ -22,19 +35,6 @@ Why? Because you didn't measure the noise. High demand means nothing if the mark
22
35
 
23
36
  Impact Compass takes your idea and compiles a query bundle (problems, solutions, target audiences, and competitors). It then pulls live data from seven pillars of public evidence and runs an advanced logarithmic scoring algorithm.
24
37
 
25
- ```mermaid
26
- flowchart TD
27
- A["Idea brief JSON"] --> B["Query bundle compiler"]
28
- B --> C["35 source adapters"]
29
- C --> D["Public APIs: GitHub, Reddit, npm, Hacker News, Stack Exchange, Wikipedia, App Store"]
30
- D --> E["Evidence normalizer"]
31
- E --> F["Relevance filter: weak keyword match loses 60% signal"]
32
- F --> G["Pillar scorers: demand, pain, momentum, activity, competition, channel fit, evidence quality"]
33
- G --> H["Weighted score engine"]
34
- H --> I["Red ocean saturation penalty"]
35
- I --> J["Final score, confidence, interpretation, JSON report"]
36
- ```
37
-
38
38
  It measures:
39
39
  - **Demand & Pain:** Are people actually complaining about this, or is the problem minor?
40
40
  - **Momentum & Activity:** Are developers and founders actively building in this space right now?
@@ -53,17 +53,13 @@ Translation: big demand is good, but big demand plus a crushed competition score
53
53
 
54
54
  The engine spits out a final score out of 100, along with a brutally honest interpretation of whether you should build it, pivot, or drop the idea entirely.
55
55
 
56
- <p align="center">
57
- <!-- Demo GIF coming after npm publish: CLI run, ASCII art, and React State Management score. -->
58
- </p>
59
-
60
56
  ## Quickstart
61
57
 
62
- Install dependencies, then run an evaluation:
58
+ Install the published package, then run an evaluation:
63
59
 
64
60
  ```bash
65
- npm install
66
- npm run cli example-react.json output.json
61
+ npm i impact-compass
62
+ npx impact-compass idea.json output.json
67
63
  ```
68
64
 
69
65
  ### The Input Schema
package/SKILLS.md CHANGED
@@ -25,7 +25,7 @@ When the user asks you to "validate this idea" or "is this a good startup idea":
25
25
 
26
26
  1. **Ask clarifying questions (if needed):** Ensure you understand the specific target audience, the exact problem, and any known competitors.
27
27
  2. **Draft the Query Bundle:** Create an `idea.json` file in the workspace representing the user's idea. Keep the keywords highly specific to avoid false positives.
28
- 3. **Run the CLI:** Execute `npm run cli idea.json output.json` (assuming Impact Compass is installed in the current workspace or accessible globally).
28
+ 3. **Run the CLI:** Execute `npx impact-compass idea.json output.json` after installing the package with `npm i impact-compass`, or use the local project script when working inside the source repo.
29
29
  4. **Read the Output:** Read the resulting `output.json` file.
30
30
  5. **Report to the User:** Do not just paste the JSON. Interpret the score for the user. Highlight their strongest pillar (e.g. Demand) and their weakest pillar (e.g. Competition Fit). If the score was heavily penalized due to market saturation (Red Ocean), warn them.
31
31
 
@@ -35,18 +35,115 @@ Write this to `idea.json` before running the CLI:
35
35
 
36
36
  ```json
37
37
  {
38
- "name": "Visual SQL Builder",
39
- "targetUser": "Data Analysts",
40
- "lens": "Developer Tools",
41
- "problem": "Writing complex joins is error-prone for junior analysts.",
42
- "audienceKeywords": ["data analyst", "BI developer"],
43
- "problemKeywords": ["sql join error", "too many sql tables"],
44
- "solutionKeywords": ["visual sql", "no-code sql"],
45
- "competitorKeywords": ["metabase", "looker"],
46
- "exclusions": ["nosql", "mongodb"]
38
+ "idea": {
39
+ "name": "Visual SQL Builder",
40
+ "problem": "Writing complex joins is error-prone for junior analysts.",
41
+ "targetUser": "Data Analysts",
42
+ "lens": "Developer Tools"
43
+ },
44
+ "queryBundleForm": {
45
+ "problemKeywords": "sql join error, too many sql tables",
46
+ "solutionKeywords": "visual sql, no-code sql",
47
+ "audienceKeywords": "data analyst, BI developer",
48
+ "competitorKeywords": "metabase, looker",
49
+ "exclusions": "nosql, mongodb"
50
+ }
47
51
  }
48
52
  ```
49
53
 
54
+ ## Output JSON Schema
55
+
56
+ After the CLI runs, read `output.json`. Treat it as the evidence packet, not just a number.
57
+
58
+ ```json
59
+ {
60
+ "methodologyVersion": "0.1",
61
+ "idea": {
62
+ "name": "Visual SQL Builder",
63
+ "problem": "Writing complex joins is error-prone for junior analysts.",
64
+ "targetUser": "Data Analysts",
65
+ "lens": "Developer Tools"
66
+ },
67
+ "queryBundle": {
68
+ "version": 1,
69
+ "locked": true,
70
+ "problemKeywords": ["sql join error"],
71
+ "solutionKeywords": ["visual sql"],
72
+ "audienceKeywords": ["data analyst"],
73
+ "competitorKeywords": ["metabase"],
74
+ "painPhrases": ["manual process", "workaround"],
75
+ "exclusions": ["nosql"]
76
+ },
77
+ "queryQuality": {
78
+ "label": "Strong",
79
+ "warning": "Ambiguity controlled with audience terms and exclusions."
80
+ },
81
+ "pillars": [
82
+ {
83
+ "key": "demand",
84
+ "label": "Demand",
85
+ "score": 82,
86
+ "note": "Demand reads public-search targets..."
87
+ }
88
+ ],
89
+ "formulas": [
90
+ {
91
+ "pillar": "Demand",
92
+ "score": 82,
93
+ "formula": "0.45 volume + 0.25 unique authors + ...",
94
+ "formulaLatex": "0.45V + ...",
95
+ "inputs": ["mention volume", "unique authors"]
96
+ }
97
+ ],
98
+ "summary": {
99
+ "score": 67,
100
+ "uncertainty": 10,
101
+ "confidence": "Medium",
102
+ "range": {
103
+ "lower": 57,
104
+ "upper": 77
105
+ }
106
+ },
107
+ "integrity": {
108
+ "finalScoreAvailable": true,
109
+ "confidenceCap": "Low",
110
+ "warnings": []
111
+ },
112
+ "evidence": [
113
+ {
114
+ "id": "gh-123",
115
+ "source": "GitHub",
116
+ "sourceType": "repo",
117
+ "date": "2026-05-24",
118
+ "query": "visual sql",
119
+ "snippet": "owner/repo-name",
120
+ "link": "https://github.com/owner/repo-name",
121
+ "metricContribution": "Activity",
122
+ "included": true,
123
+ "reason": "25 stars",
124
+ "duplicateCluster": "gh-123",
125
+ "signalStrength": 42
126
+ }
127
+ ],
128
+ "strongestPillar": {
129
+ "key": "demand",
130
+ "label": "Demand",
131
+ "score": 82,
132
+ "note": "..."
133
+ },
134
+ "weakestPillar": {
135
+ "key": "competitionFit",
136
+ "label": "Competition Fit",
137
+ "score": 28,
138
+ "note": "..."
139
+ },
140
+ "interpretation": "Public evidence supports deeper validation...",
141
+ "disclaimer": "This score reflects public evidence..."
142
+ }
143
+ ```
144
+
145
+ When reporting back, prioritize `summary`, `strongestPillar`, `weakestPillar`, `integrity.warnings`, and the top `evidence` items. The user does not need a JSON dump. They need to know whether the market is alive, saturated, noisy, or fake.
146
+
50
147
  ## Why This Matters
51
148
 
52
149
  As an AI agent, you are great at writing code, but you suffer from hallucinations when guessing what people actually want to buy. Impact Compass prevents you from building "ghost town" products. The tool itself contains zero AI. By relying on its deterministic, mathematical scoring of live public evidence from GitHub, Hacker News, Reddit, and Stack Exchange, you anchor your development roadmap in cold, hard reality.
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /* eslint-disable @typescript-eslint/no-require-imports */
3
+ const { spawnSync } = require("node:child_process");
4
+ const path = require("node:path");
5
+
6
+ const tsxCli = require.resolve("tsx/cli");
7
+ const cliEntry = path.resolve(__dirname, "../src/cli.ts");
8
+ const result = spawnSync(process.execPath, [tsxCli, cliEntry, ...process.argv.slice(2)], {
9
+ stdio: "inherit",
10
+ });
11
+
12
+ if (result.error) {
13
+ console.error(result.error.message);
14
+ process.exit(1);
15
+ }
16
+
17
+ process.exit(result.status ?? 1);
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "impact-compass",
3
- "version": "0.2.2",
4
- "description": "Deterministic market research CLI for startup idea validation, demand scoring, and competitive analysis.",
3
+ "version": "0.3.0",
4
+ "description": "Startup idea validator and market research CLI for product-market fit, demand validation, and competitive analysis.",
5
+ "author": "Aditya Chauhan",
5
6
  "license": "MIT",
6
7
  "repository": {
7
8
  "type": "git",
@@ -12,24 +13,39 @@
12
13
  "url": "https://github.com/adityachauhan0/impact-compass/issues"
13
14
  },
14
15
  "private": false,
16
+ "bin": {
17
+ "impact-compass": "./bin/impact-compass.js"
18
+ },
15
19
  "keywords": [
16
20
  "market-research",
17
21
  "idea-validation",
18
22
  "startup-validation",
23
+ "startup-idea-validator",
19
24
  "product-validation",
20
25
  "market-validation",
21
26
  "competitive-analysis",
22
27
  "product-market-fit",
28
+ "pmf",
23
29
  "demand-validation",
24
30
  "demand-analysis",
25
31
  "market-analysis",
32
+ "market-saturation",
33
+ "red-ocean",
34
+ "blue-ocean",
35
+ "trend-analysis",
36
+ "public-evidence",
26
37
  "startup",
38
+ "startup-ideas",
39
+ "saas",
27
40
  "founder-tools",
28
41
  "indie-hacker",
42
+ "indie-hackers",
29
43
  "mvp",
30
44
  "cli",
45
+ "npx",
31
46
  "analytics",
32
47
  "developer-tools",
48
+ "ai-agents",
33
49
  "scoring",
34
50
  "deterministic",
35
51
  "no-ai",
@@ -40,6 +56,7 @@
40
56
  "stackexchange"
41
57
  ],
42
58
  "files": [
59
+ "bin/",
43
60
  "src/",
44
61
  "DOCUMENTATION.md",
45
62
  "SKILLS.md",
@@ -54,12 +71,16 @@
54
71
  "lint": "eslint",
55
72
  "cli": "npx tsx src/cli.ts"
56
73
  },
74
+ "engines": {
75
+ "node": ">=18"
76
+ },
57
77
  "dependencies": {
58
78
  "katex": "^0.17.0",
59
79
  "lucide-react": "^1.16.0",
60
80
  "next": "16.2.6",
61
81
  "react": "19.2.4",
62
- "react-dom": "19.2.4"
82
+ "react-dom": "19.2.4",
83
+ "tsx": "^4.22.3"
63
84
  },
64
85
  "devDependencies": {
65
86
  "@tailwindcss/postcss": "^4",
package/src/cli.ts CHANGED
@@ -59,7 +59,7 @@ function wrapText(text: string, width: number): string[] {
59
59
  async function main() {
60
60
  const args = process.argv.slice(2);
61
61
  if (args.length < 2) {
62
- console.error(`Usage: npm run cli <input.json> <output.json>`);
62
+ console.error(`Usage: impact-compass <input.json> <output.json>`);
63
63
  process.exit(1);
64
64
  }
65
65