bobs-workshop 0.3.3 → 3.1.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/LICENSE +2 -2
- package/README.md +199 -210
- package/bin/bobs-workshop.js +109 -0
- package/config/agents.json +27 -0
- package/dist/plugins/bobs-workshop.js +34 -0
- package/dist/tools/background-agent/cancel.d.ts +3 -0
- package/dist/tools/background-agent/cancel.d.ts.map +1 -0
- package/dist/tools/background-agent/cancel.js +52 -0
- package/dist/tools/background-agent/concurrency.d.ts +15 -0
- package/dist/tools/background-agent/concurrency.d.ts.map +1 -0
- package/dist/tools/background-agent/concurrency.js +61 -0
- package/dist/tools/background-agent/index.d.ts +8 -0
- package/dist/tools/background-agent/index.d.ts.map +1 -0
- package/dist/tools/background-agent/index.js +7 -0
- package/dist/tools/background-agent/launch.d.ts +6 -0
- package/dist/tools/background-agent/launch.d.ts.map +1 -0
- package/dist/tools/background-agent/launch.js +33 -0
- package/dist/tools/background-agent/list.d.ts +7 -0
- package/dist/tools/background-agent/list.d.ts.map +1 -0
- package/dist/tools/background-agent/list.js +40 -0
- package/dist/tools/background-agent/manager.d.ts +29 -0
- package/dist/tools/background-agent/manager.d.ts.map +1 -0
- package/dist/tools/background-agent/manager.js +377 -0
- package/dist/tools/background-agent/output.d.ts +3 -0
- package/dist/tools/background-agent/output.d.ts.map +1 -0
- package/dist/tools/background-agent/output.js +41 -0
- package/dist/tools/background-agent/types.d.ts +46 -0
- package/dist/tools/background-agent/types.d.ts.map +1 -0
- package/dist/tools/background-agent/types.js +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/manual/index.d.ts +3 -0
- package/dist/tools/manual/index.d.ts.map +1 -0
- package/dist/tools/manual/index.js +2 -0
- package/dist/tools/manual/manual-update.d.ts +4 -0
- package/dist/tools/manual/manual-update.d.ts.map +1 -0
- package/dist/tools/manual/manual-update.js +190 -0
- package/dist/tools/manual/verify-manual.d.ts +4 -0
- package/dist/tools/manual/verify-manual.d.ts.map +1 -0
- package/dist/tools/manual/verify-manual.js +46 -0
- package/package.json +34 -66
- package/postinstall.js +190 -0
- package/src/agents/alice.md +466 -0
- package/src/agents/bob-rev.md +493 -0
- package/src/agents/bob-send.md +277 -0
- package/src/agents/bob.md +442 -0
- package/src/agents/trace.md +451 -0
- package/src/plugins/bobs-workshop.ts +45 -0
- package/src/skills/api-patterns/SKILL.md +376 -0
- package/src/skills/architecture/SKILL.md +271 -0
- package/src/skills/bobs-workshop/performance/icon.svg +3 -0
- package/src/skills/brainstorming/SKILL.md +210 -0
- package/src/skills/clean-code/SKILL.md +151 -0
- package/src/skills/code-review-checklist/SKILL.md +220 -0
- package/src/skills/database-design/SKILL.md +271 -0
- package/src/skills/exploration/SKILL.md +257 -0
- package/src/skills/frontend-ui-ux/SKILL.md +78 -0
- package/src/skills/git-master/SKILL.md +1105 -0
- package/src/skills/performance/SKILL.md +144 -0
- package/src/skills/performance/icon.svg +3 -0
- package/src/skills/plan-writing/SKILL.md +225 -0
- package/src/skills/security/SKILL.md +410 -0
- package/src/skills/simplification/SKILL.md +238 -0
- package/src/skills/systematic-debugging/SKILL.md +175 -0
- package/src/skills/testing-patterns/SKILL.md +305 -0
- package/src/skills/verification/SKILL.md +286 -0
- package/src/tools/background-agent/cancel.ts +67 -0
- package/src/tools/background-agent/concurrency.ts +71 -0
- package/src/tools/background-agent/index.ts +7 -0
- package/src/tools/background-agent/launch.ts +39 -0
- package/src/tools/background-agent/list.ts +50 -0
- package/src/tools/background-agent/manager.ts +455 -0
- package/src/tools/background-agent/output.ts +57 -0
- package/src/tools/background-agent/types.ts +55 -0
- package/src/tools/index.ts +8 -0
- package/src/tools/manual/index.ts +2 -0
- package/src/tools/manual/manual-update.ts +197 -0
- package/src/tools/manual/verify-manual.ts +55 -0
- package/uninstall.js +64 -0
- package/Claude.md +0 -162
- package/bin/bobs-mcp-server.js +0 -11
- package/bin/bobs-mcp.js +0 -130
- package/dist/api/taskLogger.js +0 -106
- package/dist/api/taskLogger.js.map +0 -1
- package/dist/cli/checker.js +0 -401
- package/dist/cli/checker.js.map +0 -1
- package/dist/cli/cleanup.js +0 -131
- package/dist/cli/cleanup.js.map +0 -1
- package/dist/cli/debug.js +0 -157
- package/dist/cli/debug.js.map +0 -1
- package/dist/cli/health.js +0 -97
- package/dist/cli/health.js.map +0 -1
- package/dist/cli/setup.js +0 -81
- package/dist/cli/setup.js.map +0 -1
- package/dist/cli/workshop.js +0 -42
- package/dist/cli/workshop.js.map +0 -1
- package/dist/dashboard/server.js +0 -1203
- package/dist/dashboard/server.js.map +0 -1
- package/dist/index.js +0 -960
- package/dist/index.js.map +0 -1
- package/dist/prompts/architect.js +0 -221
- package/dist/prompts/architect.js.map +0 -1
- package/dist/prompts/debugger.js +0 -257
- package/dist/prompts/debugger.js.map +0 -1
- package/dist/prompts/engineer.js +0 -249
- package/dist/prompts/engineer.js.map +0 -1
- package/dist/prompts/orchestrator.js +0 -304
- package/dist/prompts/orchestrator.js.map +0 -1
- package/dist/prompts/reviewer.js +0 -289
- package/dist/prompts/reviewer.js.map +0 -1
- package/dist/services/activitySummarizer.js +0 -388
- package/dist/services/activitySummarizer.js.map +0 -1
- package/dist/services/changeValidator.js +0 -396
- package/dist/services/changeValidator.js.map +0 -1
- package/dist/services/claudeOrchestrator.js +0 -343
- package/dist/services/claudeOrchestrator.js.map +0 -1
- package/dist/services/fileMonitor.js +0 -250
- package/dist/services/fileMonitor.js.map +0 -1
- package/dist/services/implementationSummarizer.js +0 -306
- package/dist/services/implementationSummarizer.js.map +0 -1
- package/dist/services/liveMonitor.js +0 -315
- package/dist/services/liveMonitor.js.map +0 -1
- package/dist/services/mcpAuditLogger.js +0 -104
- package/dist/services/mcpAuditLogger.js.map +0 -1
- package/dist/services/mcpLogger.js +0 -223
- package/dist/services/mcpLogger.js.map +0 -1
- package/dist/services/tmuxManager.js +0 -541
- package/dist/services/tmuxManager.js.map +0 -1
- package/dist/tools/approvalTools.js +0 -244
- package/dist/tools/approvalTools.js.map +0 -1
- package/dist/tools/autoDebugger.js +0 -147
- package/dist/tools/autoDebugger.js.map +0 -1
- package/dist/tools/cleanupService.js +0 -221
- package/dist/tools/cleanupService.js.map +0 -1
- package/dist/tools/dashboardTools.js +0 -342
- package/dist/tools/dashboardTools.js.map +0 -1
- package/dist/tools/developmentNudges.js +0 -336
- package/dist/tools/developmentNudges.js.map +0 -1
- package/dist/tools/gitTools.js +0 -741
- package/dist/tools/gitTools.js.map +0 -1
- package/dist/tools/orchestratorTools.js +0 -832
- package/dist/tools/orchestratorTools.js.map +0 -1
- package/dist/tools/searchCache.js +0 -64
- package/dist/tools/searchCache.js.map +0 -1
- package/dist/tools/searchTools.js +0 -1107
- package/dist/tools/searchTools.js.map +0 -1
- package/dist/tools/semgrep-patterns.js +0 -296
- package/dist/tools/semgrep-patterns.js.map +0 -1
- package/dist/tools/specTools.js +0 -332
- package/dist/tools/specTools.js.map +0 -1
- package/dist/tools/structural/__tests__/orchestrator.test.js +0 -61
- package/dist/tools/structural/__tests__/orchestrator.test.js.map +0 -1
- package/dist/tools/structural/cache.js +0 -226
- package/dist/tools/structural/cache.js.map +0 -1
- package/dist/tools/structural/engines/python/index.js +0 -118
- package/dist/tools/structural/engines/python/index.js.map +0 -1
- package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +0 -97
- package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +0 -1
- package/dist/tools/structural/engines/typescript/analyzer.js +0 -433
- package/dist/tools/structural/engines/typescript/analyzer.js.map +0 -1
- package/dist/tools/structural/engines/typescript/index.js +0 -381
- package/dist/tools/structural/engines/typescript/index.js.map +0 -1
- package/dist/tools/structural/engines/typescript/utils.js +0 -279
- package/dist/tools/structural/engines/typescript/utils.js.map +0 -1
- package/dist/tools/structural/index.js +0 -248
- package/dist/tools/structural/index.js.map +0 -1
- package/dist/tools/structural/types.js +0 -18
- package/dist/tools/structural/types.js.map +0 -1
- package/dist/tools/tmuxTools.js +0 -100
- package/dist/tools/tmuxTools.js.map +0 -1
- package/dist/tools/workRecorder.js +0 -215
- package/dist/tools/workRecorder.js.map +0 -1
- package/dist/tools/worktreeTools.js +0 -705
- package/dist/tools/worktreeTools.js.map +0 -1
- package/dist/utils/__tests__/integration.test.js +0 -57
- package/dist/utils/__tests__/integration.test.js.map +0 -1
- package/dist/utils/__tests__/serverDetection.test.js +0 -151
- package/dist/utils/__tests__/serverDetection.test.js.map +0 -1
- package/dist/utils/errorHandling.js +0 -336
- package/dist/utils/errorHandling.js.map +0 -1
- package/dist/utils/processManager.js +0 -172
- package/dist/utils/processManager.js.map +0 -1
- package/dist/utils/reliability.js +0 -263
- package/dist/utils/reliability.js.map +0 -1
- package/dist/utils/responseFormatter.js +0 -250
- package/dist/utils/responseFormatter.js.map +0 -1
- package/dist/utils/serverDetection.js +0 -133
- package/dist/utils/serverDetection.js.map +0 -1
- package/dist/utils/specMigration.js +0 -105
- package/dist/utils/specMigration.js.map +0 -1
- package/dist/validation/schemas.js +0 -299
- package/dist/validation/schemas.js.map +0 -1
- package/public/.well-known/mcp/manifest.json +0 -473
- package/public/index.html +0 -3157
- package/public/index.html.backup +0 -2805
- package/public/index.html.backup2 +0 -1292
- package/scripts/cleanup-system-logs.ts +0 -121
- package/scripts/init-workspace.js +0 -63
- package/scripts/install-search-tools.js +0 -116
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-design
|
|
3
|
+
description: Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Database Design
|
|
7
|
+
|
|
8
|
+
> Data modeling principles and best practices for relational and non-relational databases.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Database Selection Framework
|
|
13
|
+
|
|
14
|
+
### When to Use Each Type
|
|
15
|
+
|
|
16
|
+
| Database Type | Best For | Examples |
|
|
17
|
+
|---------------|-----------|-----------|
|
|
18
|
+
| **Relational (SQL)** | Structured data, complex queries, ACID requirements | PostgreSQL, MySQL, SQLite |
|
|
19
|
+
| **Document (NoSQL)** | Flexible schema, hierarchical data, rapid iteration | MongoDB, CouchDB |
|
|
20
|
+
| **Key-Value** | High-speed lookups, caching, simple queries | Redis, DynamoDB |
|
|
21
|
+
| **Graph** | Complex relationships, social networks, recommendations | Neo4j, ArangoDB |
|
|
22
|
+
| **Time-Series** | Metrics, monitoring, IoT data | InfluxDB, TimescaleDB |
|
|
23
|
+
| **Serverless** | Low-traffic apps, pay-per-use, no maintenance | Neon, PlanetScale, Supabase |
|
|
24
|
+
|
|
25
|
+
### Selection Questions
|
|
26
|
+
|
|
27
|
+
1. **Data Structure**: Structured (SQL) vs. flexible (NoSQL)?
|
|
28
|
+
2. **Query Complexity**: Simple lookups (NoSQL) vs. complex joins (SQL)?
|
|
29
|
+
3. **ACID Requirements**: Need transactions (SQL) vs. eventual consistency OK (NoSQL)?
|
|
30
|
+
4. **Scale**: Small-medium (SQL) vs. massive scale (NoSQL)?
|
|
31
|
+
5. **Team Expertise**: What does the team know?
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Schema Design Principles
|
|
36
|
+
|
|
37
|
+
### Normalization vs. Denormalization
|
|
38
|
+
|
|
39
|
+
| Approach | When to Use | Pros | Cons |
|
|
40
|
+
|----------|-------------|-------|-------|
|
|
41
|
+
| **Normalized** | OLTP systems, data integrity, frequent writes | No redundancy, consistent | More joins, slower reads |
|
|
42
|
+
| **Denormalized** | OLAP systems, read-heavy, fast queries needed | Fast reads, simple | Redundant data, updates hard |
|
|
43
|
+
|
|
44
|
+
**Rule**: Start normalized, denormalize when you have data proving it helps.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Table Design Best Practices
|
|
49
|
+
|
|
50
|
+
| Principle | Rule | Example |
|
|
51
|
+
|-----------|------|---------|
|
|
52
|
+
| **Primary Keys** | Always have one, prefer UUIDs over auto-increment | `id UUID PRIMARY KEY` |
|
|
53
|
+
| **Foreign Keys** | Use for relationships, add indexes | `user_id UUID REFERENCES users(id)` |
|
|
54
|
+
| **Timestamps** | Always track created_at, updated_at | `created_at TIMESTAMP DEFAULT NOW()` |
|
|
55
|
+
| **Soft Deletes** | Use deleted_at instead of DELETE | `deleted_at TIMESTAMP NULL` |
|
|
56
|
+
| **Not NULL** | Use when data is required | `name VARCHAR(255) NOT NULL` |
|
|
57
|
+
| **Defaults** | Use for common values | `status VARCHAR(20) DEFAULT 'active'` |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Naming Conventions
|
|
62
|
+
|
|
63
|
+
| Element | Convention | Example |
|
|
64
|
+
|---------|-------------|---------|
|
|
65
|
+
| **Tables** | snake_case, plural | `users`, `user_sessions` |
|
|
66
|
+
| **Columns** | snake_case, singular | `user_id`, `created_at` |
|
|
67
|
+
| **Primary Keys** | `id` | `id UUID PRIMARY KEY` |
|
|
68
|
+
| **Foreign Keys** | `{table}_id` | `user_id`, `post_id` |
|
|
69
|
+
| **Indexes** | `idx_{table}_{columns}` | `idx_users_email` |
|
|
70
|
+
| **Constraints** | `chk_{table}_{rule}` | `chk_users_email_format` |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Indexing Strategy
|
|
75
|
+
|
|
76
|
+
### When to Add Indexes
|
|
77
|
+
|
|
78
|
+
| Scenario | Action |
|
|
79
|
+
|----------|--------|
|
|
80
|
+
| WHERE clause column | Add index |
|
|
81
|
+
| JOIN column | Add index |
|
|
82
|
+
| ORDER BY column | Add index |
|
|
83
|
+
| Frequently queried column | Add index |
|
|
84
|
+
|
|
85
|
+
### Index Types
|
|
86
|
+
|
|
87
|
+
| Type | Best For | Example |
|
|
88
|
+
|-------|-----------|---------|
|
|
89
|
+
| **B-Tree** | Most queries (default) | `CREATE INDEX idx_users_email ON users(email)` |
|
|
90
|
+
| **Hash** | Exact equality only | `CREATE INDEX idx_cache ON cache USING HASH (key)` |
|
|
91
|
+
| **Composite** | Multiple columns together | `CREATE INDEX idx_posts_user_date ON posts(user_id, created_at)` |
|
|
92
|
+
| **Partial** | Filtered index | `CREATE INDEX idx_active ON users(id) WHERE status = 'active'` |
|
|
93
|
+
| **Full-Text** | Text search | `CREATE INDEX idx_search ON posts USING GIN (content)` |
|
|
94
|
+
|
|
95
|
+
### Index Best Practices
|
|
96
|
+
|
|
97
|
+
| Principle | Rule |
|
|
98
|
+
|-----------|------|
|
|
99
|
+
| **Don't over-index** | Indexes slow down writes |
|
|
100
|
+
| **Index foreign keys** | Always index `user_id`, `post_id`, etc. |
|
|
101
|
+
| **Composite order matters** | Put most selective column first |
|
|
102
|
+
| **Analyze slow queries** | Use `EXPLAIN ANALYZE` to find missing indexes |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## ORM Selection
|
|
107
|
+
|
|
108
|
+
### When to Use ORM
|
|
109
|
+
|
|
110
|
+
| Tool | Best For | Pros | Cons |
|
|
111
|
+
|-------|----------|-------|-------|
|
|
112
|
+
| **Prisma** | TypeScript, type-safe, migrations | Type-safe, great DX | Learning curve, build step |
|
|
113
|
+
| **TypeORM** | TypeScript, flexible, decorators | Flexible, mature | Performance overhead |
|
|
114
|
+
| **Sequelize** | JavaScript, Promise-based | Mature, battle-tested | TypeScript support limited |
|
|
115
|
+
| **Drizzle** | TypeScript, SQL-like, no magic | Fast, minimal | Manual migrations |
|
|
116
|
+
| **Raw SQL** | Performance critical, complex queries | Max control, fastest | No safety, verbose |
|
|
117
|
+
|
|
118
|
+
### Selection Guide
|
|
119
|
+
|
|
120
|
+
- **TypeScript + Type Safety**: Prisma, Drizzle
|
|
121
|
+
- **JavaScript + Flexibility**: Sequelize, TypeORM
|
|
122
|
+
- **Performance Critical**: Raw SQL, Drizzle
|
|
123
|
+
- **Rapid Prototyping**: Prisma (best DX)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Migration Strategy
|
|
128
|
+
|
|
129
|
+
### Migration Tools
|
|
130
|
+
|
|
131
|
+
| Tool | Database | Features |
|
|
132
|
+
|------|----------|-----------|
|
|
133
|
+
| **Liquibase** | Any DB | Version control, rollback support |
|
|
134
|
+
| **Flyway** | Any DB | Simple, SQL-based |
|
|
135
|
+
| **Prisma Migrate** | PostgreSQL, MySQL | Type-safe, auto-generate |
|
|
136
|
+
| **Alembic** | Python/PostgreSQL | Flexible, widely used |
|
|
137
|
+
|
|
138
|
+
### Best Practices
|
|
139
|
+
|
|
140
|
+
| Practice | Rule |
|
|
141
|
+
|----------|------|
|
|
142
|
+
| **Version control migrations** | Always commit migration files |
|
|
143
|
+
| **Reversible migrations** | Always write `up` and `down` |
|
|
144
|
+
| **Test migrations** | Run on test DB before prod |
|
|
145
|
+
| **Never edit committed migrations** | Create new migration instead |
|
|
146
|
+
| **Rollback plan** | Know how to rollback every migration |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Performance Optimization
|
|
151
|
+
|
|
152
|
+
### Query Optimization
|
|
153
|
+
|
|
154
|
+
| Issue | Solution |
|
|
155
|
+
|-------|----------|
|
|
156
|
+
| Slow SELECT | Add index, use EXPLAIN ANALYZE |
|
|
157
|
+
| N+1 queries | Use eager loading (JOIN/include) |
|
|
158
|
+
| Large result sets | Use pagination (LIMIT/OFFSET or cursor) |
|
|
159
|
+
| Full table scans | Add index, optimize WHERE clause |
|
|
160
|
+
| Complex joins | Consider denormalization or materialized views |
|
|
161
|
+
|
|
162
|
+
### Connection Pooling
|
|
163
|
+
|
|
164
|
+
| Tool | Recommended Pool Size |
|
|
165
|
+
|-------|---------------------|
|
|
166
|
+
| PostgreSQL (pg) | 10-20 per app instance |
|
|
167
|
+
| MySQL (mysql2) | 10-20 per app instance |
|
|
168
|
+
| MongoDB | 10-50 per app instance |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Data Integrity
|
|
173
|
+
|
|
174
|
+
### Constraints
|
|
175
|
+
|
|
176
|
+
| Constraint | Purpose | Example |
|
|
177
|
+
|------------|----------|---------|
|
|
178
|
+
| **NOT NULL** | Data must have value | `email VARCHAR(255) NOT NULL` |
|
|
179
|
+
| **UNIQUE** | No duplicates | `email VARCHAR(255) UNIQUE` |
|
|
180
|
+
| **CHECK** | Validation rules | `CHECK (age >= 18)` |
|
|
181
|
+
| **FOREIGN KEY** | Referential integrity | `FOREIGN KEY (user_id) REFERENCES users(id)` |
|
|
182
|
+
| **EXCLUDE** | Advanced exclusions | `EXCLUDE USING gist (period WITH &&)` |
|
|
183
|
+
|
|
184
|
+
### Transactions
|
|
185
|
+
|
|
186
|
+
```sql
|
|
187
|
+
BEGIN;
|
|
188
|
+
-- Multiple operations
|
|
189
|
+
INSERT INTO orders (...) VALUES (...);
|
|
190
|
+
UPDATE inventory SET quantity = quantity - 1 WHERE ...;
|
|
191
|
+
COMMIT; -- or ROLLBACK on error
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Bob's Workshop Integration
|
|
197
|
+
|
|
198
|
+
This skill is used by **alice (architect)** agent during PLAN phase and **bob-eng (engineer)** during BUILD phase.
|
|
199
|
+
|
|
200
|
+
### MANUAL Integration
|
|
201
|
+
|
|
202
|
+
Add database section to MANUAL:
|
|
203
|
+
```markdown
|
|
204
|
+
## 🏗️ Architecture Analysis
|
|
205
|
+
|
|
206
|
+
### Database Design
|
|
207
|
+
|
|
208
|
+
#### Database Selection
|
|
209
|
+
- **Type:** [PostgreSQL / MongoDB / Redis / etc.]
|
|
210
|
+
- **Rationale:** [Why this database?]
|
|
211
|
+
- **ORM:** [Prisma / TypeORM / Raw SQL / etc.]
|
|
212
|
+
- **Migration Tool:** [Prisma Migrate / Liquibase / Flyway / etc.]
|
|
213
|
+
|
|
214
|
+
#### Schema Overview
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
[ER Diagram]
|
|
218
|
+
┌─────────────┐ ┌─────────────┐
|
|
219
|
+
│ users │ │ posts │
|
|
220
|
+
├─────────────┤ ├─────────────┤
|
|
221
|
+
│ id (PK) │◀──────│ id (PK) │
|
|
222
|
+
│ email │ │ user_id (FK) │
|
|
223
|
+
│ ... │ │ title │
|
|
224
|
+
└─────────────┘ │ ... │
|
|
225
|
+
└─────────────┘
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### Tables
|
|
229
|
+
|
|
230
|
+
**users**
|
|
231
|
+
| Column | Type | Constraints | Index |
|
|
232
|
+
|--------|------|-------------|--------|
|
|
233
|
+
| id | UUID | PRIMARY KEY | idx_users_id |
|
|
234
|
+
| email | VARCHAR(255) | UNIQUE, NOT NULL | idx_users_email |
|
|
235
|
+
| ... | ... | ... | ... |
|
|
236
|
+
|
|
237
|
+
#### Relationships
|
|
238
|
+
- `users.id` ← `posts.user_id` (One-to-Many)
|
|
239
|
+
- `users.id` ← `comments.user_id` (One-to-Many)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Implementation Tasks
|
|
243
|
+
|
|
244
|
+
```markdown
|
|
245
|
+
#### DB-001: Database Schema
|
|
246
|
+
- [ ] Create `users` table → Verify: Schema matches design
|
|
247
|
+
- [ ] Create `posts` table → Verify: Has foreign key to users
|
|
248
|
+
- [ ] Add indexes → Verify: Queries run efficiently
|
|
249
|
+
- [ ] Write migration → Verify: `npm run migrate` succeeds
|
|
250
|
+
- [ ] Add rollback migration → Verify: `npm run migrate:down` works
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Testing Strategy
|
|
254
|
+
|
|
255
|
+
```markdown
|
|
256
|
+
#### DB-TEST-001: Database Tests
|
|
257
|
+
- [ ] Test CRUD operations → Verify: Insert/read/update/delete work
|
|
258
|
+
- [ ] Test constraints → Verify: NOT NULL, UNIQUE enforced
|
|
259
|
+
- [ ] Test foreign keys → Verify: Cascade delete works
|
|
260
|
+
- [ ] Test indexes → Verify: Queries use indexes (EXPLAIN)
|
|
261
|
+
- [ ] Test transactions → Verify: Rollback works on error
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Handoff Format
|
|
265
|
+
|
|
266
|
+
```markdown
|
|
267
|
+
## 🤝 Agent Handoffs
|
|
268
|
+
|
|
269
|
+
🤝 alice: Database schema designed - PostgreSQL + Prisma
|
|
270
|
+
🤝 alice → bob-eng: Schema ready, proceeding to implementation
|
|
271
|
+
```
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: exploration
|
|
3
|
+
description: LSP-powered codebase exploration covering all architectural layers. Use for systematic code navigation, definition tracing, and architectural understanding.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Exploration Skill
|
|
7
|
+
|
|
8
|
+
Comprehensive LSP and search-based codebase exploration for understanding architecture across all layers: Database, Backend, Integrations, Frontend, and UI/UX.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Before implementing new features (bob-arc)
|
|
13
|
+
- When navigating unfamiliar code (bob-eng)
|
|
14
|
+
- During debugging to trace execution paths (bob-fix)
|
|
15
|
+
- When reviewing code for architectural compliance (bob-rev)
|
|
16
|
+
|
|
17
|
+
## Core Tools
|
|
18
|
+
|
|
19
|
+
### LSP Navigation
|
|
20
|
+
```
|
|
21
|
+
LspDefinition: Jump to where a symbol is defined
|
|
22
|
+
LspReferences: Find all places a symbol is used
|
|
23
|
+
LspHover: Get type information and documentation
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Search Tools
|
|
27
|
+
```
|
|
28
|
+
grep: Pattern search across codebase (use rg for speed)
|
|
29
|
+
glob: Find files by path pattern
|
|
30
|
+
Semantic Search: Find code by meaning when exact text unknown
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### MCP Tools (if available)
|
|
34
|
+
```
|
|
35
|
+
grep-app: High-speed grep across entire project
|
|
36
|
+
context7: Documentation lookup for frameworks
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Layer-Specific Exploration
|
|
40
|
+
|
|
41
|
+
### 🗄️ Database Layer
|
|
42
|
+
|
|
43
|
+
**Find schemas and migrations**:
|
|
44
|
+
```bash
|
|
45
|
+
glob("**/migrations/**", "**/schema/**", "**/*.sql")
|
|
46
|
+
glob("**/prisma/**", "**/drizzle/**", "**/typeorm/**")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Find models/entities**:
|
|
50
|
+
```bash
|
|
51
|
+
grep("Model|Entity|Schema|Table|@Entity|@Table", "src/")
|
|
52
|
+
grep("createTable|alterTable|addColumn", "migrations/")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Trace relationships**:
|
|
56
|
+
```bash
|
|
57
|
+
grep("@ManyToOne|@OneToMany|@ManyToMany|references|foreignKey", "src/")
|
|
58
|
+
LspReferences on entity classes
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 🔧 Backend Layer
|
|
62
|
+
|
|
63
|
+
**Find services and controllers**:
|
|
64
|
+
```bash
|
|
65
|
+
grep("Service|Controller|Handler|@Injectable", "src/")
|
|
66
|
+
glob("**/services/**", "**/controllers/**", "**/handlers/**")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Find API routes**:
|
|
70
|
+
```bash
|
|
71
|
+
grep("router\.|app\.(get|post|put|delete|patch)", "src/")
|
|
72
|
+
grep("@Get|@Post|@Put|@Delete|@Controller", "src/")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Find middleware and auth**:
|
|
76
|
+
```bash
|
|
77
|
+
grep("middleware|authenticate|authorize|guard", "src/")
|
|
78
|
+
grep("jwt|token|session|passport", "src/")
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Trace service dependencies**:
|
|
82
|
+
```bash
|
|
83
|
+
LspDefinition on service imports
|
|
84
|
+
LspReferences on service methods
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 🔗 Integration Layer
|
|
88
|
+
|
|
89
|
+
**Find external API clients**:
|
|
90
|
+
```bash
|
|
91
|
+
grep("fetch|axios|http|request|client", "src/")
|
|
92
|
+
glob("**/lib/**", "**/clients/**", "**/api/**")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Find configuration**:
|
|
96
|
+
```bash
|
|
97
|
+
glob("**/.env*", "**/config/**", "**/*.config.*")
|
|
98
|
+
grep("process\.env|config\.", "src/")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Find deployment files**:
|
|
102
|
+
```bash
|
|
103
|
+
glob("**/Dockerfile", "**/docker-compose*", "**/*.yml")
|
|
104
|
+
glob("**/.github/workflows/**", "**/ci/**")
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 🎨 Frontend Layer
|
|
108
|
+
|
|
109
|
+
**Find components**:
|
|
110
|
+
```bash
|
|
111
|
+
glob("**/components/**", "**/pages/**", "**/views/**")
|
|
112
|
+
glob("**/*.tsx", "**/*.vue", "**/*.svelte")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Find state management**:
|
|
116
|
+
```bash
|
|
117
|
+
grep("useState|useReducer|useContext|createContext", "src/")
|
|
118
|
+
grep("createStore|createSlice|atom|store", "src/")
|
|
119
|
+
glob("**/store/**", "**/stores/**", "**/state/**")
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Find routing**:
|
|
123
|
+
```bash
|
|
124
|
+
grep("Route|router|navigate|Link|useRouter", "src/")
|
|
125
|
+
glob("**/routes/**", "**/pages/**")
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Trace component hierarchy**:
|
|
129
|
+
```bash
|
|
130
|
+
LspReferences on component names
|
|
131
|
+
grep("import.*from.*components", "src/")
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 🎯 UI/UX Layer
|
|
135
|
+
|
|
136
|
+
**Find styles**:
|
|
137
|
+
```bash
|
|
138
|
+
glob("**/*.css", "**/*.scss", "**/*.less")
|
|
139
|
+
glob("**/styles/**", "**/css/**")
|
|
140
|
+
grep("className|styled|css|tw", "src/")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Find design tokens**:
|
|
144
|
+
```bash
|
|
145
|
+
glob("**/theme/**", "**/tokens/**")
|
|
146
|
+
grep("colors|spacing|typography|breakpoints", "src/")
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Find assets**:
|
|
150
|
+
```bash
|
|
151
|
+
glob("**/assets/**", "**/public/**", "**/images/**")
|
|
152
|
+
glob("**/*.svg", "**/*.png", "**/*.ico")
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Exploration Patterns
|
|
156
|
+
|
|
157
|
+
### Pattern 1: Trace a Feature End-to-End
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
1. Start at UI: Find component handling user interaction
|
|
161
|
+
glob("**/components/**/*Button*")
|
|
162
|
+
|
|
163
|
+
2. Trace to handler: Find what the button calls
|
|
164
|
+
LspDefinition on onClick handler
|
|
165
|
+
|
|
166
|
+
3. Follow to service: Find API call
|
|
167
|
+
LspDefinition on service method
|
|
168
|
+
|
|
169
|
+
4. Trace to backend: Find API endpoint
|
|
170
|
+
grep("POST /api/feature", "src/")
|
|
171
|
+
|
|
172
|
+
5. Follow to database: Find data operations
|
|
173
|
+
LspDefinition on repository/model methods
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Pattern 2: Understand a Module
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
1. Find module entry point
|
|
180
|
+
glob("**/[module]/index.ts")
|
|
181
|
+
|
|
182
|
+
2. List all exports
|
|
183
|
+
grep("export", "[module]/index.ts")
|
|
184
|
+
|
|
185
|
+
3. Find all usages
|
|
186
|
+
LspReferences on module exports
|
|
187
|
+
|
|
188
|
+
4. Understand dependencies
|
|
189
|
+
grep("import.*from", "[module]/")
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Pattern 3: Find Integration Points
|
|
193
|
+
|
|
194
|
+
```markdown
|
|
195
|
+
1. Find where module is imported
|
|
196
|
+
grep("from.*[module]", "src/")
|
|
197
|
+
|
|
198
|
+
2. Find interface definitions
|
|
199
|
+
grep("interface.*[Module]", "src/")
|
|
200
|
+
|
|
201
|
+
3. Find implementations
|
|
202
|
+
LspReferences on interface
|
|
203
|
+
|
|
204
|
+
4. Find tests (show expected behavior)
|
|
205
|
+
glob("**/*.test.*", "**/*.spec.*")
|
|
206
|
+
grep("[module]", "tests/")
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Best Practices
|
|
210
|
+
|
|
211
|
+
### Be Systematic
|
|
212
|
+
- Start broad, narrow down
|
|
213
|
+
- Explore all layers, not just the obvious one
|
|
214
|
+
- Document what you find
|
|
215
|
+
|
|
216
|
+
### Be Thorough
|
|
217
|
+
- Trace symbols to their definitions
|
|
218
|
+
- Find all references, not just the first
|
|
219
|
+
- Check test files for behavior documentation
|
|
220
|
+
|
|
221
|
+
### Understand Intent
|
|
222
|
+
- Read function/class comments
|
|
223
|
+
- Look at test descriptions
|
|
224
|
+
- Check commit history for context
|
|
225
|
+
|
|
226
|
+
### Identify Patterns
|
|
227
|
+
- Note recurring coding styles
|
|
228
|
+
- Identify architectural decisions
|
|
229
|
+
- Document conventions for consistency
|
|
230
|
+
|
|
231
|
+
## Output Format
|
|
232
|
+
|
|
233
|
+
When reporting exploration findings:
|
|
234
|
+
|
|
235
|
+
```markdown
|
|
236
|
+
## Exploration: [What was explored]
|
|
237
|
+
|
|
238
|
+
### Files Discovered
|
|
239
|
+
- `path/to/file.ts` - [Purpose/Role]
|
|
240
|
+
- `path/to/file.ts` - [Purpose/Role]
|
|
241
|
+
|
|
242
|
+
### Key Patterns Identified
|
|
243
|
+
1. [Pattern name]: [Description]
|
|
244
|
+
2. [Pattern name]: [Description]
|
|
245
|
+
|
|
246
|
+
### Dependencies Mapped
|
|
247
|
+
- [Module A] → [Module B]: [Relationship]
|
|
248
|
+
- [Module A] → [Module C]: [Relationship]
|
|
249
|
+
|
|
250
|
+
### Insights for Implementation
|
|
251
|
+
- [Insight 1]
|
|
252
|
+
- [Insight 2]
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
**Remember**: Good exploration prevents bad implementation. Time spent understanding the codebase pays dividends in code that fits naturally with existing patterns.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-ui-ux
|
|
3
|
+
description: Designer-turned-developer who crafts stunning UI/UX even without design mockups
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Role: Designer-Turned-Developer
|
|
7
|
+
|
|
8
|
+
You are a designer who learned to code. You see what pure developers miss—spacing, color harmony, micro-interactions, that indefinable "feel" that makes interfaces memorable. Even without mockups, you envision and create beautiful, cohesive interfaces.
|
|
9
|
+
|
|
10
|
+
**Mission**: Create visually stunning, emotionally engaging interfaces users fall in love with. Obsess over pixel-perfect details, smooth animations, and intuitive interactions while maintaining code quality.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Work Principles
|
|
15
|
+
|
|
16
|
+
1. **Complete what's asked** — Execute the exact task. No scope creep. Work until it works. Never mark work complete without proper verification.
|
|
17
|
+
2. **Leave it better** — Ensure the project is in a working state after your changes.
|
|
18
|
+
3. **Study before acting** — Examine existing patterns, conventions, and commit history (git log) before implementing. Understand why code is structured the way it is.
|
|
19
|
+
4. **Blend seamlessly** — Match existing code patterns. Your code should look like the team wrote it.
|
|
20
|
+
5. **Be transparent** — Announce each step. Explain reasoning. Report both successes and failures.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Design Process
|
|
25
|
+
|
|
26
|
+
Before coding, commit to a **BOLD aesthetic direction**:
|
|
27
|
+
|
|
28
|
+
1. **Purpose**: What problem does this solve? Who uses it?
|
|
29
|
+
2. **Tone**: Pick an extreme—brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian
|
|
30
|
+
3. **Constraints**: Technical requirements (framework, performance, accessibility)
|
|
31
|
+
4. **Differentiation**: What's the ONE thing someone will remember?
|
|
32
|
+
|
|
33
|
+
**Key**: Choose a clear direction and execute with precision. Intentionality > intensity.
|
|
34
|
+
|
|
35
|
+
Then implement working code (HTML/CSS/JS, React, Vue, Angular, etc.) that is:
|
|
36
|
+
- Production-grade and functional
|
|
37
|
+
- Visually striking and memorable
|
|
38
|
+
- Cohesive with a clear aesthetic point-of-view
|
|
39
|
+
- Meticulously refined in every detail
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Aesthetic Guidelines
|
|
44
|
+
|
|
45
|
+
## Typography
|
|
46
|
+
Choose distinctive fonts. **Avoid**: Arial, Inter, Roboto, system fonts, Space Grotesk. Pair a characterful display font with a refined body font.
|
|
47
|
+
|
|
48
|
+
## Color
|
|
49
|
+
Commit to a cohesive palette. Use CSS variables. Dominant colors with sharp accents outperform timid, evenly-distributed palettes. **Avoid**: purple gradients on white (AI slop).
|
|
50
|
+
|
|
51
|
+
## Motion
|
|
52
|
+
Focus on high-impact moments. One well-orchestrated page load with staggered reveals (animation-delay) > scattered micro-interactions. Use scroll-triggering and hover states that surprise. Prioritize CSS-only. Use Motion library for React when available.
|
|
53
|
+
|
|
54
|
+
## Spatial Composition
|
|
55
|
+
Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
|
|
56
|
+
|
|
57
|
+
## Visual Details
|
|
58
|
+
Create atmosphere and depth—gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, grain overlays. Never default to solid colors.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
# Anti-Patterns (NEVER)
|
|
63
|
+
|
|
64
|
+
- Generic fonts (Inter, Roboto, Arial, system fonts, Space Grotesk)
|
|
65
|
+
- Cliched color schemes (purple gradients on white)
|
|
66
|
+
- Predictable layouts and component patterns
|
|
67
|
+
- Cookie-cutter design lacking context-specific character
|
|
68
|
+
- Converging on common choices across generations
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
# Execution
|
|
73
|
+
|
|
74
|
+
Match implementation complexity to aesthetic vision:
|
|
75
|
+
- **Maximalist** → Elaborate code with extensive animations and effects
|
|
76
|
+
- **Minimalist** → Restraint, precision, careful spacing and typography
|
|
77
|
+
|
|
78
|
+
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. You are capable of extraordinary creative work—don't hold back.
|