@stacksfinder/mcp-server 1.0.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/README.md +262 -0
- package/dist/data/compatibility_matrix.json +230 -0
- package/dist/data/index.d.ts +109 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +203 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/technology_scores.json +1031 -0
- package/dist/data/357/200/242/357/200/212cp H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serversrcdatacompatibility_matrix.json H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serverdistdata/357/200/242" +226 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +254 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyze.d.ts +45 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +110 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/api-keys.d.ts +78 -0
- package/dist/tools/api-keys.d.ts.map +1 -0
- package/dist/tools/api-keys.js +238 -0
- package/dist/tools/api-keys.js.map +1 -0
- package/dist/tools/blueprint.d.ts +129 -0
- package/dist/tools/blueprint.d.ts.map +1 -0
- package/dist/tools/blueprint.js +320 -0
- package/dist/tools/blueprint.js.map +1 -0
- package/dist/tools/compare.d.ts +50 -0
- package/dist/tools/compare.d.ts.map +1 -0
- package/dist/tools/compare.js +168 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/list-techs.d.ts +34 -0
- package/dist/tools/list-techs.d.ts.map +1 -0
- package/dist/tools/list-techs.js +70 -0
- package/dist/tools/list-techs.js.map +1 -0
- package/dist/tools/recommend-demo.d.ts +46 -0
- package/dist/tools/recommend-demo.d.ts.map +1 -0
- package/dist/tools/recommend-demo.js +202 -0
- package/dist/tools/recommend-demo.js.map +1 -0
- package/dist/tools/recommend.d.ts +68 -0
- package/dist/tools/recommend.d.ts.map +1 -0
- package/dist/tools/recommend.js +135 -0
- package/dist/tools/recommend.js.map +1 -0
- package/dist/utils/api-client.d.ts +80 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +197 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/config.d.ts +35 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +45 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/device-id.d.ts +21 -0
- package/dist/utils/device-id.d.ts.map +1 -0
- package/dist/utils/device-id.js +101 -0
- package/dist/utils/device-id.js.map +1 -0
- package/dist/utils/errors.d.ts +46 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +125 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +63 -0
package/README.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# @stacksfinder/mcp-server
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@stacksfinder/mcp-server)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
MCP (Model Context Protocol) server that brings **deterministic tech stack recommendations** to LLM clients like Claude, Cursor, Windsurf, and other MCP-compatible tools.
|
|
7
|
+
|
|
8
|
+
**Try it free** — 4 tools work without an account, including a daily demo recommendation.
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
|
|
12
|
+
### Claude Code (CLI)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Add to Claude Code
|
|
16
|
+
claude mcp add stacksfinder npx -y @stacksfinder/mcp-server
|
|
17
|
+
|
|
18
|
+
# With API key for full features
|
|
19
|
+
claude mcp add-json stacksfinder '{
|
|
20
|
+
"command": "npx",
|
|
21
|
+
"args": ["-y", "@stacksfinder/mcp-server"],
|
|
22
|
+
"env": {"STACKSFINDER_API_KEY": "sk_live_xxx"}
|
|
23
|
+
}'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Claude Desktop
|
|
27
|
+
|
|
28
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"stacksfinder": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@stacksfinder/mcp-server"],
|
|
36
|
+
"env": {
|
|
37
|
+
"STACKSFINDER_API_KEY": "sk_live_xxx"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Cursor / Windsurf
|
|
45
|
+
|
|
46
|
+
Add to `.cursor/mcp.json` or `.windsurf/mcp.json` in your project root:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"mcpServers": {
|
|
51
|
+
"stacksfinder": {
|
|
52
|
+
"command": "npx",
|
|
53
|
+
"args": ["-y", "@stacksfinder/mcp-server"],
|
|
54
|
+
"env": {
|
|
55
|
+
"STACKSFINDER_API_KEY": "sk_live_xxx"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### VS Code + Copilot
|
|
63
|
+
|
|
64
|
+
Add to `.vscode/mcp.json`:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"servers": {
|
|
69
|
+
"stacksfinder": {
|
|
70
|
+
"command": "npx",
|
|
71
|
+
"args": ["-y", "@stacksfinder/mcp-server"],
|
|
72
|
+
"env": {
|
|
73
|
+
"STACKSFINDER_API_KEY": "sk_live_xxx"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Available Tools
|
|
81
|
+
|
|
82
|
+
### Free Tools (no account required)
|
|
83
|
+
|
|
84
|
+
| Tool | Description |
|
|
85
|
+
|------|-------------|
|
|
86
|
+
| `list_technologies` | List all 30+ tech IDs by category |
|
|
87
|
+
| `analyze_tech` | 6-dimension scores, strengths, weaknesses, compatible techs |
|
|
88
|
+
| `compare_techs` | Side-by-side comparison of 2-4 technologies |
|
|
89
|
+
| `recommend_stack` | **FREE 1x/day** — Full stack recommendation for any project type |
|
|
90
|
+
|
|
91
|
+
### Pro Tools (requires API key)
|
|
92
|
+
|
|
93
|
+
| Tool | Description |
|
|
94
|
+
|------|-------------|
|
|
95
|
+
| `recommend_stack` | Unlimited recommendations with priorities & constraints |
|
|
96
|
+
| `get_blueprint` | Fetch existing blueprint by ID |
|
|
97
|
+
| `create_blueprint` | Generate new blueprint with AI narrative |
|
|
98
|
+
| `setup_api_key` | Authenticate and create API key from MCP |
|
|
99
|
+
| `list_api_keys` | List your API keys |
|
|
100
|
+
| `revoke_api_key` | Revoke an API key |
|
|
101
|
+
|
|
102
|
+
Get your API key at [stacksfinder.com/pricing](https://stacksfinder.com/pricing)
|
|
103
|
+
|
|
104
|
+
## Tool Examples
|
|
105
|
+
|
|
106
|
+
### list_technologies
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
> list_technologies category="database"
|
|
110
|
+
|
|
111
|
+
Available databases:
|
|
112
|
+
- postgres (PostgreSQL)
|
|
113
|
+
- sqlite (SQLite)
|
|
114
|
+
- supabase (Supabase)
|
|
115
|
+
- planetscale (PlanetScale)
|
|
116
|
+
- turso (Turso)
|
|
117
|
+
- neon (Neon)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### analyze_tech
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
> analyze_tech technology="sveltekit" context="mvp"
|
|
124
|
+
|
|
125
|
+
## SvelteKit Analysis (MVP Context)
|
|
126
|
+
|
|
127
|
+
| Dimension | Score | Grade |
|
|
128
|
+
|-----------|-------|-------|
|
|
129
|
+
| Performance | 92 | A |
|
|
130
|
+
| DX | 88 | A |
|
|
131
|
+
| Ecosystem | 72 | B |
|
|
132
|
+
| Maintainability | 85 | A |
|
|
133
|
+
| Cost | 90 | A |
|
|
134
|
+
| Compliance | 75 | B |
|
|
135
|
+
|
|
136
|
+
**Overall: 84/100 (A)**
|
|
137
|
+
|
|
138
|
+
Strengths:
|
|
139
|
+
- Compiler-first architecture, tiny bundles
|
|
140
|
+
- Excellent TypeScript support
|
|
141
|
+
- Built-in SSR, SSG, and edge rendering
|
|
142
|
+
|
|
143
|
+
Weaknesses:
|
|
144
|
+
- Smaller ecosystem than React
|
|
145
|
+
- Fewer enterprise case studies
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### compare_techs
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
> compare_techs technologies=["nextjs", "sveltekit", "nuxt"]
|
|
152
|
+
|
|
153
|
+
## Comparison: Next.js vs SvelteKit vs Nuxt
|
|
154
|
+
|
|
155
|
+
| Tech | Score | Grade |
|
|
156
|
+
|------|-------|-------|
|
|
157
|
+
| Next.js | 82 | A |
|
|
158
|
+
| SvelteKit | 84 | A |
|
|
159
|
+
| Nuxt | 79 | B |
|
|
160
|
+
|
|
161
|
+
Per-dimension winners:
|
|
162
|
+
- Performance: SvelteKit (+10)
|
|
163
|
+
- DX: SvelteKit (+3)
|
|
164
|
+
- Ecosystem: Next.js (+15)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### recommend_stack (Free Demo)
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
> recommend_stack projectType="saas" scale="mvp"
|
|
171
|
+
|
|
172
|
+
## Recommended Stack for SaaS (MVP)
|
|
173
|
+
|
|
174
|
+
| Category | Technology | Score | Grade |
|
|
175
|
+
|----------|------------|-------|-------|
|
|
176
|
+
| meta-framework | SvelteKit | 84 | A |
|
|
177
|
+
| database | Supabase | 82 | A |
|
|
178
|
+
| orm | Drizzle | 86 | A |
|
|
179
|
+
| auth | Better Auth | 80 | A |
|
|
180
|
+
| hosting | Vercel | 85 | A |
|
|
181
|
+
| payments | Paddle | 86 | A |
|
|
182
|
+
|
|
183
|
+
**Confidence**: medium (demo mode)
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
Want more? Upgrade to Pro for custom priorities, constraints, and AI narratives.
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Environment Variables
|
|
190
|
+
|
|
191
|
+
| Variable | Required | Default | Description |
|
|
192
|
+
|----------|----------|---------|-------------|
|
|
193
|
+
| `STACKSFINDER_API_KEY` | For Pro tools | - | API key from stacksfinder.com |
|
|
194
|
+
| `STACKSFINDER_API_URL` | No | `https://stacksfinder.com` | API base URL |
|
|
195
|
+
| `STACKSFINDER_MCP_DEBUG` | No | `false` | Enable debug logging |
|
|
196
|
+
|
|
197
|
+
## Score Dimensions
|
|
198
|
+
|
|
199
|
+
All technology scores are measured across 6 dimensions (0-100):
|
|
200
|
+
|
|
201
|
+
| Dimension | Description |
|
|
202
|
+
|-----------|-------------|
|
|
203
|
+
| **Performance** | Runtime speed, bundle size, optimization potential |
|
|
204
|
+
| **DX** | Learning curve, tooling, documentation quality |
|
|
205
|
+
| **Ecosystem** | Community size, integrations, job market |
|
|
206
|
+
| **Maintainability** | Long-term code health, upgrade path |
|
|
207
|
+
| **Cost** | Hosting costs, licensing, operational overhead |
|
|
208
|
+
| **Compliance** | Security features, audit readiness |
|
|
209
|
+
|
|
210
|
+
## Contexts
|
|
211
|
+
|
|
212
|
+
Scores vary by project context:
|
|
213
|
+
|
|
214
|
+
- **default**: General-purpose scores
|
|
215
|
+
- **mvp**: Optimized for speed-to-market, lower cost
|
|
216
|
+
- **enterprise**: Emphasizes compliance, maintainability, support
|
|
217
|
+
|
|
218
|
+
## Error Handling
|
|
219
|
+
|
|
220
|
+
Structured errors with suggestions:
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
**Error (TECH_NOT_FOUND)**: Technology "nexjs" not found.
|
|
224
|
+
**Suggestions**: nextjs, nuxt, nestjs
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Troubleshooting
|
|
228
|
+
|
|
229
|
+
### Debug mode
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
STACKSFINDER_MCP_DEBUG=true npx @stacksfinder/mcp-server
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Common issues
|
|
236
|
+
|
|
237
|
+
| Issue | Solution |
|
|
238
|
+
|-------|----------|
|
|
239
|
+
| "API key required" | Get key at [stacksfinder.com/pricing](https://stacksfinder.com/pricing) |
|
|
240
|
+
| "Daily limit reached" | Wait 24h or upgrade to Pro |
|
|
241
|
+
| "Technology not found" | Use `list_technologies` to see valid IDs |
|
|
242
|
+
|
|
243
|
+
## Development
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
cd packages/mcp-server
|
|
247
|
+
bun install
|
|
248
|
+
bun run build
|
|
249
|
+
bun run dev # Watch mode
|
|
250
|
+
bun test # Run tests
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Links
|
|
254
|
+
|
|
255
|
+
- **Website**: [stacksfinder.com](https://stacksfinder.com)
|
|
256
|
+
- **Pricing**: [stacksfinder.com/pricing](https://stacksfinder.com/pricing)
|
|
257
|
+
- **GitHub**: [github.com/hoklims/stacksmith](https://github.com/hoklims/stacksmith)
|
|
258
|
+
- **npm**: [@stacksfinder/mcp-server](https://www.npmjs.com/package/@stacksfinder/mcp-server)
|
|
259
|
+
|
|
260
|
+
## License
|
|
261
|
+
|
|
262
|
+
MIT
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$version": "1.1.0",
|
|
3
|
+
"$description": "Compatibility scores between technologies (0-100). 0 = hard incompatible, <50 = poor, 50-79 = acceptable, 80+ = good. Payments providers are mutually exclusive.",
|
|
4
|
+
"matrix": {
|
|
5
|
+
"react": {
|
|
6
|
+
"nextjs": 100,
|
|
7
|
+
"remix": 100,
|
|
8
|
+
"nuxt": 0,
|
|
9
|
+
"sveltekit": 0,
|
|
10
|
+
"drizzle": 95,
|
|
11
|
+
"prisma": 95
|
|
12
|
+
},
|
|
13
|
+
"vue": {
|
|
14
|
+
"nuxt": 100,
|
|
15
|
+
"nextjs": 0,
|
|
16
|
+
"remix": 0,
|
|
17
|
+
"sveltekit": 0,
|
|
18
|
+
"drizzle": 90,
|
|
19
|
+
"prisma": 95
|
|
20
|
+
},
|
|
21
|
+
"svelte": {
|
|
22
|
+
"sveltekit": 100,
|
|
23
|
+
"nextjs": 0,
|
|
24
|
+
"remix": 0,
|
|
25
|
+
"nuxt": 0,
|
|
26
|
+
"drizzle": 95,
|
|
27
|
+
"prisma": 90
|
|
28
|
+
},
|
|
29
|
+
"solid": {
|
|
30
|
+
"nextjs": 0,
|
|
31
|
+
"remix": 0,
|
|
32
|
+
"nuxt": 0,
|
|
33
|
+
"sveltekit": 0,
|
|
34
|
+
"drizzle": 85,
|
|
35
|
+
"prisma": 85
|
|
36
|
+
},
|
|
37
|
+
"nextjs": {
|
|
38
|
+
"react": 100,
|
|
39
|
+
"vercel": 100,
|
|
40
|
+
"cloudflare": 80,
|
|
41
|
+
"railway": 90,
|
|
42
|
+
"postgres": 95,
|
|
43
|
+
"sqlite": 70,
|
|
44
|
+
"supabase": 95,
|
|
45
|
+
"drizzle": 95,
|
|
46
|
+
"prisma": 95,
|
|
47
|
+
"better-auth": 90,
|
|
48
|
+
"clerk": 100
|
|
49
|
+
},
|
|
50
|
+
"nuxt": {
|
|
51
|
+
"vue": 100,
|
|
52
|
+
"vercel": 95,
|
|
53
|
+
"cloudflare": 85,
|
|
54
|
+
"railway": 90,
|
|
55
|
+
"postgres": 95,
|
|
56
|
+
"sqlite": 80,
|
|
57
|
+
"supabase": 90,
|
|
58
|
+
"drizzle": 90,
|
|
59
|
+
"prisma": 95
|
|
60
|
+
},
|
|
61
|
+
"sveltekit": {
|
|
62
|
+
"svelte": 100,
|
|
63
|
+
"vercel": 95,
|
|
64
|
+
"cloudflare": 90,
|
|
65
|
+
"railway": 90,
|
|
66
|
+
"postgres": 95,
|
|
67
|
+
"sqlite": 85,
|
|
68
|
+
"supabase": 90,
|
|
69
|
+
"drizzle": 100,
|
|
70
|
+
"prisma": 85,
|
|
71
|
+
"better-auth": 95
|
|
72
|
+
},
|
|
73
|
+
"remix": {
|
|
74
|
+
"react": 100,
|
|
75
|
+
"vercel": 90,
|
|
76
|
+
"cloudflare": 95,
|
|
77
|
+
"railway": 90,
|
|
78
|
+
"postgres": 95,
|
|
79
|
+
"sqlite": 85,
|
|
80
|
+
"supabase": 90,
|
|
81
|
+
"drizzle": 95,
|
|
82
|
+
"prisma": 90
|
|
83
|
+
},
|
|
84
|
+
"nodejs": {
|
|
85
|
+
"postgres": 95,
|
|
86
|
+
"sqlite": 90,
|
|
87
|
+
"supabase": 90,
|
|
88
|
+
"drizzle": 95,
|
|
89
|
+
"prisma": 95,
|
|
90
|
+
"vercel": 90,
|
|
91
|
+
"cloudflare": 75,
|
|
92
|
+
"railway": 95
|
|
93
|
+
},
|
|
94
|
+
"bun": {
|
|
95
|
+
"postgres": 90,
|
|
96
|
+
"sqlite": 95,
|
|
97
|
+
"supabase": 85,
|
|
98
|
+
"drizzle": 100,
|
|
99
|
+
"prisma": 70,
|
|
100
|
+
"vercel": 80,
|
|
101
|
+
"cloudflare": 85,
|
|
102
|
+
"railway": 90,
|
|
103
|
+
"sveltekit": 100
|
|
104
|
+
},
|
|
105
|
+
"postgres": {
|
|
106
|
+
"drizzle": 100,
|
|
107
|
+
"prisma": 100,
|
|
108
|
+
"supabase": 100,
|
|
109
|
+
"vercel": 95,
|
|
110
|
+
"cloudflare": 90,
|
|
111
|
+
"railway": 100
|
|
112
|
+
},
|
|
113
|
+
"sqlite": {
|
|
114
|
+
"drizzle": 100,
|
|
115
|
+
"prisma": 95,
|
|
116
|
+
"vercel": 60,
|
|
117
|
+
"cloudflare": 95,
|
|
118
|
+
"railway": 80
|
|
119
|
+
},
|
|
120
|
+
"supabase": {
|
|
121
|
+
"drizzle": 90,
|
|
122
|
+
"prisma": 95,
|
|
123
|
+
"postgres": 100,
|
|
124
|
+
"vercel": 95,
|
|
125
|
+
"cloudflare": 90,
|
|
126
|
+
"railway": 90,
|
|
127
|
+
"neon": 30
|
|
128
|
+
},
|
|
129
|
+
"neon": {
|
|
130
|
+
"drizzle": 98,
|
|
131
|
+
"prisma": 95,
|
|
132
|
+
"postgres": 100,
|
|
133
|
+
"vercel": 98,
|
|
134
|
+
"cloudflare": 85,
|
|
135
|
+
"railway": 90,
|
|
136
|
+
"sveltekit": 95,
|
|
137
|
+
"nextjs": 95,
|
|
138
|
+
"nuxt": 90,
|
|
139
|
+
"remix": 90,
|
|
140
|
+
"supabase": 30,
|
|
141
|
+
"sqlite": 20
|
|
142
|
+
},
|
|
143
|
+
"drizzle": {
|
|
144
|
+
"postgres": 100,
|
|
145
|
+
"sqlite": 100,
|
|
146
|
+
"supabase": 90,
|
|
147
|
+
"neon": 98,
|
|
148
|
+
"bun": 100,
|
|
149
|
+
"nodejs": 95
|
|
150
|
+
},
|
|
151
|
+
"prisma": {
|
|
152
|
+
"postgres": 100,
|
|
153
|
+
"sqlite": 95,
|
|
154
|
+
"supabase": 95,
|
|
155
|
+
"neon": 95,
|
|
156
|
+
"bun": 70,
|
|
157
|
+
"nodejs": 100
|
|
158
|
+
},
|
|
159
|
+
"vercel": {
|
|
160
|
+
"nextjs": 100,
|
|
161
|
+
"nuxt": 95,
|
|
162
|
+
"sveltekit": 95,
|
|
163
|
+
"remix": 90,
|
|
164
|
+
"postgres": 95,
|
|
165
|
+
"supabase": 95,
|
|
166
|
+
"neon": 98
|
|
167
|
+
},
|
|
168
|
+
"cloudflare": {
|
|
169
|
+
"nextjs": 80,
|
|
170
|
+
"nuxt": 85,
|
|
171
|
+
"sveltekit": 90,
|
|
172
|
+
"remix": 95,
|
|
173
|
+
"sqlite": 95,
|
|
174
|
+
"postgres": 85
|
|
175
|
+
},
|
|
176
|
+
"railway": {
|
|
177
|
+
"nextjs": 90,
|
|
178
|
+
"nuxt": 90,
|
|
179
|
+
"sveltekit": 90,
|
|
180
|
+
"remix": 90,
|
|
181
|
+
"postgres": 100,
|
|
182
|
+
"nodejs": 100,
|
|
183
|
+
"bun": 95
|
|
184
|
+
},
|
|
185
|
+
"stripe": {
|
|
186
|
+
"nextjs": 95,
|
|
187
|
+
"sveltekit": 90,
|
|
188
|
+
"nuxt": 90,
|
|
189
|
+
"remix": 90,
|
|
190
|
+
"nodejs": 95,
|
|
191
|
+
"bun": 90,
|
|
192
|
+
"paddle": 0,
|
|
193
|
+
"lemonsqueezy": 0,
|
|
194
|
+
"gumroad": 0
|
|
195
|
+
},
|
|
196
|
+
"paddle": {
|
|
197
|
+
"nextjs": 90,
|
|
198
|
+
"sveltekit": 95,
|
|
199
|
+
"nuxt": 90,
|
|
200
|
+
"remix": 88,
|
|
201
|
+
"nodejs": 90,
|
|
202
|
+
"bun": 90,
|
|
203
|
+
"stripe": 0,
|
|
204
|
+
"lemonsqueezy": 0,
|
|
205
|
+
"gumroad": 0
|
|
206
|
+
},
|
|
207
|
+
"lemonsqueezy": {
|
|
208
|
+
"nextjs": 85,
|
|
209
|
+
"sveltekit": 85,
|
|
210
|
+
"nuxt": 85,
|
|
211
|
+
"remix": 85,
|
|
212
|
+
"nodejs": 85,
|
|
213
|
+
"bun": 85,
|
|
214
|
+
"stripe": 0,
|
|
215
|
+
"paddle": 0,
|
|
216
|
+
"gumroad": 0
|
|
217
|
+
},
|
|
218
|
+
"gumroad": {
|
|
219
|
+
"nextjs": 70,
|
|
220
|
+
"sveltekit": 70,
|
|
221
|
+
"nuxt": 70,
|
|
222
|
+
"remix": 70,
|
|
223
|
+
"nodejs": 70,
|
|
224
|
+
"bun": 70,
|
|
225
|
+
"stripe": 0,
|
|
226
|
+
"paddle": 0,
|
|
227
|
+
"lemonsqueezy": 0
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data version - update when syncing from source.
|
|
3
|
+
*/
|
|
4
|
+
export declare const DATA_VERSION = "2025.12.30";
|
|
5
|
+
/**
|
|
6
|
+
* Score dimensions.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SCORE_DIMENSIONS: readonly ["perf", "dx", "ecosystem", "maintain", "cost", "compliance"];
|
|
9
|
+
export type ScoreDimension = (typeof SCORE_DIMENSIONS)[number];
|
|
10
|
+
/**
|
|
11
|
+
* Human-readable dimension names.
|
|
12
|
+
*/
|
|
13
|
+
export declare const DIMENSION_LABELS: Record<ScoreDimension, string>;
|
|
14
|
+
/**
|
|
15
|
+
* Technology categories.
|
|
16
|
+
*/
|
|
17
|
+
export declare const CATEGORIES: readonly ["frontend", "backend", "meta-framework", "database", "orm", "auth", "hosting", "payments"];
|
|
18
|
+
export type Category = (typeof CATEGORIES)[number];
|
|
19
|
+
/**
|
|
20
|
+
* Score contexts.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CONTEXTS: readonly ["default", "mvp", "enterprise"];
|
|
23
|
+
export type Context = (typeof CONTEXTS)[number];
|
|
24
|
+
/**
|
|
25
|
+
* Score set for a technology.
|
|
26
|
+
*/
|
|
27
|
+
export interface Scores {
|
|
28
|
+
perf: number;
|
|
29
|
+
dx: number;
|
|
30
|
+
ecosystem: number;
|
|
31
|
+
maintain: number;
|
|
32
|
+
cost: number;
|
|
33
|
+
compliance: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Technology information.
|
|
37
|
+
*/
|
|
38
|
+
export interface TechInfo {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
category: Category;
|
|
42
|
+
url: string;
|
|
43
|
+
scores: Record<Context, Scores>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get all technology IDs.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getAllTechIds(): string[];
|
|
49
|
+
/**
|
|
50
|
+
* Get a technology by ID.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getTechnology(id: string): TechInfo | null;
|
|
53
|
+
/**
|
|
54
|
+
* Get all technologies.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getAllTechnologies(): TechInfo[];
|
|
57
|
+
/**
|
|
58
|
+
* Get technologies by category.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getTechnologiesByCategory(category: Category): TechInfo[];
|
|
61
|
+
/**
|
|
62
|
+
* Get technologies grouped by category.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getTechnologiesGroupedByCategory(): Record<Category, TechInfo[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Get scores for a technology in a specific context.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getScores(techId: string, context?: Context): Scores | null;
|
|
69
|
+
/**
|
|
70
|
+
* Calculate overall score (average of all dimensions).
|
|
71
|
+
*/
|
|
72
|
+
export declare function calculateOverallScore(scores: Scores): number;
|
|
73
|
+
/**
|
|
74
|
+
* Get letter grade from score.
|
|
75
|
+
*/
|
|
76
|
+
export declare function scoreToGrade(score: number): string;
|
|
77
|
+
/**
|
|
78
|
+
* Get compatibility score between two technologies.
|
|
79
|
+
* Returns 50 (neutral) if no direct compatibility is defined.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getCompatibility(techA: string, techB: string): number;
|
|
82
|
+
/**
|
|
83
|
+
* Get compatibility verdict.
|
|
84
|
+
*/
|
|
85
|
+
export declare function getCompatibilityVerdict(score: number): string;
|
|
86
|
+
/**
|
|
87
|
+
* Find compatible technologies for a given tech.
|
|
88
|
+
* Returns sorted by compatibility score (descending).
|
|
89
|
+
*/
|
|
90
|
+
export declare function findCompatibleTechs(techId: string, limit?: number): Array<{
|
|
91
|
+
id: string;
|
|
92
|
+
score: number;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Find similar technology IDs using Levenshtein distance.
|
|
96
|
+
*/
|
|
97
|
+
export declare function findSimilarTechIds(input: string, limit?: number): string[];
|
|
98
|
+
/**
|
|
99
|
+
* Check if a technology ID exists.
|
|
100
|
+
*/
|
|
101
|
+
export declare function techExists(id: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get source data version from JSON files.
|
|
104
|
+
*/
|
|
105
|
+
export declare function getSourceDataVersion(): {
|
|
106
|
+
scores: string;
|
|
107
|
+
compatibility: string;
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,eAAO,MAAM,YAAY,eAAe,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,gBAAgB,wEAAyE,CAAC;AACvG,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAO3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,sGASb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,QAAQ,2CAA4C,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CAChC;AAoBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,EAAE,CAE/C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAExE;AAED;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAmB/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAmB,GAAG,MAAM,GAAG,IAAI,CAIrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAclD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAcrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAKhF"}
|