superkit-mcp-server 1.2.3 → 1.2.4

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 (161) 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/tester.md +274 -274
  18. package/agents/ui-designer.md +208 -208
  19. package/build/tools/sessionManager.js +79 -10
  20. package/build/tools/todoTools.js +39 -39
  21. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  22. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  23. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  24. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  25. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  26. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  27. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  28. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  29. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  30. package/commands/README.md +122 -122
  31. package/commands/ask.toml +72 -72
  32. package/commands/brainstorm.toml +119 -119
  33. package/commands/chat.toml +77 -77
  34. package/commands/code-preview.toml +37 -37
  35. package/commands/code.toml +28 -28
  36. package/commands/content.toml +200 -200
  37. package/commands/cook.toml +77 -77
  38. package/commands/copywrite.toml +131 -131
  39. package/commands/db.toml +192 -192
  40. package/commands/debug.toml +166 -166
  41. package/commands/design.toml +158 -158
  42. package/commands/dev-rules.toml +14 -14
  43. package/commands/do.toml +117 -117
  44. package/commands/doc-rules.toml +14 -14
  45. package/commands/docs.toml +148 -148
  46. package/commands/fix.toml +440 -440
  47. package/commands/fullstack.toml +175 -175
  48. package/commands/git.toml +235 -235
  49. package/commands/help.toml +84 -84
  50. package/commands/integrate.toml +127 -127
  51. package/commands/journal.toml +136 -136
  52. package/commands/kit-setup.toml +40 -40
  53. package/commands/mcp.toml +183 -183
  54. package/commands/orchestration.toml +15 -15
  55. package/commands/plan.toml +171 -171
  56. package/commands/pm.toml +148 -148
  57. package/commands/pr.toml +50 -50
  58. package/commands/project.toml +32 -32
  59. package/commands/research.toml +117 -117
  60. package/commands/review-pr.toml +63 -63
  61. package/commands/review.toml +190 -190
  62. package/commands/scout-ext.toml +97 -97
  63. package/commands/scout.toml +79 -79
  64. package/commands/screenshot.toml +65 -65
  65. package/commands/session.toml +102 -102
  66. package/commands/skill.toml +384 -384
  67. package/commands/status.toml +22 -22
  68. package/commands/team.toml +56 -56
  69. package/commands/test.toml +164 -164
  70. package/commands/ticket.toml +70 -70
  71. package/commands/use.toml +106 -106
  72. package/commands/video.toml +83 -83
  73. package/commands/watzup.toml +71 -71
  74. package/commands/workflow.toml +14 -14
  75. package/package.json +35 -35
  76. package/skills/meta/README.md +30 -30
  77. package/skills/meta/api-design/SKILL.md +134 -134
  78. package/skills/meta/code-review/SKILL.md +44 -44
  79. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  80. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  81. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  82. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  83. package/skills/meta/compound-docs/SKILL.md +133 -133
  84. package/skills/meta/debug/SKILL.md +40 -40
  85. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  86. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  87. package/skills/meta/docker/SKILL.md +126 -126
  88. package/skills/meta/examples/supabase/SKILL.md +46 -46
  89. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  90. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  91. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  92. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  93. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  94. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  95. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  96. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  97. package/skills/meta/file-todos/SKILL.md +88 -88
  98. package/skills/meta/mobile/SKILL.md +140 -140
  99. package/skills/meta/nextjs/SKILL.md +101 -101
  100. package/skills/meta/performance/SKILL.md +130 -130
  101. package/skills/meta/react-patterns/SKILL.md +83 -83
  102. package/skills/meta/security/SKILL.md +114 -114
  103. package/skills/meta/session-resume/SKILL.md +96 -96
  104. package/skills/meta/tailwind/SKILL.md +139 -139
  105. package/skills/meta/testing/SKILL.md +43 -43
  106. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  107. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  108. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  109. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  110. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  111. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  112. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  113. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  114. package/skills/tech/alpha-vantage/references/options.md +93 -93
  115. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  116. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  117. package/skills/tech/financial-modeling/SKILL.md +18 -18
  118. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  119. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  120. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  121. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  122. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  123. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  124. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  125. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  126. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  127. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  128. package/skills/workflows/README.md +203 -203
  129. package/skills/workflows/adr.md +174 -174
  130. package/skills/workflows/changelog.md +74 -74
  131. package/skills/workflows/compound.md +323 -323
  132. package/skills/workflows/compound_health.md +74 -74
  133. package/skills/workflows/create-agent-skill.md +138 -138
  134. package/skills/workflows/cycle.md +144 -144
  135. package/skills/workflows/deploy-docs.md +84 -84
  136. package/skills/workflows/development-rules.md +42 -42
  137. package/skills/workflows/doc.md +95 -95
  138. package/skills/workflows/documentation-management.md +34 -34
  139. package/skills/workflows/explore.md +146 -146
  140. package/skills/workflows/generate_command.md +106 -106
  141. package/skills/workflows/heal-skill.md +97 -97
  142. package/skills/workflows/housekeeping.md +229 -229
  143. package/skills/workflows/kit-setup.md +102 -102
  144. package/skills/workflows/map-codebase.md +78 -78
  145. package/skills/workflows/orchestration-protocol.md +43 -43
  146. package/skills/workflows/plan-compound.md +439 -439
  147. package/skills/workflows/plan_review.md +269 -269
  148. package/skills/workflows/primary-workflow.md +37 -37
  149. package/skills/workflows/promote_pattern.md +86 -86
  150. package/skills/workflows/release-docs.md +82 -82
  151. package/skills/workflows/report-bug.md +135 -135
  152. package/skills/workflows/reproduce-bug.md +118 -118
  153. package/skills/workflows/resolve_pr.md +133 -133
  154. package/skills/workflows/resolve_todo.md +128 -128
  155. package/skills/workflows/review-compound.md +376 -376
  156. package/skills/workflows/skill-review.md +127 -127
  157. package/skills/workflows/specs.md +257 -257
  158. package/skills/workflows/triage-sprint.md +102 -102
  159. package/skills/workflows/triage.md +152 -152
  160. package/skills/workflows/work.md +399 -399
  161. 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