superkit-mcp-server 1.2.1 → 1.2.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.
Files changed (170) hide show
  1. package/ARCHITECTURE.md +102 -102
  2. package/README.md +71 -71
  3. package/SUPERKIT.md +168 -168
  4. package/agents/code-archaeologist.md +106 -106
  5. package/agents/coder.md +90 -90
  6. package/agents/data-engineer.md +28 -28
  7. package/agents/devops-engineer.md +242 -242
  8. package/agents/git-manager.md +203 -203
  9. package/agents/orchestrator.md +420 -420
  10. package/agents/penetration-tester.md +188 -188
  11. package/agents/performance-optimizer.md +187 -187
  12. package/agents/planner.md +270 -270
  13. package/agents/qa-automation-engineer.md +103 -103
  14. package/agents/quant-developer.md +32 -32
  15. package/agents/reviewer.md +100 -100
  16. package/agents/scout.md +222 -222
  17. package/agents/security-auditor.md +3 -2
  18. package/agents/tester.md +274 -274
  19. package/agents/ui-designer.md +208 -208
  20. package/build/index.js +21 -2
  21. package/build/tools/__tests__/loggerTools.test.js +5 -5
  22. package/build/tools/archTools.js +2 -19
  23. package/build/tools/autoPreview.js +2 -2
  24. package/build/tools/compoundTools.js +4 -4
  25. package/build/tools/docsTools.js +5 -10
  26. package/build/tools/loggerTools.js +1 -1
  27. package/build/tools/todoTools.js +39 -39
  28. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  29. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  30. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  31. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  32. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  33. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  34. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  35. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  36. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  37. package/build/tools/validators/convertRules.js +2 -2
  38. package/commands/README.md +122 -122
  39. package/commands/ask.toml +72 -72
  40. package/commands/brainstorm.toml +119 -119
  41. package/commands/chat.toml +77 -77
  42. package/commands/code-preview.toml +37 -37
  43. package/commands/code.toml +28 -28
  44. package/commands/content.toml +200 -200
  45. package/commands/cook.toml +77 -77
  46. package/commands/copywrite.toml +131 -131
  47. package/commands/db.toml +192 -192
  48. package/commands/debug.toml +166 -166
  49. package/commands/design.toml +158 -158
  50. package/commands/dev-rules.toml +14 -14
  51. package/commands/do.toml +117 -117
  52. package/commands/doc-rules.toml +14 -14
  53. package/commands/docs.toml +148 -148
  54. package/commands/fix.toml +440 -440
  55. package/commands/fullstack.toml +175 -175
  56. package/commands/git.toml +235 -235
  57. package/commands/help.toml +84 -84
  58. package/commands/integrate.toml +127 -127
  59. package/commands/journal.toml +136 -136
  60. package/commands/kit-setup.toml +40 -40
  61. package/commands/mcp.toml +183 -183
  62. package/commands/orchestration.toml +15 -15
  63. package/commands/plan.toml +171 -171
  64. package/commands/pm.toml +148 -148
  65. package/commands/pr.toml +50 -50
  66. package/commands/project.toml +32 -32
  67. package/commands/research.toml +117 -117
  68. package/commands/review-pr.toml +63 -63
  69. package/commands/review.toml +190 -190
  70. package/commands/scout-ext.toml +97 -97
  71. package/commands/scout.toml +79 -79
  72. package/commands/screenshot.toml +65 -65
  73. package/commands/session.toml +102 -102
  74. package/commands/skill.toml +384 -384
  75. package/commands/status.toml +22 -22
  76. package/commands/team.toml +56 -56
  77. package/commands/test.toml +164 -164
  78. package/commands/ticket.toml +70 -70
  79. package/commands/use.toml +106 -106
  80. package/commands/video.toml +83 -83
  81. package/commands/watzup.toml +71 -71
  82. package/commands/workflow.toml +14 -14
  83. package/package.json +35 -35
  84. package/skills/meta/README.md +30 -30
  85. package/skills/meta/api-design/SKILL.md +134 -134
  86. package/skills/meta/code-review/SKILL.md +44 -44
  87. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  88. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  89. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  90. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  91. package/skills/meta/compound-docs/SKILL.md +133 -133
  92. package/skills/meta/debug/SKILL.md +40 -40
  93. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  94. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  95. package/skills/meta/docker/SKILL.md +126 -126
  96. package/skills/meta/examples/supabase/SKILL.md +46 -46
  97. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  98. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  99. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  100. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  101. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  102. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  103. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  104. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  105. package/skills/meta/file-todos/SKILL.md +88 -88
  106. package/skills/meta/mobile/SKILL.md +140 -140
  107. package/skills/meta/nextjs/SKILL.md +101 -101
  108. package/skills/meta/performance/SKILL.md +130 -130
  109. package/skills/meta/react-patterns/SKILL.md +83 -83
  110. package/skills/meta/security/SKILL.md +114 -114
  111. package/skills/meta/session-resume/SKILL.md +96 -96
  112. package/skills/meta/tailwind/SKILL.md +139 -139
  113. package/skills/meta/testing/SKILL.md +43 -43
  114. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  115. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  116. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  117. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  118. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  119. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  120. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  121. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  122. package/skills/tech/alpha-vantage/references/options.md +93 -93
  123. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  124. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  125. package/skills/tech/doc.md +6 -6
  126. package/skills/tech/financial-modeling/SKILL.md +18 -18
  127. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  128. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  129. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  130. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  131. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  132. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  133. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  134. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  135. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  136. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  137. package/skills/workflows/README.md +203 -203
  138. package/skills/workflows/adr.md +174 -174
  139. package/skills/workflows/changelog.md +74 -74
  140. package/skills/workflows/compound.md +323 -323
  141. package/skills/workflows/compound_health.md +74 -74
  142. package/skills/workflows/create-agent-skill.md +138 -139
  143. package/skills/workflows/cycle.md +144 -144
  144. package/skills/workflows/deploy-docs.md +84 -84
  145. package/skills/workflows/development-rules.md +42 -42
  146. package/skills/workflows/doc.md +95 -95
  147. package/skills/workflows/documentation-management.md +34 -34
  148. package/skills/workflows/explore.md +146 -146
  149. package/skills/workflows/generate_command.md +106 -106
  150. package/skills/workflows/heal-skill.md +97 -97
  151. package/skills/workflows/housekeeping.md +229 -229
  152. package/skills/workflows/kit-setup.md +102 -102
  153. package/skills/workflows/map-codebase.md +78 -78
  154. package/skills/workflows/orchestration-protocol.md +43 -43
  155. package/skills/workflows/plan-compound.md +439 -439
  156. package/skills/workflows/plan_review.md +269 -269
  157. package/skills/workflows/primary-workflow.md +37 -37
  158. package/skills/workflows/promote_pattern.md +86 -86
  159. package/skills/workflows/release-docs.md +82 -82
  160. package/skills/workflows/report-bug.md +135 -135
  161. package/skills/workflows/reproduce-bug.md +118 -118
  162. package/skills/workflows/resolve_pr.md +133 -133
  163. package/skills/workflows/resolve_todo.md +128 -128
  164. package/skills/workflows/review-compound.md +376 -376
  165. package/skills/workflows/skill-review.md +127 -127
  166. package/skills/workflows/specs.md +257 -257
  167. package/skills/workflows/triage-sprint.md +102 -102
  168. package/skills/workflows/triage.md +152 -152
  169. package/skills/workflows/work.md +399 -399
  170. package/skills/workflows/xcode-test.md +93 -93
@@ -1,321 +1,321 @@
1
- # Database Schema Design
2
-
3
- Best practices for designing Supabase database schemas in [PROJECT_NAME].
4
-
5
- ## When To Use
6
-
7
- - Designing new features with database requirements
8
- - Planning data model for new functionality
9
- - Refactoring existing schema
10
- - Reviewing schema design decisions
11
-
12
- ---
13
-
14
- ## Design Principles
15
-
16
- ### 1. Normalize Data (Usually)
17
-
18
- **Good schema:**
19
- ```sql
20
- -- Separate tables with clear relationships
21
- CREATE TABLE users (
22
- id UUID PRIMARY KEY,
23
- email TEXT UNIQUE NOT NULL
24
- );
25
-
26
- CREATE TABLE profiles (
27
- id UUID PRIMARY KEY REFERENCES users(id),
28
- investor_code TEXT UNIQUE,
29
- role app_role NOT NULL
30
- );
31
- ```
32
-
33
- **Avoid:**
34
- ```sql
35
- -- Denormalized with repeated data
36
- CREATE TABLE users (
37
- id UUID PRIMARY KEY,
38
- email TEXT,
39
- profile_investor_code TEXT,
40
- profile_role TEXT,
41
- profile_mfa_enabled BOOLEAN,
42
- -- ... many profile fields
43
- );
44
- ```
45
-
46
- **When to denormalize:**
47
- - Read-heavy tables with expensive joins
48
- - Reporting tables (create views)
49
- - Calculated fields updated via triggers
50
-
51
- ---
52
-
53
- ### 2. Use Foreign Keys
54
-
55
- **Always include:**
56
- ```sql
57
- CREATE TABLE transactions (
58
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
59
- fund_id UUID NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
60
- investor_id UUID NOT NULL REFERENCES profiles(id) ON DELETE RESTRICT,
61
- created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
62
- );
63
- ```
64
-
65
- **ON DELETE actions:**
66
- - `CASCADE`: Delete children when parent deleted (ownership)
67
- - `RESTRICT`: Prevent deletion if children exist (safeguard)
68
- - `SET NULL`: Orphan children (rarely used)
69
-
70
- ---
71
-
72
- ### 3. Add Timestamps
73
-
74
- **Standard pattern:**
75
- ```sql
76
- CREATE TABLE table_name (
77
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
78
- -- ... other columns
79
- created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
80
- updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
81
- );
82
-
83
- -- Trigger for updated_at
84
- CREATE TRIGGER update_table_updated_at
85
- BEFORE UPDATE ON table_name
86
- FOR EACH ROW
87
- EXECUTE FUNCTION public.update_updated_at_column();
88
- ```
89
-
90
- ---
91
-
92
- ### 4. Use Appropriate Types
93
-
94
- **Common types:**
95
-
96
- | Use Case | Type | Example |
97
- |----------|------|---------|
98
- | UUID | `UUID` | User IDs, primary keys |
99
- | Money | `NUMERIC(12,2)` | Prices, amounts |
100
- | Enum | `CREATE TYPE` | Status, role |
101
- | Timestamp | `TIMESTAMPTZ` | Dates with timezone |
102
- | Boolean | `BOOLEAN` | Flags |
103
- | IP Address | `INET` | Login IPs |
104
- | JSON | `JSONB` | Flexible data |
105
-
106
- **Avoid:**
107
- - `TEXT` for numbers (use `NUMERIC`)
108
- - `VARCHAR(N)` (use `TEXT` with CHECK constraint if needed)
109
- - `TIMESTAMP` without TZ (use `TIMESTAMPTZ`)
110
- - Raw strings for enums (create `TYPE`)
111
-
112
- ---
113
-
114
- ### 5. Create Indexes
115
-
116
- **Index these:**
117
- - Foreign keys
118
- - Columns in WHERE clauses
119
- - Columns in JOIN conditions
120
- - Columns in ORDER BY
121
- - Unique constraints
122
-
123
- **Example:**
124
- ```sql
125
- -- Foreign key index
126
- CREATE INDEX IF NOT EXISTS idx_transactions_fund_id
127
- ON transactions (fund_id);
128
-
129
- -- Composite index for common query
130
- CREATE INDEX IF NOT EXISTS idx_transactions_fund_date
131
- ON transactions (fund_id, created_at DESC);
132
-
133
- -- Unique constraint
134
- CREATE UNIQUE INDEX IF NOT EXISTS idx_profiles_investor_code
135
- ON profiles (investor_code) WHERE investor_code IS NOT NULL;
136
- ```
137
-
138
- ---
139
-
140
- ### 6. Enable RLS by Default
141
-
142
- **On all tables with sensitive data:**
143
- ```sql
144
- CREATE TABLE sensitive_table (...);
145
-
146
- -- Immediately enable RLS
147
- ALTER TABLE sensitive_table ENABLE ROW LEVEL SECURITY;
148
-
149
- -- Add appropriate policies
150
- CREATE POLICY "Users see own data"
151
- ON sensitive_table FOR SELECT TO authenticated
152
- USING (user_id = auth.uid());
153
- ```
154
-
155
- **See:** `workflows/rls-policies.md` for policy patterns
156
-
157
- ---
158
-
159
- ### 7. Add Documentation
160
-
161
- **Document schema decisions:**
162
- ```sql
163
- COMMENT ON TABLE transactions IS
164
- 'Financial transactions between investors and funds. All amounts in USD.';
165
-
166
- COMMENT ON COLUMN transactions.amount IS
167
- 'Transaction amount in USD. Positive for investments, negative for redemptions.';
168
-
169
- COMMENT ON COLUMN transactions.status IS
170
- 'Status: pending (awaiting approval), approved (processed), rejected (denied)';
171
- ```
172
-
173
- ---
174
-
175
- ## Schema Review Checklist
176
-
177
- Before creating migration:
178
-
179
- **Tables:**
180
- - [ ] Table name plural and lowercase? (`users`, not `User`)
181
- - [ ] Primary key UUID with `gen_random_uuid()`?
182
- - [ ] Foreign keys with appropriate ON DELETE?
183
- - [ ] `created_at` and `updated_at` timestamps?
184
- - [ ] RLS enabled on sensitive tables?
185
-
186
- **Columns:**
187
- - [ ] Appropriate data types?
188
- - [ ] NOT NULL where required?
189
- - [ ] DEFAULT values where sensible?
190
- - [ ] Unique constraints where needed?
191
-
192
- **Performance:**
193
- - [ ] Indexes on foreign keys?
194
- - [ ] Indexes on frequently queried columns?
195
- - [ ] Composite indexes for multi-column queries?
196
-
197
- **Security:**
198
- - [ ] RLS policies cover all operations?
199
- - [ ] Sensitive data properly protected?
200
- - [ ] No PII in logs or comments?
201
-
202
- **Documentation:**
203
- - [ ] Table purpose documented?
204
- - [ ] Complex columns explained?
205
- - [ ] Migration header complete?
206
-
207
- ---
208
-
209
- ## [PROJECT_NAME] Patterns
210
-
211
- ### Multi-Fund Architecture
212
-
213
- ```sql
214
- -- Funds are first-class entities
215
- CREATE TABLE funds (
216
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
217
- name TEXT NOT NULL,
218
- created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
219
- );
220
-
221
- -- Many entities reference fund_id
222
- CREATE TABLE transactions (
223
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
224
- fund_id UUID NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
225
- -- ... other columns
226
- );
227
-
228
- -- RLS enforces fund-level isolation
229
- CREATE POLICY "Users see own fund data"
230
- ON transactions FOR SELECT TO authenticated
231
- USING (
232
- fund_id IN (
233
- SELECT fund_id FROM user_fund_access
234
- WHERE user_id = auth.uid()
235
- )
236
- );
237
- ```
238
-
239
- ### Audit Logging
240
-
241
- ```sql
242
- -- Audit trail for sensitive operations
243
- CREATE TABLE audit_events (
244
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
245
- event_type TEXT NOT NULL,
246
- actor_id UUID REFERENCES profiles(id),
247
- resource_type TEXT NOT NULL,
248
- resource_id UUID NOT NULL,
249
- metadata JSONB,
250
- created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
251
- );
252
-
253
- -- Index for querying by resource
254
- CREATE INDEX idx_audit_events_resource
255
- ON audit_events (resource_type, resource_id);
256
- ```
257
-
258
- ### Soft Deletes (When Needed)
259
-
260
- ```sql
261
- -- For records that must be preserved
262
- CREATE TABLE important_records (
263
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
264
- deleted_at TIMESTAMPTZ,
265
- -- ... other columns
266
- );
267
-
268
- -- Query helper
269
- CREATE VIEW active_records AS
270
- SELECT * FROM important_records
271
- WHERE deleted_at IS NULL;
272
-
273
- -- RLS excludes soft-deleted
274
- CREATE POLICY "Users see active records"
275
- ON important_records FOR SELECT TO authenticated
276
- USING (deleted_at IS NULL AND user_id = auth.uid());
277
- ```
278
-
279
- ---
280
-
281
- ## Anti-Patterns
282
-
283
- ### ❌ Missing Foreign Key Constraints
284
-
285
- Results in orphaned data and data integrity issues.
286
-
287
- ### ❌ Generic JSONB Fields
288
-
289
- ```sql
290
- -- BAD: Everything in JSON
291
- CREATE TABLE entities (
292
- id UUID PRIMARY KEY,
293
- data JSONB -- Contains everything
294
- );
295
- ```
296
-
297
- Use structured columns for queryable data. Reserve JSONB for truly flexible metadata.
298
-
299
- ### ❌ No Indexes on Foreign Keys
300
-
301
- Results in full table scans on JOINs.
302
-
303
- ### ❌ Timestamps Without Timezone
304
-
305
- ```sql
306
- -- BAD
307
- created_at TIMESTAMP
308
-
309
- -- GOOD
310
- created_at TIMESTAMPTZ
311
- ```
312
-
313
- ---
314
-
315
- ## Expected Output
316
-
317
- ✅ Well-designed schema following [PROJECT_NAME] patterns
318
- ✅ Proper constraints and indexes
319
- ✅ RLS policies designed
320
- ✅ Migration ready to create
321
- ✅ Schema documented
1
+ # Database Schema Design
2
+
3
+ Best practices for designing Supabase database schemas in [PROJECT_NAME].
4
+
5
+ ## When To Use
6
+
7
+ - Designing new features with database requirements
8
+ - Planning data model for new functionality
9
+ - Refactoring existing schema
10
+ - Reviewing schema design decisions
11
+
12
+ ---
13
+
14
+ ## Design Principles
15
+
16
+ ### 1. Normalize Data (Usually)
17
+
18
+ **Good schema:**
19
+ ```sql
20
+ -- Separate tables with clear relationships
21
+ CREATE TABLE users (
22
+ id UUID PRIMARY KEY,
23
+ email TEXT UNIQUE NOT NULL
24
+ );
25
+
26
+ CREATE TABLE profiles (
27
+ id UUID PRIMARY KEY REFERENCES users(id),
28
+ investor_code TEXT UNIQUE,
29
+ role app_role NOT NULL
30
+ );
31
+ ```
32
+
33
+ **Avoid:**
34
+ ```sql
35
+ -- Denormalized with repeated data
36
+ CREATE TABLE users (
37
+ id UUID PRIMARY KEY,
38
+ email TEXT,
39
+ profile_investor_code TEXT,
40
+ profile_role TEXT,
41
+ profile_mfa_enabled BOOLEAN,
42
+ -- ... many profile fields
43
+ );
44
+ ```
45
+
46
+ **When to denormalize:**
47
+ - Read-heavy tables with expensive joins
48
+ - Reporting tables (create views)
49
+ - Calculated fields updated via triggers
50
+
51
+ ---
52
+
53
+ ### 2. Use Foreign Keys
54
+
55
+ **Always include:**
56
+ ```sql
57
+ CREATE TABLE transactions (
58
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
59
+ fund_id UUID NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
60
+ investor_id UUID NOT NULL REFERENCES profiles(id) ON DELETE RESTRICT,
61
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
62
+ );
63
+ ```
64
+
65
+ **ON DELETE actions:**
66
+ - `CASCADE`: Delete children when parent deleted (ownership)
67
+ - `RESTRICT`: Prevent deletion if children exist (safeguard)
68
+ - `SET NULL`: Orphan children (rarely used)
69
+
70
+ ---
71
+
72
+ ### 3. Add Timestamps
73
+
74
+ **Standard pattern:**
75
+ ```sql
76
+ CREATE TABLE table_name (
77
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
78
+ -- ... other columns
79
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
80
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
81
+ );
82
+
83
+ -- Trigger for updated_at
84
+ CREATE TRIGGER update_table_updated_at
85
+ BEFORE UPDATE ON table_name
86
+ FOR EACH ROW
87
+ EXECUTE FUNCTION public.update_updated_at_column();
88
+ ```
89
+
90
+ ---
91
+
92
+ ### 4. Use Appropriate Types
93
+
94
+ **Common types:**
95
+
96
+ | Use Case | Type | Example |
97
+ |----------|------|---------|
98
+ | UUID | `UUID` | User IDs, primary keys |
99
+ | Money | `NUMERIC(12,2)` | Prices, amounts |
100
+ | Enum | `CREATE TYPE` | Status, role |
101
+ | Timestamp | `TIMESTAMPTZ` | Dates with timezone |
102
+ | Boolean | `BOOLEAN` | Flags |
103
+ | IP Address | `INET` | Login IPs |
104
+ | JSON | `JSONB` | Flexible data |
105
+
106
+ **Avoid:**
107
+ - `TEXT` for numbers (use `NUMERIC`)
108
+ - `VARCHAR(N)` (use `TEXT` with CHECK constraint if needed)
109
+ - `TIMESTAMP` without TZ (use `TIMESTAMPTZ`)
110
+ - Raw strings for enums (create `TYPE`)
111
+
112
+ ---
113
+
114
+ ### 5. Create Indexes
115
+
116
+ **Index these:**
117
+ - Foreign keys
118
+ - Columns in WHERE clauses
119
+ - Columns in JOIN conditions
120
+ - Columns in ORDER BY
121
+ - Unique constraints
122
+
123
+ **Example:**
124
+ ```sql
125
+ -- Foreign key index
126
+ CREATE INDEX IF NOT EXISTS idx_transactions_fund_id
127
+ ON transactions (fund_id);
128
+
129
+ -- Composite index for common query
130
+ CREATE INDEX IF NOT EXISTS idx_transactions_fund_date
131
+ ON transactions (fund_id, created_at DESC);
132
+
133
+ -- Unique constraint
134
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_profiles_investor_code
135
+ ON profiles (investor_code) WHERE investor_code IS NOT NULL;
136
+ ```
137
+
138
+ ---
139
+
140
+ ### 6. Enable RLS by Default
141
+
142
+ **On all tables with sensitive data:**
143
+ ```sql
144
+ CREATE TABLE sensitive_table (...);
145
+
146
+ -- Immediately enable RLS
147
+ ALTER TABLE sensitive_table ENABLE ROW LEVEL SECURITY;
148
+
149
+ -- Add appropriate policies
150
+ CREATE POLICY "Users see own data"
151
+ ON sensitive_table FOR SELECT TO authenticated
152
+ USING (user_id = auth.uid());
153
+ ```
154
+
155
+ **See:** `workflows/rls-policies.md` for policy patterns
156
+
157
+ ---
158
+
159
+ ### 7. Add Documentation
160
+
161
+ **Document schema decisions:**
162
+ ```sql
163
+ COMMENT ON TABLE transactions IS
164
+ 'Financial transactions between investors and funds. All amounts in USD.';
165
+
166
+ COMMENT ON COLUMN transactions.amount IS
167
+ 'Transaction amount in USD. Positive for investments, negative for redemptions.';
168
+
169
+ COMMENT ON COLUMN transactions.status IS
170
+ 'Status: pending (awaiting approval), approved (processed), rejected (denied)';
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Schema Review Checklist
176
+
177
+ Before creating migration:
178
+
179
+ **Tables:**
180
+ - [ ] Table name plural and lowercase? (`users`, not `User`)
181
+ - [ ] Primary key UUID with `gen_random_uuid()`?
182
+ - [ ] Foreign keys with appropriate ON DELETE?
183
+ - [ ] `created_at` and `updated_at` timestamps?
184
+ - [ ] RLS enabled on sensitive tables?
185
+
186
+ **Columns:**
187
+ - [ ] Appropriate data types?
188
+ - [ ] NOT NULL where required?
189
+ - [ ] DEFAULT values where sensible?
190
+ - [ ] Unique constraints where needed?
191
+
192
+ **Performance:**
193
+ - [ ] Indexes on foreign keys?
194
+ - [ ] Indexes on frequently queried columns?
195
+ - [ ] Composite indexes for multi-column queries?
196
+
197
+ **Security:**
198
+ - [ ] RLS policies cover all operations?
199
+ - [ ] Sensitive data properly protected?
200
+ - [ ] No PII in logs or comments?
201
+
202
+ **Documentation:**
203
+ - [ ] Table purpose documented?
204
+ - [ ] Complex columns explained?
205
+ - [ ] Migration header complete?
206
+
207
+ ---
208
+
209
+ ## [PROJECT_NAME] Patterns
210
+
211
+ ### Multi-Fund Architecture
212
+
213
+ ```sql
214
+ -- Funds are first-class entities
215
+ CREATE TABLE funds (
216
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
217
+ name TEXT NOT NULL,
218
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
219
+ );
220
+
221
+ -- Many entities reference fund_id
222
+ CREATE TABLE transactions (
223
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
224
+ fund_id UUID NOT NULL REFERENCES funds(id) ON DELETE CASCADE,
225
+ -- ... other columns
226
+ );
227
+
228
+ -- RLS enforces fund-level isolation
229
+ CREATE POLICY "Users see own fund data"
230
+ ON transactions FOR SELECT TO authenticated
231
+ USING (
232
+ fund_id IN (
233
+ SELECT fund_id FROM user_fund_access
234
+ WHERE user_id = auth.uid()
235
+ )
236
+ );
237
+ ```
238
+
239
+ ### Audit Logging
240
+
241
+ ```sql
242
+ -- Audit trail for sensitive operations
243
+ CREATE TABLE audit_events (
244
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
245
+ event_type TEXT NOT NULL,
246
+ actor_id UUID REFERENCES profiles(id),
247
+ resource_type TEXT NOT NULL,
248
+ resource_id UUID NOT NULL,
249
+ metadata JSONB,
250
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
251
+ );
252
+
253
+ -- Index for querying by resource
254
+ CREATE INDEX idx_audit_events_resource
255
+ ON audit_events (resource_type, resource_id);
256
+ ```
257
+
258
+ ### Soft Deletes (When Needed)
259
+
260
+ ```sql
261
+ -- For records that must be preserved
262
+ CREATE TABLE important_records (
263
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
264
+ deleted_at TIMESTAMPTZ,
265
+ -- ... other columns
266
+ );
267
+
268
+ -- Query helper
269
+ CREATE VIEW active_records AS
270
+ SELECT * FROM important_records
271
+ WHERE deleted_at IS NULL;
272
+
273
+ -- RLS excludes soft-deleted
274
+ CREATE POLICY "Users see active records"
275
+ ON important_records FOR SELECT TO authenticated
276
+ USING (deleted_at IS NULL AND user_id = auth.uid());
277
+ ```
278
+
279
+ ---
280
+
281
+ ## Anti-Patterns
282
+
283
+ ### ❌ Missing Foreign Key Constraints
284
+
285
+ Results in orphaned data and data integrity issues.
286
+
287
+ ### ❌ Generic JSONB Fields
288
+
289
+ ```sql
290
+ -- BAD: Everything in JSON
291
+ CREATE TABLE entities (
292
+ id UUID PRIMARY KEY,
293
+ data JSONB -- Contains everything
294
+ );
295
+ ```
296
+
297
+ Use structured columns for queryable data. Reserve JSONB for truly flexible metadata.
298
+
299
+ ### ❌ No Indexes on Foreign Keys
300
+
301
+ Results in full table scans on JOINs.
302
+
303
+ ### ❌ Timestamps Without Timezone
304
+
305
+ ```sql
306
+ -- BAD
307
+ created_at TIMESTAMP
308
+
309
+ -- GOOD
310
+ created_at TIMESTAMPTZ
311
+ ```
312
+
313
+ ---
314
+
315
+ ## Expected Output
316
+
317
+ ✅ Well-designed schema following [PROJECT_NAME] patterns
318
+ ✅ Proper constraints and indexes
319
+ ✅ RLS policies designed
320
+ ✅ Migration ready to create
321
+ ✅ Schema documented