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 +124 -13
- package/README.md +19 -23
- package/SKILLS.md +107 -10
- package/bin/impact-compass.js +17 -0
- package/package.json +24 -3
- package/src/cli.ts +1 -1
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
|
|
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
|
|
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
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
58
|
+
Install the published package, then run an evaluation:
|
|
63
59
|
|
|
64
60
|
```bash
|
|
65
|
-
npm
|
|
66
|
-
|
|
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 `
|
|
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
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
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.
|
|
4
|
-
"description": "
|
|
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:
|
|
62
|
+
console.error(`Usage: impact-compass <input.json> <output.json>`);
|
|
63
63
|
process.exit(1);
|
|
64
64
|
}
|
|
65
65
|
|