@intentsolutionsio/fullstack-starter-pack 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/.claude-plugin/plugin.json +31 -0
- package/LICENSE +21 -0
- package/README.md +168 -0
- package/agents/api-builder.md +610 -0
- package/agents/backend-architect.md +574 -0
- package/agents/database-designer.md +509 -0
- package/agents/deployment-specialist.md +603 -0
- package/agents/react-specialist.md +668 -0
- package/agents/ui-ux-expert.md +652 -0
- package/commands/auth-setup.md +422 -0
- package/commands/component-generator.md +343 -0
- package/commands/css-utility-generator.md +621 -0
- package/commands/env-config-setup.md +338 -0
- package/commands/express-api-scaffold.md +659 -0
- package/commands/fastapi-scaffold.md +674 -0
- package/commands/prisma-schema-gen.md +582 -0
- package/commands/project-scaffold.md +355 -0
- package/commands/sql-query-builder.md +461 -0
- package/package.json +52 -0
- package/skills/skill-adapter/assets/README.md +8 -0
- package/skills/skill-adapter/assets/config-template.json +32 -0
- package/skills/skill-adapter/assets/example_env_config.txt +100 -0
- package/skills/skill-adapter/assets/skill-schema.json +28 -0
- package/skills/skill-adapter/assets/test-data.json +27 -0
- package/skills/skill-adapter/references/README.md +4 -0
- package/skills/skill-adapter/references/best-practices.md +69 -0
- package/skills/skill-adapter/references/examples.md +73 -0
- package/skills/skill-adapter/scripts/README.md +7 -0
- package/skills/skill-adapter/scripts/helper-template.sh +42 -0
- package/skills/skill-adapter/scripts/validation.sh +32 -0
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sql-query-builder
|
|
3
|
+
description: >
|
|
4
|
+
Generate optimized SQL queries from natural language descriptions
|
|
5
|
+
shortcut: sqb
|
|
6
|
+
category: database
|
|
7
|
+
difficulty: beginner
|
|
8
|
+
estimated_time: 2-3 minutes
|
|
9
|
+
---
|
|
10
|
+
# SQL Query Builder
|
|
11
|
+
|
|
12
|
+
Generates optimized SQL queries from natural language descriptions, supporting SELECT, INSERT, UPDATE, DELETE with JOINs, indexes, and best practices.
|
|
13
|
+
|
|
14
|
+
## What This Command Does
|
|
15
|
+
|
|
16
|
+
**Generated Queries:**
|
|
17
|
+
- SELECT queries with JOINs
|
|
18
|
+
- INSERT, UPDATE, DELETE operations
|
|
19
|
+
- Aggregations and GROUP BY
|
|
20
|
+
- Subqueries and CTEs
|
|
21
|
+
- Indexes and optimization tips
|
|
22
|
+
- PostgreSQL, MySQL, SQLite syntax
|
|
23
|
+
|
|
24
|
+
**Output:** Production-ready SQL queries
|
|
25
|
+
|
|
26
|
+
**Time:** 2-3 minutes
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Generate query from description
|
|
34
|
+
/sql-query-builder "Get all users with their posts"
|
|
35
|
+
|
|
36
|
+
# Shortcut
|
|
37
|
+
/sqb "Find top 10 products by sales"
|
|
38
|
+
|
|
39
|
+
# Complex query
|
|
40
|
+
/sqb "Get users who have made purchases in last 30 days, grouped by country"
|
|
41
|
+
|
|
42
|
+
# Specific database
|
|
43
|
+
/sqb "List orders with customer info" --database postgresql
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Example Output
|
|
49
|
+
|
|
50
|
+
**Input:**
|
|
51
|
+
```
|
|
52
|
+
/sqb "Get all blog posts with author info and comment count, ordered by recent"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Generated SQL:**
|
|
56
|
+
|
|
57
|
+
```sql
|
|
58
|
+
-- Query: Get all blog posts with author info and comment count
|
|
59
|
+
-- Database: PostgreSQL
|
|
60
|
+
-- Optimized for performance with proper indexes
|
|
61
|
+
|
|
62
|
+
-- Main query
|
|
63
|
+
SELECT
|
|
64
|
+
p.id,
|
|
65
|
+
p.title,
|
|
66
|
+
p.slug,
|
|
67
|
+
p.content,
|
|
68
|
+
p.published,
|
|
69
|
+
p.created_at,
|
|
70
|
+
p.updated_at,
|
|
71
|
+
-- Author information
|
|
72
|
+
u.id AS author_id,
|
|
73
|
+
u.name AS author_name,
|
|
74
|
+
u.email AS author_email,
|
|
75
|
+
-- Comment count (calculated)
|
|
76
|
+
COUNT(c.id) AS comment_count
|
|
77
|
+
FROM posts p
|
|
78
|
+
INNER JOIN users u ON p.author_id = u.id
|
|
79
|
+
LEFT JOIN comments c ON p.id = c.post_id
|
|
80
|
+
WHERE p.published = true
|
|
81
|
+
GROUP BY
|
|
82
|
+
p.id,
|
|
83
|
+
p.title,
|
|
84
|
+
p.slug,
|
|
85
|
+
p.content,
|
|
86
|
+
p.published,
|
|
87
|
+
p.created_at,
|
|
88
|
+
p.updated_at,
|
|
89
|
+
u.id,
|
|
90
|
+
u.name,
|
|
91
|
+
u.email
|
|
92
|
+
ORDER BY p.created_at DESC
|
|
93
|
+
LIMIT 20 OFFSET 0;
|
|
94
|
+
|
|
95
|
+
-- Recommended indexes for optimal performance
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_posts_published_created ON posts(published, created_at DESC);
|
|
97
|
+
CREATE INDEX IF NOT EXISTS idx_posts_author_id ON posts(author_id);
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_comments_post_id ON comments(post_id);
|
|
99
|
+
|
|
100
|
+
-- Explain plan (run to verify performance)
|
|
101
|
+
EXPLAIN ANALYZE
|
|
102
|
+
SELECT /* ... query above ... */;
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Query Examples
|
|
108
|
+
|
|
109
|
+
### **1. Simple SELECT**
|
|
110
|
+
|
|
111
|
+
**Request:** "Get all active users"
|
|
112
|
+
|
|
113
|
+
```sql
|
|
114
|
+
SELECT
|
|
115
|
+
id,
|
|
116
|
+
email,
|
|
117
|
+
name,
|
|
118
|
+
created_at
|
|
119
|
+
FROM users
|
|
120
|
+
WHERE active = true
|
|
121
|
+
ORDER BY created_at DESC;
|
|
122
|
+
|
|
123
|
+
-- Index recommendation
|
|
124
|
+
CREATE INDEX idx_users_active ON users(active, created_at DESC);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### **2. JOIN Queries**
|
|
128
|
+
|
|
129
|
+
**Request:** "Get orders with customer and product information"
|
|
130
|
+
|
|
131
|
+
```sql
|
|
132
|
+
SELECT
|
|
133
|
+
o.id AS order_id,
|
|
134
|
+
o.order_date,
|
|
135
|
+
o.total,
|
|
136
|
+
o.status,
|
|
137
|
+
-- Customer info
|
|
138
|
+
c.id AS customer_id,
|
|
139
|
+
c.name AS customer_name,
|
|
140
|
+
c.email AS customer_email,
|
|
141
|
+
-- Order items
|
|
142
|
+
oi.quantity,
|
|
143
|
+
oi.price AS unit_price,
|
|
144
|
+
-- Product info
|
|
145
|
+
p.id AS product_id,
|
|
146
|
+
p.name AS product_name
|
|
147
|
+
FROM orders o
|
|
148
|
+
INNER JOIN customers c ON o.customer_id = c.id
|
|
149
|
+
INNER JOIN order_items oi ON o.id = oi.order_id
|
|
150
|
+
INNER JOIN products p ON oi.product_id = p.id
|
|
151
|
+
WHERE o.created_at >= CURRENT_DATE - INTERVAL '30 days'
|
|
152
|
+
ORDER BY o.created_at DESC;
|
|
153
|
+
|
|
154
|
+
-- Indexes
|
|
155
|
+
CREATE INDEX idx_orders_customer_id ON orders(customer_id);
|
|
156
|
+
CREATE INDEX idx_orders_created_at ON orders(created_at DESC);
|
|
157
|
+
CREATE INDEX idx_order_items_order_id ON order_items(order_id);
|
|
158
|
+
CREATE INDEX idx_order_items_product_id ON order_items(product_id);
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### **3. Aggregations**
|
|
162
|
+
|
|
163
|
+
**Request:** "Get total sales by product category"
|
|
164
|
+
|
|
165
|
+
```sql
|
|
166
|
+
SELECT
|
|
167
|
+
c.name AS category,
|
|
168
|
+
COUNT(DISTINCT o.id) AS order_count,
|
|
169
|
+
SUM(oi.quantity) AS units_sold,
|
|
170
|
+
SUM(oi.quantity * oi.price) AS total_revenue,
|
|
171
|
+
AVG(oi.price) AS avg_price
|
|
172
|
+
FROM categories c
|
|
173
|
+
INNER JOIN products p ON c.id = p.category_id
|
|
174
|
+
INNER JOIN order_items oi ON p.id = oi.product_id
|
|
175
|
+
INNER JOIN orders o ON oi.order_id = o.id
|
|
176
|
+
WHERE o.status = 'completed'
|
|
177
|
+
AND o.created_at >= CURRENT_DATE - INTERVAL '1 year'
|
|
178
|
+
GROUP BY c.id, c.name
|
|
179
|
+
HAVING SUM(oi.quantity * oi.price) > 1000
|
|
180
|
+
ORDER BY total_revenue DESC;
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### **4. Subqueries**
|
|
184
|
+
|
|
185
|
+
**Request:** "Get users who have never made a purchase"
|
|
186
|
+
|
|
187
|
+
```sql
|
|
188
|
+
SELECT
|
|
189
|
+
u.id,
|
|
190
|
+
u.email,
|
|
191
|
+
u.name,
|
|
192
|
+
u.created_at
|
|
193
|
+
FROM users u
|
|
194
|
+
WHERE NOT EXISTS (
|
|
195
|
+
SELECT 1
|
|
196
|
+
FROM orders o
|
|
197
|
+
WHERE o.customer_id = u.id
|
|
198
|
+
)
|
|
199
|
+
ORDER BY u.created_at DESC;
|
|
200
|
+
|
|
201
|
+
-- Alternative using LEFT JOIN (often faster)
|
|
202
|
+
SELECT
|
|
203
|
+
u.id,
|
|
204
|
+
u.email,
|
|
205
|
+
u.name,
|
|
206
|
+
u.created_at
|
|
207
|
+
FROM users u
|
|
208
|
+
LEFT JOIN orders o ON u.id = o.customer_id
|
|
209
|
+
WHERE o.id IS NULL
|
|
210
|
+
ORDER BY u.created_at DESC;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### **5. Common Table Expressions (CTEs)**
|
|
214
|
+
|
|
215
|
+
**Request:** "Get top customers by purchase amount with their order history"
|
|
216
|
+
|
|
217
|
+
```sql
|
|
218
|
+
WITH customer_totals AS (
|
|
219
|
+
SELECT
|
|
220
|
+
c.id,
|
|
221
|
+
c.name,
|
|
222
|
+
c.email,
|
|
223
|
+
COUNT(o.id) AS order_count,
|
|
224
|
+
SUM(o.total) AS total_spent
|
|
225
|
+
FROM customers c
|
|
226
|
+
INNER JOIN orders o ON c.id = o.customer_id
|
|
227
|
+
WHERE o.status = 'completed'
|
|
228
|
+
GROUP BY c.id, c.name, c.email
|
|
229
|
+
HAVING SUM(o.total) > 500
|
|
230
|
+
)
|
|
231
|
+
SELECT
|
|
232
|
+
ct.*,
|
|
233
|
+
o.id AS order_id,
|
|
234
|
+
o.order_date,
|
|
235
|
+
o.total AS order_total
|
|
236
|
+
FROM customer_totals ct
|
|
237
|
+
INNER JOIN orders o ON ct.id = o.customer_id
|
|
238
|
+
ORDER BY ct.total_spent DESC, o.order_date DESC;
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### **6. Window Functions**
|
|
242
|
+
|
|
243
|
+
**Request:** "Rank products by sales within each category"
|
|
244
|
+
|
|
245
|
+
```sql
|
|
246
|
+
SELECT
|
|
247
|
+
p.id,
|
|
248
|
+
p.name AS product_name,
|
|
249
|
+
c.name AS category_name,
|
|
250
|
+
SUM(oi.quantity * oi.price) AS total_sales,
|
|
251
|
+
RANK() OVER (
|
|
252
|
+
PARTITION BY p.category_id
|
|
253
|
+
ORDER BY SUM(oi.quantity * oi.price) DESC
|
|
254
|
+
) AS rank_in_category
|
|
255
|
+
FROM products p
|
|
256
|
+
INNER JOIN categories c ON p.category_id = c.id
|
|
257
|
+
INNER JOIN order_items oi ON p.id = oi.product_id
|
|
258
|
+
INNER JOIN orders o ON oi.order_id = o.id
|
|
259
|
+
WHERE o.status = 'completed'
|
|
260
|
+
GROUP BY p.id, p.name, p.category_id, c.name
|
|
261
|
+
ORDER BY c.name, rank_in_category;
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### **7. INSERT Queries**
|
|
265
|
+
|
|
266
|
+
**Request:** "Insert new user with validation"
|
|
267
|
+
|
|
268
|
+
```sql
|
|
269
|
+
-- Insert single user
|
|
270
|
+
INSERT INTO users (id, email, name, password, created_at, updated_at)
|
|
271
|
+
VALUES (
|
|
272
|
+
gen_random_uuid(),
|
|
273
|
+
'[email protected]',
|
|
274
|
+
'John Doe',
|
|
275
|
+
'hashed_password_here',
|
|
276
|
+
CURRENT_TIMESTAMP,
|
|
277
|
+
CURRENT_TIMESTAMP
|
|
278
|
+
)
|
|
279
|
+
ON CONFLICT (email) DO NOTHING
|
|
280
|
+
RETURNING id, email, name, created_at;
|
|
281
|
+
|
|
282
|
+
-- Bulk insert
|
|
283
|
+
INSERT INTO users (id, email, name, password, created_at, updated_at)
|
|
284
|
+
VALUES
|
|
285
|
+
(gen_random_uuid(), '[email protected]', 'User 1', 'hash1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
|
286
|
+
(gen_random_uuid(), '[email protected]', 'User 2', 'hash2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
|
287
|
+
(gen_random_uuid(), '[email protected]', 'User 3', 'hash3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
288
|
+
ON CONFLICT (email) DO NOTHING;
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### **8. UPDATE Queries**
|
|
292
|
+
|
|
293
|
+
**Request:** "Update product stock after order"
|
|
294
|
+
|
|
295
|
+
```sql
|
|
296
|
+
-- Single update
|
|
297
|
+
UPDATE products
|
|
298
|
+
SET
|
|
299
|
+
stock = stock - 5,
|
|
300
|
+
updated_at = CURRENT_TIMESTAMP
|
|
301
|
+
WHERE id = 'product-uuid-here'
|
|
302
|
+
AND stock >= 5 -- Safety check
|
|
303
|
+
RETURNING id, name, stock;
|
|
304
|
+
|
|
305
|
+
-- Batch update with JOIN
|
|
306
|
+
UPDATE products p
|
|
307
|
+
SET
|
|
308
|
+
stock = p.stock - oi.quantity,
|
|
309
|
+
updated_at = CURRENT_TIMESTAMP
|
|
310
|
+
FROM order_items oi
|
|
311
|
+
WHERE p.id = oi.product_id
|
|
312
|
+
AND oi.order_id = 'order-uuid-here'
|
|
313
|
+
AND p.stock >= oi.quantity;
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### **9. DELETE Queries**
|
|
317
|
+
|
|
318
|
+
**Request:** "Delete old inactive users"
|
|
319
|
+
|
|
320
|
+
```sql
|
|
321
|
+
-- Soft delete (recommended)
|
|
322
|
+
UPDATE users
|
|
323
|
+
SET
|
|
324
|
+
deleted_at = CURRENT_TIMESTAMP,
|
|
325
|
+
updated_at = CURRENT_TIMESTAMP
|
|
326
|
+
WHERE active = false
|
|
327
|
+
AND last_login_at < CURRENT_DATE - INTERVAL '1 year'
|
|
328
|
+
RETURNING id, email;
|
|
329
|
+
|
|
330
|
+
-- Hard delete (with safety checks)
|
|
331
|
+
DELETE FROM users
|
|
332
|
+
WHERE active = false
|
|
333
|
+
AND last_login_at < CURRENT_DATE - INTERVAL '2 years'
|
|
334
|
+
AND id NOT IN (
|
|
335
|
+
SELECT DISTINCT customer_id FROM orders
|
|
336
|
+
);
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### **10. Full-Text Search**
|
|
340
|
+
|
|
341
|
+
**Request:** "Search blog posts by keyword"
|
|
342
|
+
|
|
343
|
+
**PostgreSQL:**
|
|
344
|
+
```sql
|
|
345
|
+
-- Create text search index
|
|
346
|
+
CREATE INDEX idx_posts_search ON posts
|
|
347
|
+
USING GIN (to_tsvector('english', title || ' ' || content));
|
|
348
|
+
|
|
349
|
+
-- Search query
|
|
350
|
+
SELECT
|
|
351
|
+
id,
|
|
352
|
+
title,
|
|
353
|
+
content,
|
|
354
|
+
ts_rank(
|
|
355
|
+
to_tsvector('english', title || ' ' || content),
|
|
356
|
+
plainto_tsquery('english', 'search keywords')
|
|
357
|
+
) AS relevance
|
|
358
|
+
FROM posts
|
|
359
|
+
WHERE to_tsvector('english', title || ' ' || content) @@
|
|
360
|
+
plainto_tsquery('english', 'search keywords')
|
|
361
|
+
AND published = true
|
|
362
|
+
ORDER BY relevance DESC, created_at DESC
|
|
363
|
+
LIMIT 20;
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**MySQL:**
|
|
367
|
+
```sql
|
|
368
|
+
-- Create fulltext index
|
|
369
|
+
CREATE FULLTEXT INDEX idx_posts_search ON posts(title, content);
|
|
370
|
+
|
|
371
|
+
-- Search query
|
|
372
|
+
SELECT
|
|
373
|
+
id,
|
|
374
|
+
title,
|
|
375
|
+
content,
|
|
376
|
+
MATCH(title, content) AGAINST('search keywords' IN NATURAL LANGUAGE MODE) AS relevance
|
|
377
|
+
FROM posts
|
|
378
|
+
WHERE MATCH(title, content) AGAINST('search keywords' IN NATURAL LANGUAGE MODE)
|
|
379
|
+
AND published = true
|
|
380
|
+
ORDER BY relevance DESC, created_at DESC
|
|
381
|
+
LIMIT 20;
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Optimization Tips
|
|
387
|
+
|
|
388
|
+
**1. Use Indexes Wisely:**
|
|
389
|
+
```sql
|
|
390
|
+
-- GOOD: Index foreign keys
|
|
391
|
+
CREATE INDEX idx_posts_author_id ON posts(author_id);
|
|
392
|
+
|
|
393
|
+
-- GOOD: Index columns in WHERE clauses
|
|
394
|
+
CREATE INDEX idx_posts_published ON posts(published, created_at DESC);
|
|
395
|
+
|
|
396
|
+
-- GOOD: Partial index for specific queries
|
|
397
|
+
CREATE INDEX idx_active_users ON users(email) WHERE active = true;
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**2. Avoid SELECT *:**
|
|
401
|
+
```sql
|
|
402
|
+
-- BAD
|
|
403
|
+
SELECT * FROM users;
|
|
404
|
+
|
|
405
|
+
-- GOOD
|
|
406
|
+
SELECT id, email, name FROM users;
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**3. Use LIMIT:**
|
|
410
|
+
```sql
|
|
411
|
+
-- BAD (fetches all rows)
|
|
412
|
+
SELECT * FROM posts ORDER BY created_at DESC;
|
|
413
|
+
|
|
414
|
+
-- GOOD (pagination)
|
|
415
|
+
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20 OFFSET 0;
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**4. Optimize JOINs:**
|
|
419
|
+
```sql
|
|
420
|
+
-- Use INNER JOIN when possible (faster than LEFT JOIN)
|
|
421
|
+
-- Use EXISTS instead of IN for large datasets
|
|
422
|
+
|
|
423
|
+
-- BAD
|
|
424
|
+
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
|
|
425
|
+
|
|
426
|
+
-- GOOD
|
|
427
|
+
SELECT u.* FROM users u WHERE EXISTS (
|
|
428
|
+
SELECT 1 FROM orders o WHERE o.user_id = u.id
|
|
429
|
+
);
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Database-Specific Syntax
|
|
435
|
+
|
|
436
|
+
**PostgreSQL:**
|
|
437
|
+
- `gen_random_uuid()` for UUIDs
|
|
438
|
+
- `INTERVAL` for date math
|
|
439
|
+
- `RETURNING` clause
|
|
440
|
+
- Full-text search with `tsvector`
|
|
441
|
+
|
|
442
|
+
**MySQL:**
|
|
443
|
+
- `UUID()` for UUIDs
|
|
444
|
+
- `DATE_SUB()` for date math
|
|
445
|
+
- FULLTEXT indexes for search
|
|
446
|
+
|
|
447
|
+
**SQLite:**
|
|
448
|
+
- `hex(randomblob(16))` for UUIDs
|
|
449
|
+
- `datetime()` for dates
|
|
450
|
+
- Limited JOIN types
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
## Related Commands
|
|
455
|
+
|
|
456
|
+
- `/prisma-schema-gen` - Generate Prisma schemas
|
|
457
|
+
- Database Designer (agent) - Schema design review
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
**Query smarter. Optimize faster. Scale confidently.**
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@intentsolutionsio/fullstack-starter-pack",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Complete fullstack development toolkit: React, Express/FastAPI, PostgreSQL scaffolding with AI agents",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"fullstack",
|
|
7
|
+
"react",
|
|
8
|
+
"express",
|
|
9
|
+
"fastapi",
|
|
10
|
+
"postgresql",
|
|
11
|
+
"prisma",
|
|
12
|
+
"typescript",
|
|
13
|
+
"authentication",
|
|
14
|
+
"scaffolding",
|
|
15
|
+
"components",
|
|
16
|
+
"api",
|
|
17
|
+
"database",
|
|
18
|
+
"deployment",
|
|
19
|
+
"docker",
|
|
20
|
+
"ci-cd",
|
|
21
|
+
"mvp",
|
|
22
|
+
"claude-code",
|
|
23
|
+
"claude-plugin",
|
|
24
|
+
"tonsofskills"
|
|
25
|
+
],
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/jeremylongshore/claude-code-plugins-plus-skills.git",
|
|
29
|
+
"directory": "plugins/packages/fullstack-starter-pack"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://tonsofskills.com/plugins/fullstack-starter-pack",
|
|
32
|
+
"bugs": "https://github.com/jeremylongshore/claude-code-plugins-plus-skills/issues",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"author": {
|
|
35
|
+
"name": "Jeremy Longshore",
|
|
36
|
+
"email": "[email protected]",
|
|
37
|
+
"url": "https://github.com/jeremylongshore"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"README.md",
|
|
44
|
+
".claude-plugin",
|
|
45
|
+
"skills",
|
|
46
|
+
"commands",
|
|
47
|
+
"agents"
|
|
48
|
+
],
|
|
49
|
+
"scripts": {
|
|
50
|
+
"postinstall": "node -e \"console.log(\\\"\\\\n→ This npm package is a tracking/proof artifact. Install the plugin via:\\\\n ccpi install fullstack-starter-pack\\\\n or /plugin install fullstack-starter-pack@claude-code-plugins-plus in Claude Code\\\\n\\\")\""
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Assets
|
|
2
|
+
|
|
3
|
+
Bundled resources for fullstack-starter-pack skill
|
|
4
|
+
|
|
5
|
+
- [ ] react_component_templates/: Templates for various React components, such as forms, tables, and modals.
|
|
6
|
+
- [ ] express_route_templates/: Templates for various Express routes, such as CRUD operations and authentication endpoints.
|
|
7
|
+
- [ ] postgresql_model_templates/: Templates for various PostgreSQL models, such as users, products, and orders.
|
|
8
|
+
- [ ] example_env_config.txt: An example env config with all the necessary environment variables for the full-stack application.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": {
|
|
3
|
+
"name": "skill-name",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"enabled": true,
|
|
6
|
+
"settings": {
|
|
7
|
+
"verbose": false,
|
|
8
|
+
"autoActivate": true,
|
|
9
|
+
"toolRestrictions": true
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"triggers": {
|
|
13
|
+
"keywords": [
|
|
14
|
+
"example-trigger-1",
|
|
15
|
+
"example-trigger-2"
|
|
16
|
+
],
|
|
17
|
+
"patterns": []
|
|
18
|
+
},
|
|
19
|
+
"tools": {
|
|
20
|
+
"allowed": [
|
|
21
|
+
"Read",
|
|
22
|
+
"Grep",
|
|
23
|
+
"Bash"
|
|
24
|
+
],
|
|
25
|
+
"restricted": []
|
|
26
|
+
},
|
|
27
|
+
"metadata": {
|
|
28
|
+
"author": "Plugin Author",
|
|
29
|
+
"category": "general",
|
|
30
|
+
"tags": []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Fullstack Starter Pack - Example Environment Configuration
|
|
2
|
+
|
|
3
|
+
# This file provides example environment variables for the full-stack application.
|
|
4
|
+
# Copy this file to .env (or .env.production, .env.development as needed) and
|
|
5
|
+
# fill in the values according to your setup.
|
|
6
|
+
|
|
7
|
+
# ==============================================================================
|
|
8
|
+
# General Application Configuration
|
|
9
|
+
# ==============================================================================
|
|
10
|
+
|
|
11
|
+
NODE_ENV=development # Set to 'production' for production environments
|
|
12
|
+
|
|
13
|
+
# Application Port (frontend and backend)
|
|
14
|
+
PORT=3000 # Frontend port (e.g., React app)
|
|
15
|
+
BACKEND_PORT=8000 # Backend port (e.g., Express/FastAPI server)
|
|
16
|
+
|
|
17
|
+
# API Base URL (Used by frontend to connect to backend)
|
|
18
|
+
REACT_APP_API_BASE_URL=http://localhost:8000 # Adjust for production deployment
|
|
19
|
+
|
|
20
|
+
# ==============================================================================
|
|
21
|
+
# Database Configuration (PostgreSQL)
|
|
22
|
+
# ==============================================================================
|
|
23
|
+
|
|
24
|
+
# Database Host (e.g., localhost, IP address, or Docker service name)
|
|
25
|
+
DB_HOST=localhost
|
|
26
|
+
|
|
27
|
+
# Database Port
|
|
28
|
+
DB_PORT=5432
|
|
29
|
+
|
|
30
|
+
# Database Name
|
|
31
|
+
DB_NAME=your_database_name
|
|
32
|
+
|
|
33
|
+
# Database User
|
|
34
|
+
DB_USER=your_database_user
|
|
35
|
+
|
|
36
|
+
# Database Password
|
|
37
|
+
DB_PASSWORD=your_database_password
|
|
38
|
+
|
|
39
|
+
# Enable SSL for database connection (recommended for production)
|
|
40
|
+
DB_SSL=false # Set to 'true' for SSL enabled connections. Requires SSL certificates.
|
|
41
|
+
|
|
42
|
+
# ==============================================================================
|
|
43
|
+
# Backend Configuration (Express/FastAPI)
|
|
44
|
+
# ==============================================================================
|
|
45
|
+
|
|
46
|
+
# Session Secret (Used for session management - MUST be a strong, random string)
|
|
47
|
+
SESSION_SECRET=your_super_secret_session_key
|
|
48
|
+
|
|
49
|
+
# JWT Secret (Used for JWT authentication - MUST be a strong, random string)
|
|
50
|
+
JWT_SECRET=your_super_secret_jwt_key
|
|
51
|
+
|
|
52
|
+
# CORS Configuration (Comma-separated list of allowed origins)
|
|
53
|
+
CORS_ORIGIN=http://localhost:3000 # Add your frontend URL(s) here. Use '*' for all origins (NOT recommended for production).
|
|
54
|
+
|
|
55
|
+
# ==============================================================================
|
|
56
|
+
# AI Agent Configuration (Optional - if using AI features)
|
|
57
|
+
# ==============================================================================
|
|
58
|
+
|
|
59
|
+
# OpenAI API Key (Required if using OpenAI models)
|
|
60
|
+
OPENAI_API_KEY=your_openai_api_key
|
|
61
|
+
|
|
62
|
+
# Other AI Provider API Keys (e.g., Cohere, Anthropic) - Add as needed
|
|
63
|
+
# COHERE_API_KEY=your_cohere_api_key
|
|
64
|
+
# ANTHROPIC_API_KEY=your_anthropic_api_key
|
|
65
|
+
|
|
66
|
+
# ==============================================================================
|
|
67
|
+
# Logging Configuration (Optional)
|
|
68
|
+
# ==============================================================================
|
|
69
|
+
|
|
70
|
+
# Log Level (e.g., 'debug', 'info', 'warn', 'error')
|
|
71
|
+
LOG_LEVEL=info
|
|
72
|
+
|
|
73
|
+
# ==============================================================================
|
|
74
|
+
# Email Configuration (Optional - if using email features)
|
|
75
|
+
# ==============================================================================
|
|
76
|
+
|
|
77
|
+
# Email Service (e.g., 'nodemailer', 'sendgrid')
|
|
78
|
+
EMAIL_SERVICE=nodemailer
|
|
79
|
+
|
|
80
|
+
# Email Host (e.g., SMTP server address)
|
|
81
|
+
EMAIL_HOST=smtp.example.com
|
|
82
|
+
|
|
83
|
+
# Email Port
|
|
84
|
+
EMAIL_PORT=587
|
|
85
|
+
|
|
86
|
+
# Email User
|
|
87
|
+
EMAIL_USER=your_email@example.com
|
|
88
|
+
|
|
89
|
+
# Email Password
|
|
90
|
+
EMAIL_PASSWORD=your_email_password
|
|
91
|
+
|
|
92
|
+
# Email From Address (The address emails will be sent from)
|
|
93
|
+
EMAIL_FROM=your_email@example.com
|
|
94
|
+
|
|
95
|
+
# ==============================================================================
|
|
96
|
+
# Deployment Configuration (Optional)
|
|
97
|
+
# ==============================================================================
|
|
98
|
+
|
|
99
|
+
# Base URL for the application (e.g., https://yourdomain.com)
|
|
100
|
+
BASE_URL=http://localhost:3000 # Change to your production URL.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Claude Skill Configuration",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["name", "description"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"name": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"pattern": "^[a-z0-9-]+$",
|
|
10
|
+
"maxLength": 64,
|
|
11
|
+
"description": "Skill identifier (lowercase, hyphens only)"
|
|
12
|
+
},
|
|
13
|
+
"description": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"maxLength": 1024,
|
|
16
|
+
"description": "What the skill does and when to use it"
|
|
17
|
+
},
|
|
18
|
+
"allowed-tools": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Comma-separated list of allowed tools"
|
|
21
|
+
},
|
|
22
|
+
"version": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
25
|
+
"description": "Semantic version (x.y.z)"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"testCases": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Basic activation test",
|
|
5
|
+
"input": "trigger phrase example",
|
|
6
|
+
"expected": {
|
|
7
|
+
"activated": true,
|
|
8
|
+
"toolsUsed": ["Read", "Grep"],
|
|
9
|
+
"success": true
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "Complex workflow test",
|
|
14
|
+
"input": "multi-step trigger example",
|
|
15
|
+
"expected": {
|
|
16
|
+
"activated": true,
|
|
17
|
+
"steps": 3,
|
|
18
|
+
"toolsUsed": ["Read", "Write", "Bash"],
|
|
19
|
+
"success": true
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"fixtures": {
|
|
24
|
+
"sampleInput": "example data",
|
|
25
|
+
"expectedOutput": "processed result"
|
|
26
|
+
}
|
|
27
|
+
}
|