codehava-agent-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/bin/cli.js +56 -0
- package/package.json +26 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/templates/.agent/agents/backend-specialist.md +263 -0
- package/templates/.agent/agents/code-archaeologist.md +106 -0
- package/templates/.agent/agents/database-architect.md +226 -0
- package/templates/.agent/agents/debugger.md +225 -0
- package/templates/.agent/agents/devops-engineer.md +242 -0
- package/templates/.agent/agents/documentation-writer.md +104 -0
- package/templates/.agent/agents/explorer-agent.md +73 -0
- package/templates/.agent/agents/frontend-specialist.md +593 -0
- package/templates/.agent/agents/game-developer.md +162 -0
- package/templates/.agent/agents/mobile-developer.md +377 -0
- package/templates/.agent/agents/orchestrator.md +416 -0
- package/templates/.agent/agents/penetration-tester.md +188 -0
- package/templates/.agent/agents/performance-optimizer.md +187 -0
- package/templates/.agent/agents/product-manager.md +112 -0
- package/templates/.agent/agents/product-owner.md +95 -0
- package/templates/.agent/agents/project-planner.md +406 -0
- package/templates/.agent/agents/qa-automation-engineer.md +103 -0
- package/templates/.agent/agents/security-auditor.md +170 -0
- package/templates/.agent/agents/seo-specialist.md +111 -0
- package/templates/.agent/agents/test-engineer.md +158 -0
- package/templates/.agent/mcp_config.json +129 -0
- package/templates/.agent/rules/GEMINI.md +273 -0
- package/templates/.agent/scripts/auto_preview.py +148 -0
- package/templates/.agent/scripts/checklist.py +217 -0
- package/templates/.agent/scripts/session_manager.py +120 -0
- package/templates/.agent/scripts/verify_all.py +327 -0
- package/templates/.agent/skills/api-patterns/SKILL.md +81 -0
- package/templates/.agent/skills/api-patterns/api-style.md +42 -0
- package/templates/.agent/skills/api-patterns/auth.md +24 -0
- package/templates/.agent/skills/api-patterns/documentation.md +26 -0
- package/templates/.agent/skills/api-patterns/graphql.md +41 -0
- package/templates/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/templates/.agent/skills/api-patterns/response.md +37 -0
- package/templates/.agent/skills/api-patterns/rest.md +40 -0
- package/templates/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/templates/.agent/skills/api-patterns/security-testing.md +122 -0
- package/templates/.agent/skills/api-patterns/trpc.md +41 -0
- package/templates/.agent/skills/api-patterns/versioning.md +22 -0
- package/templates/.agent/skills/app-builder/SKILL.md +75 -0
- package/templates/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/templates/.agent/skills/app-builder/feature-building.md +53 -0
- package/templates/.agent/skills/app-builder/project-detection.md +34 -0
- package/templates/.agent/skills/app-builder/scaffolding.md +118 -0
- package/templates/.agent/skills/app-builder/tech-stack.md +41 -0
- package/templates/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/templates/.agent/skills/architecture/SKILL.md +55 -0
- package/templates/.agent/skills/architecture/context-discovery.md +43 -0
- package/templates/.agent/skills/architecture/examples.md +94 -0
- package/templates/.agent/skills/architecture/pattern-selection.md +68 -0
- package/templates/.agent/skills/architecture/patterns-reference.md +50 -0
- package/templates/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/templates/.agent/skills/bash-linux/SKILL.md +199 -0
- package/templates/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/templates/.agent/skills/better-auth-patterns/SKILL.md +121 -0
- package/templates/.agent/skills/brainstorming/SKILL.md +163 -0
- package/templates/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/templates/.agent/skills/bullmq-worker/SKILL.md +124 -0
- package/templates/.agent/skills/clean-code/SKILL.md +201 -0
- package/templates/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/templates/.agent/skills/database-design/SKILL.md +52 -0
- package/templates/.agent/skills/database-design/database-selection.md +43 -0
- package/templates/.agent/skills/database-design/indexing.md +39 -0
- package/templates/.agent/skills/database-design/migrations.md +48 -0
- package/templates/.agent/skills/database-design/optimization.md +36 -0
- package/templates/.agent/skills/database-design/orm-selection.md +30 -0
- package/templates/.agent/skills/database-design/schema-design.md +56 -0
- package/templates/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/templates/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/templates/.agent/skills/doc.md +177 -0
- package/templates/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/templates/.agent/skills/feature-spec-writer/SKILL.md +76 -0
- package/templates/.agent/skills/frontend-design/SKILL.md +452 -0
- package/templates/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/templates/.agent/skills/frontend-design/color-system.md +311 -0
- package/templates/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/templates/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/templates/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/templates/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/templates/.agent/skills/frontend-design/typography-system.md +345 -0
- package/templates/.agent/skills/frontend-design/ux-psychology.md +1116 -0
- package/templates/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/templates/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/templates/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/templates/.agent/skills/game-development/SKILL.md +167 -0
- package/templates/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/templates/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/templates/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/templates/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/templates/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/templates/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/templates/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/templates/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/templates/.agent/skills/geo-fundamentals/SKILL.md +156 -0
- package/templates/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/templates/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/templates/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/templates/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/templates/.agent/skills/lint-and-validate/SKILL.md +45 -0
- package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/templates/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/templates/.agent/skills/mobile-design/SKILL.md +394 -0
- package/templates/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/templates/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/templates/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/templates/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/templates/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/templates/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/templates/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/templates/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/templates/.agent/skills/mobile-design/mobile-typography.md +433 -0
- package/templates/.agent/skills/mobile-design/platform-android.md +666 -0
- package/templates/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/templates/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/templates/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/templates/.agent/skills/neo-storage/SKILL.md +115 -0
- package/templates/.agent/skills/nextjs-api-route/SKILL.md +134 -0
- package/templates/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -0
- package/templates/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/templates/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/templates/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/templates/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/templates/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/templates/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/templates/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/templates/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -0
- package/templates/.agent/skills/nextjs-react-expert/SKILL.md +293 -0
- package/templates/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/templates/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/templates/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/templates/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/templates/.agent/skills/performance-profiling/SKILL.md +143 -0
- package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/templates/.agent/skills/plan-writing/SKILL.md +152 -0
- package/templates/.agent/skills/powershell-windows/SKILL.md +167 -0
- package/templates/.agent/skills/prisma-7-patterns/SKILL.md +91 -0
- package/templates/.agent/skills/python-patterns/SKILL.md +441 -0
- package/templates/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/templates/.agent/skills/rust-pro/SKILL.md +176 -0
- package/templates/.agent/skills/seo-fundamentals/SKILL.md +129 -0
- package/templates/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/templates/.agent/skills/server-management/SKILL.md +161 -0
- package/templates/.agent/skills/systematic-debugging/SKILL.md +109 -0
- package/templates/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/templates/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/templates/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/templates/.agent/skills/uu-pdp-feature-check/SKILL.md +116 -0
- package/templates/.agent/skills/vibe-buildplan/SKILL.md +232 -0
- package/templates/.agent/skills/vibe-prd/SKILL.md +226 -0
- package/templates/.agent/skills/vibe-research/SKILL.md +162 -0
- package/templates/.agent/skills/vibe-techdesign/SKILL.md +195 -0
- package/templates/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/templates/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/templates/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/templates/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/templates/.agent/skills/xendit-integration/SKILL.md +100 -0
- package/templates/.agent/snippets/@react-component-template.tsx +29 -0
- package/templates/.agent/workflows/brainstorm.md +113 -0
- package/templates/.agent/workflows/create.md +59 -0
- package/templates/.agent/workflows/db-migrate.md +26 -0
- package/templates/.agent/workflows/debug.md +103 -0
- package/templates/.agent/workflows/deploy.md +35 -0
- package/templates/.agent/workflows/dev-reset.md +40 -0
- package/templates/.agent/workflows/enhance.md +63 -0
- package/templates/.agent/workflows/git-commit.md +24 -0
- package/templates/.agent/workflows/health-check.md +34 -0
- package/templates/.agent/workflows/new-feature.md +32 -0
- package/templates/.agent/workflows/orchestrate.md +237 -0
- package/templates/.agent/workflows/plan.md +89 -0
- package/templates/.agent/workflows/preview.md +81 -0
- package/templates/.agent/workflows/status.md +86 -0
- package/templates/.agent/workflows/test.md +144 -0
- package/templates/.agent/workflows/ui-ux-pro-max.md +296 -0
- package/templates/.agent/workflows/vibe-plan.md +133 -0
- package/templates/.agent/workflows/vibe-recap.md +17 -0
- package/templates/.antigravity/rules.md +64 -0
- package/templates/AGENTS.md +268 -0
- package/templates/docs/00A-PROJECT-CHARTER.md +33 -0
- package/templates/docs/00B-BRD.md +25 -0
- package/templates/docs/01-PRD.md +122 -0
- package/templates/docs/01B-SRS-LENGKAP.md +60 -0
- package/templates/docs/02-TECH-DESIGN.md +491 -0
- package/templates/docs/03-UI-GUIDELINES.md +301 -0
- package/templates/docs/04-BACKLOG.md +127 -0
- package/templates/docs/05-DEPLOYMENT.md +363 -0
- package/templates/docs/06-DEVELOPMENT-LOG.md +78 -0
- package/templates/specs/README.md +54 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clean-code
|
|
3
|
+
description: Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments
|
|
4
|
+
allowed-tools: Read, Write, Edit
|
|
5
|
+
version: 2.0
|
|
6
|
+
priority: CRITICAL
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Clean Code - Pragmatic AI Coding Standards
|
|
10
|
+
|
|
11
|
+
> **CRITICAL SKILL** - Be **concise, direct, and solution-focused**.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Core Principles
|
|
16
|
+
|
|
17
|
+
| Principle | Rule |
|
|
18
|
+
|-----------|------|
|
|
19
|
+
| **SRP** | Single Responsibility - each function/class does ONE thing |
|
|
20
|
+
| **DRY** | Don't Repeat Yourself - extract duplicates, reuse |
|
|
21
|
+
| **KISS** | Keep It Simple - simplest solution that works |
|
|
22
|
+
| **YAGNI** | You Aren't Gonna Need It - don't build unused features |
|
|
23
|
+
| **Boy Scout** | Leave code cleaner than you found it |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Naming Rules
|
|
28
|
+
|
|
29
|
+
| Element | Convention |
|
|
30
|
+
|---------|------------|
|
|
31
|
+
| **Variables** | Reveal intent: `userCount` not `n` |
|
|
32
|
+
| **Functions** | Verb + noun: `getUserById()` not `user()` |
|
|
33
|
+
| **Booleans** | Question form: `isActive`, `hasPermission`, `canEdit` |
|
|
34
|
+
| **Constants** | SCREAMING_SNAKE: `MAX_RETRY_COUNT` |
|
|
35
|
+
|
|
36
|
+
> **Rule:** If you need a comment to explain a name, rename it.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Function Rules
|
|
41
|
+
|
|
42
|
+
| Rule | Description |
|
|
43
|
+
|------|-------------|
|
|
44
|
+
| **Small** | Max 20 lines, ideally 5-10 |
|
|
45
|
+
| **One Thing** | Does one thing, does it well |
|
|
46
|
+
| **One Level** | One level of abstraction per function |
|
|
47
|
+
| **Few Args** | Max 3 arguments, prefer 0-2 |
|
|
48
|
+
| **No Side Effects** | Don't mutate inputs unexpectedly |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Code Structure
|
|
53
|
+
|
|
54
|
+
| Pattern | Apply |
|
|
55
|
+
|---------|-------|
|
|
56
|
+
| **Guard Clauses** | Early returns for edge cases |
|
|
57
|
+
| **Flat > Nested** | Avoid deep nesting (max 2 levels) |
|
|
58
|
+
| **Composition** | Small functions composed together |
|
|
59
|
+
| **Colocation** | Keep related code close |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## AI Coding Style
|
|
64
|
+
|
|
65
|
+
| Situation | Action |
|
|
66
|
+
|-----------|--------|
|
|
67
|
+
| User asks for feature | Write it directly |
|
|
68
|
+
| User reports bug | Fix it, don't explain |
|
|
69
|
+
| No clear requirement | Ask, don't assume |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Anti-Patterns (DON'T)
|
|
74
|
+
|
|
75
|
+
| ❌ Pattern | ✅ Fix |
|
|
76
|
+
|-----------|-------|
|
|
77
|
+
| Comment every line | Delete obvious comments |
|
|
78
|
+
| Helper for one-liner | Inline the code |
|
|
79
|
+
| Factory for 2 objects | Direct instantiation |
|
|
80
|
+
| utils.ts with 1 function | Put code where used |
|
|
81
|
+
| "First we import..." | Just write code |
|
|
82
|
+
| Deep nesting | Guard clauses |
|
|
83
|
+
| Magic numbers | Named constants |
|
|
84
|
+
| God functions | Split by responsibility |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 🔴 Before Editing ANY File (THINK FIRST!)
|
|
89
|
+
|
|
90
|
+
**Before changing a file, ask yourself:**
|
|
91
|
+
|
|
92
|
+
| Question | Why |
|
|
93
|
+
|----------|-----|
|
|
94
|
+
| **What imports this file?** | They might break |
|
|
95
|
+
| **What does this file import?** | Interface changes |
|
|
96
|
+
| **What tests cover this?** | Tests might fail |
|
|
97
|
+
| **Is this a shared component?** | Multiple places affected |
|
|
98
|
+
|
|
99
|
+
**Quick Check:**
|
|
100
|
+
```
|
|
101
|
+
File to edit: UserService.ts
|
|
102
|
+
└── Who imports this? → UserController.ts, AuthController.ts
|
|
103
|
+
└── Do they need changes too? → Check function signatures
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> 🔴 **Rule:** Edit the file + all dependent files in the SAME task.
|
|
107
|
+
> 🔴 **Never leave broken imports or missing updates.**
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Summary
|
|
112
|
+
|
|
113
|
+
| Do | Don't |
|
|
114
|
+
|----|-------|
|
|
115
|
+
| Write code directly | Write tutorials |
|
|
116
|
+
| Let code self-document | Add obvious comments |
|
|
117
|
+
| Fix bugs immediately | Explain the fix first |
|
|
118
|
+
| Inline small things | Create unnecessary files |
|
|
119
|
+
| Name things clearly | Use abbreviations |
|
|
120
|
+
| Keep functions small | Write 100+ line functions |
|
|
121
|
+
|
|
122
|
+
> **Remember: The user wants working code, not a programming lesson.**
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 🔴 Self-Check Before Completing (MANDATORY)
|
|
127
|
+
|
|
128
|
+
**Before saying "task complete", verify:**
|
|
129
|
+
|
|
130
|
+
| Check | Question |
|
|
131
|
+
|-------|----------|
|
|
132
|
+
| ✅ **Goal met?** | Did I do exactly what user asked? |
|
|
133
|
+
| ✅ **Files edited?** | Did I modify all necessary files? |
|
|
134
|
+
| ✅ **Code works?** | Did I test/verify the change? |
|
|
135
|
+
| ✅ **No errors?** | Lint and TypeScript pass? |
|
|
136
|
+
| ✅ **Nothing forgotten?** | Any edge cases missed? |
|
|
137
|
+
|
|
138
|
+
> 🔴 **Rule:** If ANY check fails, fix it before completing.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Verification Scripts (MANDATORY)
|
|
143
|
+
|
|
144
|
+
> 🔴 **CRITICAL:** Each agent runs ONLY their own skill's scripts after completing work.
|
|
145
|
+
|
|
146
|
+
### Agent → Script Mapping
|
|
147
|
+
|
|
148
|
+
| Agent | Script | Command |
|
|
149
|
+
|-------|--------|---------|
|
|
150
|
+
| **frontend-specialist** | UX Audit | `python .agent/skills/frontend-design/scripts/ux_audit.py .` |
|
|
151
|
+
| **frontend-specialist** | A11y Check | `python .agent/skills/frontend-design/scripts/accessibility_checker.py .` |
|
|
152
|
+
| **backend-specialist** | API Validator | `python .agent/skills/api-patterns/scripts/api_validator.py .` |
|
|
153
|
+
| **mobile-developer** | Mobile Audit | `python .agent/skills/mobile-design/scripts/mobile_audit.py .` |
|
|
154
|
+
| **database-architect** | Schema Validate | `python .agent/skills/database-design/scripts/schema_validator.py .` |
|
|
155
|
+
| **security-auditor** | Security Scan | `python .agent/skills/vulnerability-scanner/scripts/security_scan.py .` |
|
|
156
|
+
| **seo-specialist** | SEO Check | `python .agent/skills/seo-fundamentals/scripts/seo_checker.py .` |
|
|
157
|
+
| **seo-specialist** | GEO Check | `python .agent/skills/geo-fundamentals/scripts/geo_checker.py .` |
|
|
158
|
+
| **performance-optimizer** | Lighthouse | `python .agent/skills/performance-profiling/scripts/lighthouse_audit.py <url>` |
|
|
159
|
+
| **test-engineer** | Test Runner | `python .agent/skills/testing-patterns/scripts/test_runner.py .` |
|
|
160
|
+
| **test-engineer** | Playwright | `python .agent/skills/webapp-testing/scripts/playwright_runner.py <url>` |
|
|
161
|
+
| **Any agent** | Lint Check | `python .agent/skills/lint-and-validate/scripts/lint_runner.py .` |
|
|
162
|
+
| **Any agent** | Type Coverage | `python .agent/skills/lint-and-validate/scripts/type_coverage.py .` |
|
|
163
|
+
| **Any agent** | i18n Check | `python .agent/skills/i18n-localization/scripts/i18n_checker.py .` |
|
|
164
|
+
|
|
165
|
+
> ❌ **WRONG:** `test-engineer` running `ux_audit.py`
|
|
166
|
+
> ✅ **CORRECT:** `frontend-specialist` running `ux_audit.py`
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### 🔴 Script Output Handling (READ → SUMMARIZE → ASK)
|
|
171
|
+
|
|
172
|
+
**When running a validation script, you MUST:**
|
|
173
|
+
|
|
174
|
+
1. **Run the script** and capture ALL output
|
|
175
|
+
2. **Parse the output** - identify errors, warnings, and passes
|
|
176
|
+
3. **Summarize to user** in this format:
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
## Script Results: [script_name.py]
|
|
180
|
+
|
|
181
|
+
### ❌ Errors Found (X items)
|
|
182
|
+
- [File:Line] Error description 1
|
|
183
|
+
- [File:Line] Error description 2
|
|
184
|
+
|
|
185
|
+
### ⚠️ Warnings (Y items)
|
|
186
|
+
- [File:Line] Warning description
|
|
187
|
+
|
|
188
|
+
### ✅ Passed (Z items)
|
|
189
|
+
- Check 1 passed
|
|
190
|
+
- Check 2 passed
|
|
191
|
+
|
|
192
|
+
**Should I fix the X errors?**
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
4. **Wait for user confirmation** before fixing
|
|
196
|
+
5. **After fixing** → Re-run script to confirm
|
|
197
|
+
|
|
198
|
+
> 🔴 **VIOLATION:** Running script and ignoring output = FAILED task.
|
|
199
|
+
> 🔴 **VIOLATION:** Auto-fixing without asking = Not allowed.
|
|
200
|
+
> 🔴 **Rule:** Always READ output → SUMMARIZE → ASK → then fix.
|
|
201
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review-checklist
|
|
3
|
+
description: Code review guidelines covering code quality, security, and best practices.
|
|
4
|
+
allowed-tools: Read, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Code Review Checklist
|
|
8
|
+
|
|
9
|
+
## Quick Review Checklist
|
|
10
|
+
|
|
11
|
+
### Correctness
|
|
12
|
+
- [ ] Code does what it's supposed to do
|
|
13
|
+
- [ ] Edge cases handled
|
|
14
|
+
- [ ] Error handling in place
|
|
15
|
+
- [ ] No obvious bugs
|
|
16
|
+
|
|
17
|
+
### Security
|
|
18
|
+
- [ ] Input validated and sanitized
|
|
19
|
+
- [ ] No SQL/NoSQL injection vulnerabilities
|
|
20
|
+
- [ ] No XSS or CSRF vulnerabilities
|
|
21
|
+
- [ ] No hardcoded secrets or sensitive credentials
|
|
22
|
+
- [ ] **AI-Specific:** Protection against Prompt Injection (if applicable)
|
|
23
|
+
- [ ] **AI-Specific:** Outputs are sanitized before being used in critical sinks
|
|
24
|
+
|
|
25
|
+
### Performance
|
|
26
|
+
- [ ] No N+1 queries
|
|
27
|
+
- [ ] No unnecessary loops
|
|
28
|
+
- [ ] Appropriate caching
|
|
29
|
+
- [ ] Bundle size impact considered
|
|
30
|
+
|
|
31
|
+
### Code Quality
|
|
32
|
+
- [ ] Clear naming
|
|
33
|
+
- [ ] DRY - no duplicate code
|
|
34
|
+
- [ ] SOLID principles followed
|
|
35
|
+
- [ ] Appropriate abstraction level
|
|
36
|
+
|
|
37
|
+
### Testing
|
|
38
|
+
- [ ] Unit tests for new code
|
|
39
|
+
- [ ] Edge cases tested
|
|
40
|
+
- [ ] Tests readable and maintainable
|
|
41
|
+
|
|
42
|
+
### Documentation
|
|
43
|
+
- [ ] Complex logic commented
|
|
44
|
+
- [ ] Public APIs documented
|
|
45
|
+
- [ ] README updated if needed
|
|
46
|
+
|
|
47
|
+
## AI & LLM Review Patterns (2025)
|
|
48
|
+
|
|
49
|
+
### Logic & Hallucinations
|
|
50
|
+
- [ ] **Chain of Thought:** Does the logic follow a verifiable path?
|
|
51
|
+
- [ ] **Edge Cases:** Did the AI account for empty states, timeouts, and partial failures?
|
|
52
|
+
- [ ] **External State:** Is the code making safe assumptions about file systems or networks?
|
|
53
|
+
|
|
54
|
+
### Prompt Engineering Review
|
|
55
|
+
```markdown
|
|
56
|
+
// ❌ Vague prompt in code
|
|
57
|
+
const response = await ai.generate(userInput);
|
|
58
|
+
|
|
59
|
+
// ✅ Structured & Safe prompt
|
|
60
|
+
const response = await ai.generate({
|
|
61
|
+
system: "You are a specialized parser...",
|
|
62
|
+
input: sanitize(userInput),
|
|
63
|
+
schema: ResponseSchema
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Anti-Patterns to Flag
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// ❌ Magic numbers
|
|
71
|
+
if (status === 3) { ... }
|
|
72
|
+
|
|
73
|
+
// ✅ Named constants
|
|
74
|
+
if (status === Status.ACTIVE) { ... }
|
|
75
|
+
|
|
76
|
+
// ❌ Deep nesting
|
|
77
|
+
if (a) { if (b) { if (c) { ... } } }
|
|
78
|
+
|
|
79
|
+
// ✅ Early returns
|
|
80
|
+
if (!a) return;
|
|
81
|
+
if (!b) return;
|
|
82
|
+
if (!c) return;
|
|
83
|
+
// do work
|
|
84
|
+
|
|
85
|
+
// ❌ Long functions (100+ lines)
|
|
86
|
+
// ✅ Small, focused functions
|
|
87
|
+
|
|
88
|
+
// ❌ any type
|
|
89
|
+
const data: any = ...
|
|
90
|
+
|
|
91
|
+
// ✅ Proper types
|
|
92
|
+
const data: UserData = ...
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Review Comments Guide
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
// Blocking issues use 🔴
|
|
99
|
+
🔴 BLOCKING: SQL injection vulnerability here
|
|
100
|
+
|
|
101
|
+
// Important suggestions use 🟡
|
|
102
|
+
🟡 SUGGESTION: Consider using useMemo for performance
|
|
103
|
+
|
|
104
|
+
// Minor nits use 🟢
|
|
105
|
+
🟢 NIT: Prefer const over let for immutable variable
|
|
106
|
+
|
|
107
|
+
// Questions use ❓
|
|
108
|
+
❓ QUESTION: What happens if user is null here?
|
|
109
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-design
|
|
3
|
+
description: Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Database Design
|
|
8
|
+
|
|
9
|
+
> **Learn to THINK, not copy SQL patterns.**
|
|
10
|
+
|
|
11
|
+
## 🎯 Selective Reading Rule
|
|
12
|
+
|
|
13
|
+
**Read ONLY files relevant to the request!** Check the content map, find what you need.
|
|
14
|
+
|
|
15
|
+
| File | Description | When to Read |
|
|
16
|
+
|------|-------------|--------------|
|
|
17
|
+
| `database-selection.md` | PostgreSQL vs Neon vs Turso vs SQLite | Choosing database |
|
|
18
|
+
| `orm-selection.md` | Drizzle vs Prisma vs Kysely | Choosing ORM |
|
|
19
|
+
| `schema-design.md` | Normalization, PKs, relationships | Designing schema |
|
|
20
|
+
| `indexing.md` | Index types, composite indexes | Performance tuning |
|
|
21
|
+
| `optimization.md` | N+1, EXPLAIN ANALYZE | Query optimization |
|
|
22
|
+
| `migrations.md` | Safe migrations, serverless DBs | Schema changes |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ⚠️ Core Principle
|
|
27
|
+
|
|
28
|
+
- ASK user for database preferences when unclear
|
|
29
|
+
- Choose database/ORM based on CONTEXT
|
|
30
|
+
- Don't default to PostgreSQL for everything
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Decision Checklist
|
|
35
|
+
|
|
36
|
+
Before designing schema:
|
|
37
|
+
|
|
38
|
+
- [ ] Asked user about database preference?
|
|
39
|
+
- [ ] Chosen database for THIS context?
|
|
40
|
+
- [ ] Considered deployment environment?
|
|
41
|
+
- [ ] Planned index strategy?
|
|
42
|
+
- [ ] Defined relationship types?
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Anti-Patterns
|
|
47
|
+
|
|
48
|
+
❌ Default to PostgreSQL for simple apps (SQLite may suffice)
|
|
49
|
+
❌ Skip indexing
|
|
50
|
+
❌ Use SELECT * in production
|
|
51
|
+
❌ Store JSON when structured data is better
|
|
52
|
+
❌ Ignore N+1 queries
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Database Selection (2025)
|
|
2
|
+
|
|
3
|
+
> Choose database based on context, not default.
|
|
4
|
+
|
|
5
|
+
## Decision Tree
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
What are your requirements?
|
|
9
|
+
│
|
|
10
|
+
├── Full relational features needed
|
|
11
|
+
│ ├── Self-hosted → PostgreSQL
|
|
12
|
+
│ └── Serverless → Neon, Supabase
|
|
13
|
+
│
|
|
14
|
+
├── Edge deployment / Ultra-low latency
|
|
15
|
+
│ └── Turso (edge SQLite)
|
|
16
|
+
│
|
|
17
|
+
├── AI / Vector search
|
|
18
|
+
│ └── PostgreSQL + pgvector
|
|
19
|
+
│
|
|
20
|
+
├── Simple / Embedded / Local
|
|
21
|
+
│ └── SQLite
|
|
22
|
+
│
|
|
23
|
+
└── Global distribution
|
|
24
|
+
└── PlanetScale, CockroachDB, Turso
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Comparison
|
|
28
|
+
|
|
29
|
+
| Database | Best For | Trade-offs |
|
|
30
|
+
|----------|----------|------------|
|
|
31
|
+
| **PostgreSQL** | Full features, complex queries | Needs hosting |
|
|
32
|
+
| **Neon** | Serverless PG, branching | PG complexity |
|
|
33
|
+
| **Turso** | Edge, low latency | SQLite limitations |
|
|
34
|
+
| **SQLite** | Simple, embedded, local | Single-writer |
|
|
35
|
+
| **PlanetScale** | MySQL, global scale | No foreign keys |
|
|
36
|
+
|
|
37
|
+
## Questions to Ask
|
|
38
|
+
|
|
39
|
+
1. What's the deployment environment?
|
|
40
|
+
2. How complex are the queries?
|
|
41
|
+
3. Is edge/serverless important?
|
|
42
|
+
4. Vector search needed?
|
|
43
|
+
5. Global distribution required?
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Indexing Principles
|
|
2
|
+
|
|
3
|
+
> When and how to create indexes effectively.
|
|
4
|
+
|
|
5
|
+
## When to Create Indexes
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Index these:
|
|
9
|
+
├── Columns in WHERE clauses
|
|
10
|
+
├── Columns in JOIN conditions
|
|
11
|
+
├── Columns in ORDER BY
|
|
12
|
+
├── Foreign key columns
|
|
13
|
+
└── Unique constraints
|
|
14
|
+
|
|
15
|
+
Don't over-index:
|
|
16
|
+
├── Write-heavy tables (slower inserts)
|
|
17
|
+
├── Low-cardinality columns
|
|
18
|
+
├── Columns rarely queried
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Index Type Selection
|
|
22
|
+
|
|
23
|
+
| Type | Use For |
|
|
24
|
+
|------|---------|
|
|
25
|
+
| **B-tree** | General purpose, equality & range |
|
|
26
|
+
| **Hash** | Equality only, faster |
|
|
27
|
+
| **GIN** | JSONB, arrays, full-text |
|
|
28
|
+
| **GiST** | Geometric, range types |
|
|
29
|
+
| **HNSW/IVFFlat** | Vector similarity (pgvector) |
|
|
30
|
+
|
|
31
|
+
## Composite Index Principles
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Order matters for composite indexes:
|
|
35
|
+
├── Equality columns first
|
|
36
|
+
├── Range columns last
|
|
37
|
+
├── Most selective first
|
|
38
|
+
└── Match query pattern
|
|
39
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Migration Principles
|
|
2
|
+
|
|
3
|
+
> Safe migration strategy for zero-downtime changes.
|
|
4
|
+
|
|
5
|
+
## Safe Migration Strategy
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
For zero-downtime changes:
|
|
9
|
+
│
|
|
10
|
+
├── Adding column
|
|
11
|
+
│ └── Add as nullable → backfill → add NOT NULL
|
|
12
|
+
│
|
|
13
|
+
├── Removing column
|
|
14
|
+
│ └── Stop using → deploy → remove column
|
|
15
|
+
│
|
|
16
|
+
├── Adding index
|
|
17
|
+
│ └── CREATE INDEX CONCURRENTLY (non-blocking)
|
|
18
|
+
│
|
|
19
|
+
└── Renaming column
|
|
20
|
+
└── Add new → migrate data → deploy → drop old
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Migration Philosophy
|
|
24
|
+
|
|
25
|
+
- Never make breaking changes in one step
|
|
26
|
+
- Test migrations on data copy first
|
|
27
|
+
- Have rollback plan
|
|
28
|
+
- Run in transaction when possible
|
|
29
|
+
|
|
30
|
+
## Serverless Databases
|
|
31
|
+
|
|
32
|
+
### Neon (Serverless PostgreSQL)
|
|
33
|
+
|
|
34
|
+
| Feature | Benefit |
|
|
35
|
+
|---------|---------|
|
|
36
|
+
| Scale to zero | Cost savings |
|
|
37
|
+
| Instant branching | Dev/preview |
|
|
38
|
+
| Full PostgreSQL | Compatibility |
|
|
39
|
+
| Autoscaling | Traffic handling |
|
|
40
|
+
|
|
41
|
+
### Turso (Edge SQLite)
|
|
42
|
+
|
|
43
|
+
| Feature | Benefit |
|
|
44
|
+
|---------|---------|
|
|
45
|
+
| Edge locations | Ultra-low latency |
|
|
46
|
+
| SQLite compatible | Simple |
|
|
47
|
+
| Generous free tier | Cost |
|
|
48
|
+
| Global distribution | Performance |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Query Optimization
|
|
2
|
+
|
|
3
|
+
> N+1 problem, EXPLAIN ANALYZE, optimization priorities.
|
|
4
|
+
|
|
5
|
+
## N+1 Problem
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
What is N+1?
|
|
9
|
+
├── 1 query to get parent records
|
|
10
|
+
├── N queries to get related records
|
|
11
|
+
└── Very slow!
|
|
12
|
+
|
|
13
|
+
Solutions:
|
|
14
|
+
├── JOIN → Single query with all data
|
|
15
|
+
├── Eager loading → ORM handles JOIN
|
|
16
|
+
├── DataLoader → Batch and cache (GraphQL)
|
|
17
|
+
└── Subquery → Fetch related in one query
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Query Analysis Mindset
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Before optimizing:
|
|
24
|
+
├── EXPLAIN ANALYZE the query
|
|
25
|
+
├── Look for Seq Scan (full table scan)
|
|
26
|
+
├── Check actual vs estimated rows
|
|
27
|
+
└── Identify missing indexes
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Optimization Priorities
|
|
31
|
+
|
|
32
|
+
1. **Add missing indexes** (most common issue)
|
|
33
|
+
2. **Select only needed columns** (not SELECT *)
|
|
34
|
+
3. **Use proper JOINs** (avoid subqueries when possible)
|
|
35
|
+
4. **Limit early** (pagination at database level)
|
|
36
|
+
5. **Cache** (when appropriate)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# ORM Selection (2025)
|
|
2
|
+
|
|
3
|
+
> Choose ORM based on deployment and DX needs.
|
|
4
|
+
|
|
5
|
+
## Decision Tree
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
What's the context?
|
|
9
|
+
│
|
|
10
|
+
├── Edge deployment / Bundle size matters
|
|
11
|
+
│ └── Drizzle (smallest, SQL-like)
|
|
12
|
+
│
|
|
13
|
+
├── Best DX / Schema-first
|
|
14
|
+
│ └── Prisma (migrations, studio)
|
|
15
|
+
│
|
|
16
|
+
├── Maximum control
|
|
17
|
+
│ └── Raw SQL with query builder
|
|
18
|
+
│
|
|
19
|
+
└── Python ecosystem
|
|
20
|
+
└── SQLAlchemy 2.0 (async support)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Comparison
|
|
24
|
+
|
|
25
|
+
| ORM | Best For | Trade-offs |
|
|
26
|
+
|-----|----------|------------|
|
|
27
|
+
| **Drizzle** | Edge, TypeScript | Newer, less examples |
|
|
28
|
+
| **Prisma** | DX, schema management | Heavier, not edge-ready |
|
|
29
|
+
| **Kysely** | Type-safe SQL builder | Manual migrations |
|
|
30
|
+
| **Raw SQL** | Complex queries, control | Manual type safety |
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Schema Design Principles
|
|
2
|
+
|
|
3
|
+
> Normalization, primary keys, timestamps, relationships.
|
|
4
|
+
|
|
5
|
+
## Normalization Decision
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
When to normalize (separate tables):
|
|
9
|
+
├── Data is repeated across rows
|
|
10
|
+
├── Updates would need multiple changes
|
|
11
|
+
├── Relationships are clear
|
|
12
|
+
└── Query patterns benefit
|
|
13
|
+
|
|
14
|
+
When to denormalize (embed/duplicate):
|
|
15
|
+
├── Read performance critical
|
|
16
|
+
├── Data rarely changes
|
|
17
|
+
├── Always fetched together
|
|
18
|
+
└── Simpler queries needed
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Primary Key Selection
|
|
22
|
+
|
|
23
|
+
| Type | Use When |
|
|
24
|
+
|------|----------|
|
|
25
|
+
| **UUID** | Distributed systems, security |
|
|
26
|
+
| **ULID** | UUID + sortable by time |
|
|
27
|
+
| **Auto-increment** | Simple apps, single database |
|
|
28
|
+
| **Natural key** | Rarely (business meaning) |
|
|
29
|
+
|
|
30
|
+
## Timestamp Strategy
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
For every table:
|
|
34
|
+
├── created_at → When created
|
|
35
|
+
├── updated_at → Last modified
|
|
36
|
+
└── deleted_at → Soft delete (if needed)
|
|
37
|
+
|
|
38
|
+
Use TIMESTAMPTZ (with timezone) not TIMESTAMP
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Relationship Types
|
|
42
|
+
|
|
43
|
+
| Type | When | Implementation |
|
|
44
|
+
|------|------|----------------|
|
|
45
|
+
| **One-to-One** | Extension data | Separate table with FK |
|
|
46
|
+
| **One-to-Many** | Parent-children | FK on child table |
|
|
47
|
+
| **Many-to-Many** | Both sides have many | Junction table |
|
|
48
|
+
|
|
49
|
+
## Foreign Key ON DELETE
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
├── CASCADE → Delete children with parent
|
|
53
|
+
├── SET NULL → Children become orphans
|
|
54
|
+
├── RESTRICT → Prevent delete if children exist
|
|
55
|
+
└── SET DEFAULT → Children get default value
|
|
56
|
+
```
|