@girardmedia/bootspring 1.2.0 → 2.0.3
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 +107 -14
- package/bin/bootspring.js +166 -27
- package/cli/agent.js +189 -17
- package/cli/analyze.js +499 -0
- package/cli/audit.js +557 -0
- package/cli/auth.js +495 -38
- package/cli/billing.js +302 -0
- package/cli/build.js +695 -0
- package/cli/business.js +109 -26
- package/cli/checkpoint-utils.js +168 -0
- package/cli/checkpoint.js +639 -0
- package/cli/cloud-sync.js +447 -0
- package/cli/content.js +198 -0
- package/cli/context.js +1 -1
- package/cli/deploy.js +543 -0
- package/cli/fundraise.js +112 -50
- package/cli/github-cmd.js +435 -0
- package/cli/health.js +477 -0
- package/cli/init.js +84 -13
- package/cli/legal.js +107 -95
- package/cli/log.js +2 -2
- package/cli/loop.js +976 -73
- package/cli/manager.js +711 -0
- package/cli/metrics.js +480 -0
- package/cli/monitor.js +812 -0
- package/cli/onboard.js +521 -0
- package/cli/orchestrator.js +12 -24
- package/cli/prd.js +594 -0
- package/cli/preseed-start.js +1483 -0
- package/cli/preseed.js +2302 -0
- package/cli/project.js +436 -0
- package/cli/quality.js +233 -0
- package/cli/security.js +913 -0
- package/cli/seed.js +1441 -5
- package/cli/skill.js +273 -211
- package/cli/suggest.js +989 -0
- package/cli/switch.js +453 -0
- package/cli/visualize.js +527 -0
- package/cli/watch.js +769 -0
- package/cli/workspace.js +607 -0
- package/core/analyze-workflow.js +1134 -0
- package/core/api-client.js +535 -22
- package/core/audit-workflow.js +1350 -0
- package/core/build-orchestrator.js +480 -0
- package/core/build-state.js +577 -0
- package/core/checkpoint-engine.js +408 -0
- package/core/config.js +1109 -26
- package/core/context-loader.js +21 -1
- package/core/deploy-workflow.js +836 -0
- package/core/entitlements.js +93 -22
- package/core/github-sync.js +610 -0
- package/core/index.js +8 -1
- package/core/ingest.js +1111 -0
- package/core/metrics-engine.js +768 -0
- package/core/onboard-workflow.js +1007 -0
- package/core/preseed-workflow.js +934 -0
- package/core/preseed.js +1617 -0
- package/core/project-context.js +325 -0
- package/core/project-state.js +694 -0
- package/core/r2-sync.js +583 -0
- package/core/scaffold.js +525 -7
- package/core/session.js +258 -0
- package/core/task-extractor.js +758 -0
- package/core/telemetry.js +28 -6
- package/core/tier-enforcement.js +737 -0
- package/core/utils.js +38 -14
- package/generators/questionnaire.js +15 -12
- package/generators/sections/ai.js +7 -7
- package/generators/sections/content.js +300 -0
- package/generators/sections/index.js +3 -0
- package/generators/sections/plugins.js +7 -6
- package/generators/templates/build-planning.template.js +596 -0
- package/generators/templates/content.template.js +819 -0
- package/generators/templates/index.js +2 -1
- package/hooks/git-autopilot.js +1250 -0
- package/hooks/index.js +9 -0
- package/intelligence/agent-collab.js +2057 -0
- package/intelligence/auto-suggest.js +634 -0
- package/intelligence/content-gen.js +1589 -0
- package/intelligence/cross-project.js +1647 -0
- package/intelligence/index.js +184 -0
- package/intelligence/learning/insights.json +517 -7
- package/intelligence/learning/pattern-learner.js +1008 -14
- package/intelligence/memory/decision-tracker.js +1431 -31
- package/intelligence/memory/decisions.jsonl +0 -0
- package/intelligence/orchestrator.js +2896 -1
- package/intelligence/prd.js +92 -1
- package/intelligence/recommendation-weights.json +14 -2
- package/intelligence/recommendations.js +463 -9
- package/intelligence/workflow-composer.js +1451 -0
- package/marketplace/index.d.ts +324 -0
- package/marketplace/index.js +1921 -0
- package/mcp/contracts/mcp-contract.v1.json +342 -4
- package/mcp/registry.js +680 -3
- package/mcp/response-formatter.js +23 -0
- package/mcp/tools/assist-tool.js +78 -4
- package/mcp/tools/autopilot-tool.js +408 -0
- package/mcp/tools/content-tool.js +571 -0
- package/mcp/tools/dashboard-tool.js +251 -5
- package/mcp/tools/mvp-tool.js +344 -0
- package/mcp/tools/plugin-tool.js +23 -1
- package/mcp/tools/prd-tool.js +579 -0
- package/mcp/tools/seed-tool.js +447 -0
- package/mcp/tools/skill-tool.js +43 -14
- package/mcp/tools/suggest-tool.js +147 -0
- package/package.json +15 -6
- package/agents/README.md +0 -93
- package/agents/ai-integration-expert/context.md +0 -386
- package/agents/api-expert/context.md +0 -416
- package/agents/architecture-expert/context.md +0 -454
- package/agents/auth-expert/context.md +0 -399
- package/agents/backend-expert/context.md +0 -483
- package/agents/business-strategy-expert/context.md +0 -180
- package/agents/code-review-expert/context.md +0 -365
- package/agents/competitive-analysis-expert/context.md +0 -239
- package/agents/data-modeling-expert/context.md +0 -352
- package/agents/database-expert/context.md +0 -250
- package/agents/devops-expert/context.md +0 -446
- package/agents/email-expert/context.md +0 -379
- package/agents/financial-expert/context.md +0 -213
- package/agents/frontend-expert/context.md +0 -364
- package/agents/fundraising-expert/context.md +0 -257
- package/agents/growth-expert/context.md +0 -249
- package/agents/index.js +0 -140
- package/agents/investor-relations-expert/context.md +0 -266
- package/agents/legal-expert/context.md +0 -284
- package/agents/marketing-expert/context.md +0 -236
- package/agents/monitoring-expert/context.md +0 -362
- package/agents/operations-expert/context.md +0 -279
- package/agents/partnerships-expert/context.md +0 -286
- package/agents/payment-expert/context.md +0 -340
- package/agents/performance-expert/context.md +0 -377
- package/agents/private-equity-expert/context.md +0 -246
- package/agents/railway-expert/context.md +0 -284
- package/agents/research-expert/context.md +0 -245
- package/agents/sales-expert/context.md +0 -241
- package/agents/security-expert/context.md +0 -343
- package/agents/testing-expert/context.md +0 -414
- package/agents/ui-ux-expert/context.md +0 -448
- package/agents/vercel-expert/context.md +0 -426
- package/skills/index.js +0 -787
- package/skills/patterns/README.md +0 -163
- package/skills/patterns/ai/agents.md +0 -281
- package/skills/patterns/ai/claude.md +0 -138
- package/skills/patterns/ai/embeddings.md +0 -150
- package/skills/patterns/ai/rag.md +0 -266
- package/skills/patterns/ai/streaming.md +0 -170
- package/skills/patterns/ai/structured-output.md +0 -162
- package/skills/patterns/ai/tools.md +0 -154
- package/skills/patterns/analytics/tracking.md +0 -220
- package/skills/patterns/api/errors.md +0 -296
- package/skills/patterns/api/graphql.md +0 -440
- package/skills/patterns/api/middleware.md +0 -279
- package/skills/patterns/api/openapi.md +0 -285
- package/skills/patterns/api/rate-limiting.md +0 -231
- package/skills/patterns/api/route-handler.md +0 -217
- package/skills/patterns/api/server-action.md +0 -249
- package/skills/patterns/api/versioning.md +0 -443
- package/skills/patterns/api/webhooks.md +0 -247
- package/skills/patterns/auth/clerk.md +0 -132
- package/skills/patterns/auth/mfa.md +0 -313
- package/skills/patterns/auth/nextauth.md +0 -140
- package/skills/patterns/auth/oauth.md +0 -237
- package/skills/patterns/auth/rbac.md +0 -152
- package/skills/patterns/auth/session-management.md +0 -367
- package/skills/patterns/auth/session.md +0 -120
- package/skills/patterns/database/audit.md +0 -177
- package/skills/patterns/database/migrations.md +0 -177
- package/skills/patterns/database/pagination.md +0 -230
- package/skills/patterns/database/pooling.md +0 -357
- package/skills/patterns/database/prisma.md +0 -180
- package/skills/patterns/database/relations.md +0 -187
- package/skills/patterns/database/seeding.md +0 -246
- package/skills/patterns/database/soft-delete.md +0 -153
- package/skills/patterns/database/transactions.md +0 -162
- package/skills/patterns/deployment/ci-cd.md +0 -231
- package/skills/patterns/deployment/docker.md +0 -188
- package/skills/patterns/deployment/monitoring.md +0 -387
- package/skills/patterns/deployment/vercel.md +0 -160
- package/skills/patterns/email/resend.md +0 -143
- package/skills/patterns/email/templates.md +0 -245
- package/skills/patterns/email/transactional.md +0 -503
- package/skills/patterns/email/verification.md +0 -176
- package/skills/patterns/files/download.md +0 -243
- package/skills/patterns/files/upload.md +0 -239
- package/skills/patterns/i18n/nextintl.md +0 -188
- package/skills/patterns/logging/structured.md +0 -292
- package/skills/patterns/notifications/email-queue.md +0 -248
- package/skills/patterns/notifications/push.md +0 -279
- package/skills/patterns/payments/checkout.md +0 -303
- package/skills/patterns/payments/invoices.md +0 -287
- package/skills/patterns/payments/portal.md +0 -245
- package/skills/patterns/payments/stripe.md +0 -272
- package/skills/patterns/payments/subscriptions.md +0 -300
- package/skills/patterns/payments/usage.md +0 -279
- package/skills/patterns/performance/caching.md +0 -276
- package/skills/patterns/performance/code-splitting.md +0 -233
- package/skills/patterns/performance/edge.md +0 -254
- package/skills/patterns/performance/isr.md +0 -266
- package/skills/patterns/performance/lazy-loading.md +0 -281
- package/skills/patterns/realtime/sse.md +0 -327
- package/skills/patterns/realtime/websockets.md +0 -336
- package/skills/patterns/search/filtering.md +0 -329
- package/skills/patterns/search/fulltext.md +0 -260
- package/skills/patterns/security/audit-logging.md +0 -444
- package/skills/patterns/security/csrf.md +0 -234
- package/skills/patterns/security/headers.md +0 -252
- package/skills/patterns/security/sanitization.md +0 -258
- package/skills/patterns/security/secrets.md +0 -261
- package/skills/patterns/security/validation.md +0 -268
- package/skills/patterns/security/xss.md +0 -229
- package/skills/patterns/seo/metadata.md +0 -252
- package/skills/patterns/state/context.md +0 -349
- package/skills/patterns/state/react-query.md +0 -313
- package/skills/patterns/state/url-state.md +0 -482
- package/skills/patterns/state/zustand.md +0 -262
- package/skills/patterns/testing/api.md +0 -259
- package/skills/patterns/testing/component.md +0 -233
- package/skills/patterns/testing/coverage.md +0 -207
- package/skills/patterns/testing/fixtures.md +0 -225
- package/skills/patterns/testing/integration.md +0 -436
- package/skills/patterns/testing/mocking.md +0 -177
- package/skills/patterns/testing/playwright.md +0 -162
- package/skills/patterns/testing/snapshot.md +0 -175
- package/skills/patterns/testing/vitest.md +0 -307
- package/skills/patterns/ui/accordions.md +0 -395
- package/skills/patterns/ui/cards.md +0 -299
- package/skills/patterns/ui/dropdowns.md +0 -476
- package/skills/patterns/ui/empty-states.md +0 -320
- package/skills/patterns/ui/forms.md +0 -405
- package/skills/patterns/ui/inputs.md +0 -319
- package/skills/patterns/ui/layouts.md +0 -282
- package/skills/patterns/ui/loading.md +0 -291
- package/skills/patterns/ui/modals.md +0 -338
- package/skills/patterns/ui/navigation.md +0 -374
- package/skills/patterns/ui/tables.md +0 -407
- package/skills/patterns/ui/toasts.md +0 -300
- package/skills/patterns/ui/tooltips.md +0 -396
- package/skills/patterns/utils/dates.md +0 -435
- package/skills/patterns/utils/errors.md +0 -451
- package/skills/patterns/utils/formatting.md +0 -345
- package/skills/patterns/utils/validation.md +0 -434
- package/templates/bootspring.config.js +0 -83
- package/templates/business/business-model-canvas.md +0 -246
- package/templates/business/business-plan.md +0 -266
- package/templates/business/competitive-analysis.md +0 -312
- package/templates/fundraising/data-room-checklist.md +0 -300
- package/templates/fundraising/investor-research.md +0 -243
- package/templates/fundraising/pitch-deck-outline.md +0 -253
- package/templates/legal/gdpr-checklist.md +0 -339
- package/templates/legal/privacy-policy.md +0 -285
- package/templates/legal/terms-of-service.md +0 -222
- package/templates/mcp.json +0 -9
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
# Code Review Expert Agent
|
|
2
|
-
|
|
3
|
-
## Role
|
|
4
|
-
Specialized in code review, best practices, code quality, identifying improvements, and ensuring maintainable, readable code.
|
|
5
|
-
|
|
6
|
-
## Core Expertise
|
|
7
|
-
|
|
8
|
-
### Code Review Checklist
|
|
9
|
-
|
|
10
|
-
#### Functionality
|
|
11
|
-
- [ ] Code does what it's supposed to do
|
|
12
|
-
- [ ] Edge cases handled
|
|
13
|
-
- [ ] Error handling is comprehensive
|
|
14
|
-
- [ ] No regression in existing functionality
|
|
15
|
-
|
|
16
|
-
#### Security
|
|
17
|
-
- [ ] Input validation present
|
|
18
|
-
- [ ] No SQL injection vulnerabilities
|
|
19
|
-
- [ ] No XSS vulnerabilities
|
|
20
|
-
- [ ] Authentication/authorization checked
|
|
21
|
-
- [ ] Sensitive data not exposed
|
|
22
|
-
|
|
23
|
-
#### Performance
|
|
24
|
-
- [ ] No N+1 queries
|
|
25
|
-
- [ ] Appropriate indexing considered
|
|
26
|
-
- [ ] No memory leaks
|
|
27
|
-
- [ ] Efficient algorithms used
|
|
28
|
-
|
|
29
|
-
#### Maintainability
|
|
30
|
-
- [ ] Code is readable
|
|
31
|
-
- [ ] Functions are focused (single responsibility)
|
|
32
|
-
- [ ] No magic numbers/strings
|
|
33
|
-
- [ ] Appropriate comments for complex logic
|
|
34
|
-
|
|
35
|
-
#### Testing
|
|
36
|
-
- [ ] Unit tests added for new code
|
|
37
|
-
- [ ] Edge cases tested
|
|
38
|
-
- [ ] Tests are meaningful, not just coverage
|
|
39
|
-
|
|
40
|
-
### Common Issues & Fixes
|
|
41
|
-
|
|
42
|
-
#### 1. Async/Await Mistakes
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
// Bad: Sequential when could be parallel
|
|
46
|
-
async function getBothUsers(id1: string, id2: string) {
|
|
47
|
-
const user1 = await getUser(id1);
|
|
48
|
-
const user2 = await getUser(id2);
|
|
49
|
-
return [user1, user2];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Good: Parallel execution
|
|
53
|
-
async function getBothUsers(id1: string, id2: string) {
|
|
54
|
-
const [user1, user2] = await Promise.all([
|
|
55
|
-
getUser(id1),
|
|
56
|
-
getUser(id2),
|
|
57
|
-
]);
|
|
58
|
-
return [user1, user2];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Bad: Missing error handling
|
|
62
|
-
async function fetchData() {
|
|
63
|
-
const data = await fetch('/api/data').then(r => r.json());
|
|
64
|
-
return data;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Good: Proper error handling
|
|
68
|
-
async function fetchData() {
|
|
69
|
-
const response = await fetch('/api/data');
|
|
70
|
-
if (!response.ok) {
|
|
71
|
-
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
72
|
-
}
|
|
73
|
-
return response.json();
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
#### 2. React Anti-patterns
|
|
78
|
-
|
|
79
|
-
```tsx
|
|
80
|
-
// Bad: useEffect for derived state
|
|
81
|
-
function BadComponent({ items }) {
|
|
82
|
-
const [count, setCount] = useState(0);
|
|
83
|
-
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
setCount(items.length);
|
|
86
|
-
}, [items]);
|
|
87
|
-
|
|
88
|
-
return <div>Count: {count}</div>;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Good: Derive directly
|
|
92
|
-
function GoodComponent({ items }) {
|
|
93
|
-
const count = items.length;
|
|
94
|
-
return <div>Count: {count}</div>;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Bad: Object/array in dependency array
|
|
98
|
-
function BadComponent() {
|
|
99
|
-
const options = { enabled: true };
|
|
100
|
-
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
doSomething(options);
|
|
103
|
-
}, [options]); // New object every render!
|
|
104
|
-
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Good: useMemo or extract
|
|
109
|
-
function GoodComponent() {
|
|
110
|
-
const options = useMemo(() => ({ enabled: true }), []);
|
|
111
|
-
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
doSomething(options);
|
|
114
|
-
}, [options]);
|
|
115
|
-
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Bad: Inline function causing re-renders
|
|
120
|
-
function ParentComponent() {
|
|
121
|
-
return (
|
|
122
|
-
<ChildComponent onClick={() => console.log('clicked')} />
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Good: useCallback for stable reference
|
|
127
|
-
function ParentComponent() {
|
|
128
|
-
const handleClick = useCallback(() => {
|
|
129
|
-
console.log('clicked');
|
|
130
|
-
}, []);
|
|
131
|
-
|
|
132
|
-
return <ChildComponent onClick={handleClick} />;
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
#### 3. TypeScript Issues
|
|
137
|
-
|
|
138
|
-
```typescript
|
|
139
|
-
// Bad: Using 'any'
|
|
140
|
-
function processData(data: any) {
|
|
141
|
-
return data.value;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Good: Proper typing
|
|
145
|
-
interface DataItem {
|
|
146
|
-
value: string;
|
|
147
|
-
count: number;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function processData(data: DataItem) {
|
|
151
|
-
return data.value;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Bad: Non-null assertion abuse
|
|
155
|
-
function getUser(users: User[]) {
|
|
156
|
-
return users.find(u => u.active)!.name; // Might be undefined!
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Good: Handle the undefined case
|
|
160
|
-
function getUser(users: User[]) {
|
|
161
|
-
const activeUser = users.find(u => u.active);
|
|
162
|
-
if (!activeUser) {
|
|
163
|
-
throw new Error('No active user found');
|
|
164
|
-
}
|
|
165
|
-
return activeUser.name;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Good: Optional chaining with fallback
|
|
169
|
-
function getUserName(users: User[]) {
|
|
170
|
-
return users.find(u => u.active)?.name ?? 'Unknown';
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
#### 4. Database Query Issues
|
|
175
|
-
|
|
176
|
-
```typescript
|
|
177
|
-
// Bad: N+1 query problem
|
|
178
|
-
const posts = await prisma.post.findMany();
|
|
179
|
-
for (const post of posts) {
|
|
180
|
-
post.author = await prisma.user.findUnique({
|
|
181
|
-
where: { id: post.authorId }
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// Good: Include related data
|
|
186
|
-
const posts = await prisma.post.findMany({
|
|
187
|
-
include: { author: true }
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// Bad: Selecting all fields
|
|
191
|
-
const users = await prisma.user.findMany();
|
|
192
|
-
|
|
193
|
-
// Good: Select only needed fields
|
|
194
|
-
const users = await prisma.user.findMany({
|
|
195
|
-
select: {
|
|
196
|
-
id: true,
|
|
197
|
-
name: true,
|
|
198
|
-
email: true,
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Bad: Missing transaction for related operations
|
|
203
|
-
await prisma.order.create({ data: orderData });
|
|
204
|
-
await prisma.inventory.update({ data: inventoryData }); // What if this fails?
|
|
205
|
-
|
|
206
|
-
// Good: Use transaction
|
|
207
|
-
await prisma.$transaction([
|
|
208
|
-
prisma.order.create({ data: orderData }),
|
|
209
|
-
prisma.inventory.update({ data: inventoryData }),
|
|
210
|
-
]);
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
#### 5. Security Issues
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// Bad: SQL injection
|
|
217
|
-
const user = await prisma.$queryRaw`
|
|
218
|
-
SELECT * FROM users WHERE email = '${email}'
|
|
219
|
-
`;
|
|
220
|
-
|
|
221
|
-
// Good: Parameterized query
|
|
222
|
-
const user = await prisma.$queryRaw`
|
|
223
|
-
SELECT * FROM users WHERE email = ${email}
|
|
224
|
-
`;
|
|
225
|
-
|
|
226
|
-
// Bad: Exposing sensitive data
|
|
227
|
-
return NextResponse.json(user); // Includes password hash!
|
|
228
|
-
|
|
229
|
-
// Good: Select safe fields
|
|
230
|
-
return NextResponse.json({
|
|
231
|
-
id: user.id,
|
|
232
|
-
name: user.name,
|
|
233
|
-
email: user.email,
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
// Bad: Trusting user input
|
|
237
|
-
const { role } = await request.json();
|
|
238
|
-
await prisma.user.update({
|
|
239
|
-
where: { id },
|
|
240
|
-
data: { role } // User can set themselves as admin!
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
// Good: Validate and restrict
|
|
244
|
-
const { role } = await request.json();
|
|
245
|
-
const allowedRoles = ['user', 'editor'];
|
|
246
|
-
if (!allowedRoles.includes(role)) {
|
|
247
|
-
return NextResponse.json({ error: 'Invalid role' }, { status: 400 });
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Code Smells to Watch For
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
// 1. Long functions (> 30 lines)
|
|
255
|
-
// Split into smaller, focused functions
|
|
256
|
-
|
|
257
|
-
// 2. Deep nesting
|
|
258
|
-
// Bad
|
|
259
|
-
if (user) {
|
|
260
|
-
if (user.isActive) {
|
|
261
|
-
if (user.hasPermission) {
|
|
262
|
-
// do something
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Good: Early returns
|
|
268
|
-
if (!user) return;
|
|
269
|
-
if (!user.isActive) return;
|
|
270
|
-
if (!user.hasPermission) return;
|
|
271
|
-
// do something
|
|
272
|
-
|
|
273
|
-
// 3. Magic numbers
|
|
274
|
-
// Bad
|
|
275
|
-
if (items.length > 50) { /* ... */ }
|
|
276
|
-
|
|
277
|
-
// Good
|
|
278
|
-
const MAX_ITEMS = 50;
|
|
279
|
-
if (items.length > MAX_ITEMS) { /* ... */ }
|
|
280
|
-
|
|
281
|
-
// 4. Duplicated code
|
|
282
|
-
// Extract into reusable function or component
|
|
283
|
-
|
|
284
|
-
// 5. Dead code
|
|
285
|
-
// Remove unused imports, variables, functions
|
|
286
|
-
|
|
287
|
-
// 6. Inconsistent naming
|
|
288
|
-
// Follow conventions: camelCase for variables, PascalCase for components
|
|
289
|
-
|
|
290
|
-
// 7. Missing error boundaries
|
|
291
|
-
// Add error handling for async operations
|
|
292
|
-
|
|
293
|
-
// 8. Hardcoded values
|
|
294
|
-
// Use environment variables or configuration
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### Review Feedback Templates
|
|
298
|
-
|
|
299
|
-
```markdown
|
|
300
|
-
## Approved ✅
|
|
301
|
-
LGTM! Code is clean and well-structured.
|
|
302
|
-
|
|
303
|
-
## Request Changes 🔄
|
|
304
|
-
### Issue 1: [Brief description]
|
|
305
|
-
**Location:** `file.ts:42`
|
|
306
|
-
**Problem:** [What's wrong]
|
|
307
|
-
**Suggestion:** [How to fix]
|
|
308
|
-
|
|
309
|
-
```typescript
|
|
310
|
-
// Instead of this:
|
|
311
|
-
// current code
|
|
312
|
-
|
|
313
|
-
// Consider this:
|
|
314
|
-
// suggested code
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Issue 2: ...
|
|
318
|
-
|
|
319
|
-
## Questions ❓
|
|
320
|
-
- Could you explain the reasoning behind X?
|
|
321
|
-
- Have you considered Y approach?
|
|
322
|
-
|
|
323
|
-
## Suggestions 💡
|
|
324
|
-
Not blocking, but consider:
|
|
325
|
-
- [ ] Optional improvement 1
|
|
326
|
-
- [ ] Optional improvement 2
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Performance Review Checklist
|
|
330
|
-
|
|
331
|
-
```typescript
|
|
332
|
-
// Check for:
|
|
333
|
-
|
|
334
|
-
// 1. Bundle size impact
|
|
335
|
-
// Did new dependencies increase bundle significantly?
|
|
336
|
-
// Can they be dynamically imported?
|
|
337
|
-
|
|
338
|
-
// 2. Render performance
|
|
339
|
-
// Any unnecessary re-renders?
|
|
340
|
-
// Are expensive computations memoized?
|
|
341
|
-
|
|
342
|
-
// 3. Data fetching
|
|
343
|
-
// Are queries optimized?
|
|
344
|
-
// Is caching used appropriately?
|
|
345
|
-
|
|
346
|
-
// 4. Memory usage
|
|
347
|
-
// Are event listeners cleaned up?
|
|
348
|
-
// Are subscriptions unsubscribed?
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
## Review Checklist
|
|
352
|
-
|
|
353
|
-
- [ ] Code compiles without warnings
|
|
354
|
-
- [ ] Tests pass
|
|
355
|
-
- [ ] No console.logs left
|
|
356
|
-
- [ ] Error handling present
|
|
357
|
-
- [ ] Types are correct
|
|
358
|
-
- [ ] No hardcoded secrets
|
|
359
|
-
- [ ] Follows project conventions
|
|
360
|
-
- [ ] Documentation updated if needed
|
|
361
|
-
- [ ] No breaking changes without migration
|
|
362
|
-
- [ ] Accessibility considered
|
|
363
|
-
|
|
364
|
-
## Trigger Keywords
|
|
365
|
-
review, code review, best practice, improve, refactor, clean code, lint, smell, anti-pattern, quality, convention, standard, tech debt
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# Competitive Analysis Expert Agent
|
|
2
|
-
|
|
3
|
-
## Role
|
|
4
|
-
Specialized in competitive intelligence, market research, competitor analysis, and strategic positioning.
|
|
5
|
-
|
|
6
|
-
## Core Expertise
|
|
7
|
-
|
|
8
|
-
### Competitive Analysis Framework
|
|
9
|
-
|
|
10
|
-
```markdown
|
|
11
|
-
## Competitive Landscape Map
|
|
12
|
-
|
|
13
|
-
### Direct Competitors
|
|
14
|
-
Companies solving the same problem for the same customer.
|
|
15
|
-
|
|
16
|
-
| Competitor | Positioning | Pricing | Strengths | Weaknesses |
|
|
17
|
-
|------------|-------------|---------|-----------|------------|
|
|
18
|
-
| Company A | Enterprise-first | $$$$ | Brand, features | Slow, expensive |
|
|
19
|
-
| Company B | SMB-focused | $$ | Easy to use | Limited features |
|
|
20
|
-
| Company C | Developer tools | $$$ | Technical depth | Poor UX |
|
|
21
|
-
|
|
22
|
-
### Indirect Competitors
|
|
23
|
-
Alternative solutions or adjacent products.
|
|
24
|
-
|
|
25
|
-
| Alternative | How They Compete | Our Advantage |
|
|
26
|
-
|-------------|------------------|---------------|
|
|
27
|
-
| Manual process | Status quo | Time savings |
|
|
28
|
-
| Build in-house | DIY approach | Cost, expertise |
|
|
29
|
-
| Different tool | Category substitute | Specialization |
|
|
30
|
-
|
|
31
|
-
### Potential Competitors
|
|
32
|
-
Future threats from adjacent markets.
|
|
33
|
-
|
|
34
|
-
- Big tech entering space
|
|
35
|
-
- Well-funded startups
|
|
36
|
-
- International players
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Competitor Deep Dive Template
|
|
40
|
-
|
|
41
|
-
```markdown
|
|
42
|
-
## Competitor Profile: [Company Name]
|
|
43
|
-
|
|
44
|
-
### Overview
|
|
45
|
-
- **Founded**: Year
|
|
46
|
-
- **Funding**: $X raised, Stage
|
|
47
|
-
- **Team Size**: X employees
|
|
48
|
-
- **HQ**: Location
|
|
49
|
-
|
|
50
|
-
### Product
|
|
51
|
-
- **Core Offering**: Description
|
|
52
|
-
- **Key Features**:
|
|
53
|
-
- Feature 1
|
|
54
|
-
- Feature 2
|
|
55
|
-
- Feature 3
|
|
56
|
-
- **Integrations**: List key integrations
|
|
57
|
-
- **Tech Stack**: Known technologies
|
|
58
|
-
|
|
59
|
-
### Pricing
|
|
60
|
-
| Tier | Price | Features |
|
|
61
|
-
|------|-------|----------|
|
|
62
|
-
| Free | $0 | Limited |
|
|
63
|
-
| Pro | $X/mo | Standard |
|
|
64
|
-
| Enterprise | Custom | Full |
|
|
65
|
-
|
|
66
|
-
### Go-to-Market
|
|
67
|
-
- **Target Customer**: Description
|
|
68
|
-
- **Sales Motion**: Self-serve / Sales-led
|
|
69
|
-
- **Key Channels**: Where they acquire customers
|
|
70
|
-
|
|
71
|
-
### Strengths
|
|
72
|
-
- Strength 1
|
|
73
|
-
- Strength 2
|
|
74
|
-
- Strength 3
|
|
75
|
-
|
|
76
|
-
### Weaknesses
|
|
77
|
-
- Weakness 1
|
|
78
|
-
- Weakness 2
|
|
79
|
-
- Weakness 3
|
|
80
|
-
|
|
81
|
-
### Recent Moves
|
|
82
|
-
- Product launches
|
|
83
|
-
- Funding rounds
|
|
84
|
-
- Key hires
|
|
85
|
-
- Partnerships
|
|
86
|
-
|
|
87
|
-
### Sources
|
|
88
|
-
- Website: URL
|
|
89
|
-
- LinkedIn: URL
|
|
90
|
-
- Crunchbase: URL
|
|
91
|
-
- G2/Capterra: URL
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Feature Comparison Matrix
|
|
95
|
-
|
|
96
|
-
```markdown
|
|
97
|
-
## Feature Comparison
|
|
98
|
-
|
|
99
|
-
| Feature | Us | Comp A | Comp B | Comp C |
|
|
100
|
-
|---------|-----|--------|--------|--------|
|
|
101
|
-
| **Core Features** |
|
|
102
|
-
| Feature 1 | ✅ | ✅ | ✅ | ❌ |
|
|
103
|
-
| Feature 2 | ✅ | ✅ | ❌ | ✅ |
|
|
104
|
-
| Feature 3 | ✅ | ❌ | ✅ | ✅ |
|
|
105
|
-
| **Integrations** |
|
|
106
|
-
| Slack | ✅ | ✅ | ✅ | ❌ |
|
|
107
|
-
| GitHub | ✅ | ❌ | ✅ | ✅ |
|
|
108
|
-
| **Support** |
|
|
109
|
-
| Chat support | ✅ | ✅ | ❌ | ❌ |
|
|
110
|
-
| Phone support | ❌ | ✅ | ❌ | ❌ |
|
|
111
|
-
| **Pricing** |
|
|
112
|
-
| Free tier | ✅ | ❌ | ✅ | ✅ |
|
|
113
|
-
| Starting price | $29 | $99 | $49 | $19 |
|
|
114
|
-
|
|
115
|
-
### Legend
|
|
116
|
-
- ✅ Full support
|
|
117
|
-
- 🟡 Partial/Beta
|
|
118
|
-
- ❌ Not available
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Win/Loss Analysis
|
|
122
|
-
|
|
123
|
-
```markdown
|
|
124
|
-
## Win/Loss Analysis Framework
|
|
125
|
-
|
|
126
|
-
### Data Collection
|
|
127
|
-
For each closed opportunity, capture:
|
|
128
|
-
- Outcome: Won / Lost
|
|
129
|
-
- Competitors involved
|
|
130
|
-
- Key decision factors
|
|
131
|
-
- Pricing comparison
|
|
132
|
-
- Decision maker feedback
|
|
133
|
-
|
|
134
|
-
### Win Analysis
|
|
135
|
-
| Factor | Frequency | Impact |
|
|
136
|
-
|--------|-----------|--------|
|
|
137
|
-
| Price | 40% | High |
|
|
138
|
-
| Features | 30% | High |
|
|
139
|
-
| UX/Ease of use | 20% | Medium |
|
|
140
|
-
| Brand/Trust | 10% | Low |
|
|
141
|
-
|
|
142
|
-
### Loss Analysis
|
|
143
|
-
| Reason | Frequency | Competitor |
|
|
144
|
-
|--------|-----------|------------|
|
|
145
|
-
| Missing feature X | 35% | Comp A |
|
|
146
|
-
| Price too high | 25% | Comp B |
|
|
147
|
-
| Existing relationship | 20% | Various |
|
|
148
|
-
| Timing/budget | 20% | N/A |
|
|
149
|
-
|
|
150
|
-
### Action Items
|
|
151
|
-
Based on analysis:
|
|
152
|
-
- [ ] Prioritize feature X development
|
|
153
|
-
- [ ] Review pricing for SMB segment
|
|
154
|
-
- [ ] Improve competitive positioning
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Monitoring System
|
|
158
|
-
|
|
159
|
-
```markdown
|
|
160
|
-
## Competitive Intelligence Sources
|
|
161
|
-
|
|
162
|
-
### Primary Sources
|
|
163
|
-
- **Websites**: Product pages, pricing, changelog
|
|
164
|
-
- **Social Media**: Twitter, LinkedIn, YouTube
|
|
165
|
-
- **Reviews**: G2, Capterra, TrustRadius
|
|
166
|
-
- **Job Postings**: Hiring = investment areas
|
|
167
|
-
|
|
168
|
-
### Secondary Sources
|
|
169
|
-
- **News**: TechCrunch, product launches
|
|
170
|
-
- **Funding**: Crunchbase, PitchBook
|
|
171
|
-
- **Community**: Reddit, HN, Discord
|
|
172
|
-
- **Events**: Conferences, webinars
|
|
173
|
-
|
|
174
|
-
### Monitoring Tools
|
|
175
|
-
| Tool | Purpose | Frequency |
|
|
176
|
-
|------|---------|-----------|
|
|
177
|
-
| Google Alerts | News mentions | Real-time |
|
|
178
|
-
| Visualping | Website changes | Daily |
|
|
179
|
-
| BuiltWith | Tech stack | Monthly |
|
|
180
|
-
| SimilarWeb | Traffic trends | Monthly |
|
|
181
|
-
|
|
182
|
-
### Intelligence Calendar
|
|
183
|
-
- **Weekly**: Social media scan
|
|
184
|
-
- **Monthly**: Website/pricing review
|
|
185
|
-
- **Quarterly**: Deep dive update
|
|
186
|
-
- **Trigger-based**: Funding, launches
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Battle Cards
|
|
190
|
-
|
|
191
|
-
```markdown
|
|
192
|
-
## Battle Card: vs [Competitor Name]
|
|
193
|
-
|
|
194
|
-
### Quick Facts
|
|
195
|
-
- **Founded**: Year
|
|
196
|
-
- **Pricing**: $X-$Y/mo
|
|
197
|
-
- **Best For**: [Customer type]
|
|
198
|
-
|
|
199
|
-
### Their Pitch
|
|
200
|
-
"[How they position themselves]"
|
|
201
|
-
|
|
202
|
-
### Our Counter
|
|
203
|
-
"[How we position against them]"
|
|
204
|
-
|
|
205
|
-
### Why We Win
|
|
206
|
-
1. [Advantage 1]
|
|
207
|
-
2. [Advantage 2]
|
|
208
|
-
3. [Advantage 3]
|
|
209
|
-
|
|
210
|
-
### Why We Lose
|
|
211
|
-
1. [Their advantage 1]
|
|
212
|
-
2. [Their advantage 2]
|
|
213
|
-
|
|
214
|
-
### Common Objections
|
|
215
|
-
**"They have [feature]"**
|
|
216
|
-
Response: "While they offer [feature], our approach of [alternative] actually provides [benefit] because [reason]..."
|
|
217
|
-
|
|
218
|
-
**"They're cheaper"**
|
|
219
|
-
Response: "When you factor in [hidden costs/limitations], our total value is actually better because..."
|
|
220
|
-
|
|
221
|
-
### Trap Questions for Them
|
|
222
|
-
- "How does [their product] handle [our strength]?"
|
|
223
|
-
- "Can you show me [area of weakness]?"
|
|
224
|
-
- "What's the implementation timeline for [complex feature]?"
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## Competitive Analysis Checklist
|
|
228
|
-
|
|
229
|
-
- [ ] Competitor list identified
|
|
230
|
-
- [ ] Deep dives completed
|
|
231
|
-
- [ ] Feature matrix updated
|
|
232
|
-
- [ ] Pricing comparison current
|
|
233
|
-
- [ ] Battle cards created
|
|
234
|
-
- [ ] Win/loss tracking active
|
|
235
|
-
- [ ] Monitoring alerts set up
|
|
236
|
-
- [ ] Regular update cadence
|
|
237
|
-
|
|
238
|
-
## Trigger Keywords
|
|
239
|
-
competitive, competitor, analysis, market research, battle card, win loss, positioning, differentiation, comparison, market intelligence
|