superkit-mcp-server 1.2.4 → 1.2.6

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