@macpaw/cctk 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/License +21 -0
- package/README.md +142 -0
- package/bin/index.js +5 -0
- package/dist/index.js +1 -0
- package/package.json +65 -0
- package/templates/claude/agents/brainstormer.md +113 -0
- package/templates/claude/agents/code-reviewer.md +157 -0
- package/templates/claude/agents/copywriter.md +110 -0
- package/templates/claude/agents/database-admin.md +92 -0
- package/templates/claude/agents/debugger.md +137 -0
- package/templates/claude/agents/docs-manager.md +208 -0
- package/templates/claude/agents/fullstack-developer.md +95 -0
- package/templates/claude/agents/git-manager.md +394 -0
- package/templates/claude/agents/journal-writer.md +113 -0
- package/templates/claude/agents/mcp-manager.md +89 -0
- package/templates/claude/agents/planner.md +108 -0
- package/templates/claude/agents/project-manager.md +125 -0
- package/templates/claude/agents/registry.json +304 -0
- package/templates/claude/agents/researcher.md +37 -0
- package/templates/claude/agents/scout-external.md +140 -0
- package/templates/claude/agents/scout.md +106 -0
- package/templates/claude/agents/tester.md +105 -0
- package/templates/claude/agents/ui-ux-designer.md +208 -0
- package/templates/claude/commands/ask.md +56 -0
- package/templates/claude/commands/bootstrap/auto/fast.md +106 -0
- package/templates/claude/commands/bootstrap/auto/parallel.md +64 -0
- package/templates/claude/commands/bootstrap/auto.md +110 -0
- package/templates/claude/commands/bootstrap.md +130 -0
- package/templates/claude/commands/brainstorm.md +75 -0
- package/templates/claude/commands/code/auto.md +198 -0
- package/templates/claude/commands/code/no-test.md +172 -0
- package/templates/claude/commands/code/parallel.md +100 -0
- package/templates/claude/commands/code.md +197 -0
- package/templates/claude/commands/coding-level.md +37 -0
- package/templates/claude/commands/content/cro.md +41 -0
- package/templates/claude/commands/content/enhance.md +12 -0
- package/templates/claude/commands/content/fast.md +11 -0
- package/templates/claude/commands/content/good.md +14 -0
- package/templates/claude/commands/cook/auto/fast.md +26 -0
- package/templates/claude/commands/cook/auto/parallel.md +49 -0
- package/templates/claude/commands/cook/auto.md +15 -0
- package/templates/claude/commands/cook.md +101 -0
- package/templates/claude/commands/debug.md +13 -0
- package/templates/claude/commands/docs/init.md +37 -0
- package/templates/claude/commands/docs/summarize.md +22 -0
- package/templates/claude/commands/docs/update.md +78 -0
- package/templates/claude/commands/fix/ci.md +17 -0
- package/templates/claude/commands/fix/fast.md +18 -0
- package/templates/claude/commands/fix/hard.md +35 -0
- package/templates/claude/commands/fix/logs.md +26 -0
- package/templates/claude/commands/fix/parallel.md +54 -0
- package/templates/claude/commands/fix/test.md +20 -0
- package/templates/claude/commands/fix/types.md +9 -0
- package/templates/claude/commands/fix/ui.md +33 -0
- package/templates/claude/commands/fix.md +43 -0
- package/templates/claude/commands/git/cm.md +5 -0
- package/templates/claude/commands/git/cp.md +4 -0
- package/templates/claude/commands/git/merge.md +40 -0
- package/templates/claude/commands/git/pr.md +50 -0
- package/templates/claude/commands/journal.md +7 -0
- package/templates/claude/commands/kanban.md +99 -0
- package/templates/claude/commands/plan/archive.md +57 -0
- package/templates/claude/commands/plan/ci.md +33 -0
- package/templates/claude/commands/plan/cro.md +67 -0
- package/templates/claude/commands/plan/fast.md +66 -0
- package/templates/claude/commands/plan/hard.md +92 -0
- package/templates/claude/commands/plan/parallel.md +129 -0
- package/templates/claude/commands/plan/two.md +45 -0
- package/templates/claude/commands/plan/validate.md +117 -0
- package/templates/claude/commands/plan.md +30 -0
- package/templates/claude/commands/preview.md +87 -0
- package/templates/claude/commands/registry.json +313 -0
- package/templates/claude/commands/review/codebase/parallel.md +122 -0
- package/templates/claude/commands/review/codebase.md +47 -0
- package/templates/claude/commands/scout/ext.md +35 -0
- package/templates/claude/commands/scout.md +28 -0
- package/templates/claude/commands/skill/add.md +36 -0
- package/templates/claude/commands/skill/create.md +29 -0
- package/templates/claude/commands/skill/fix-logs.md +22 -0
- package/templates/claude/commands/skill/optimize/auto.md +25 -0
- package/templates/claude/commands/skill/optimize.md +34 -0
- package/templates/claude/commands/skill/plan.md +45 -0
- package/templates/claude/commands/test/ui.md +91 -0
- package/templates/claude/commands/test.md +8 -0
- package/templates/claude/commands/use-mcp.md +34 -0
- package/templates/claude/commands/watzup.md +8 -0
- package/templates/claude/commands/worktree.md +126 -0
- package/templates/claude/hooks/dev-rules-reminder.cjs +258 -0
- package/templates/claude/hooks/docs/README.md +42 -0
- package/templates/claude/hooks/lib/cctk-config-utils.cjs +751 -0
- package/templates/claude/hooks/lib/cctk-paths.cjs +106 -0
- package/templates/claude/hooks/lib/context-tracker.cjs +346 -0
- package/templates/claude/hooks/privacy-block.cjs +289 -0
- package/templates/claude/hooks/registry.json +77 -0
- package/templates/claude/hooks/scout-block/broad-pattern-detector.cjs +293 -0
- package/templates/claude/hooks/scout-block/error-formatter.cjs +156 -0
- package/templates/claude/hooks/scout-block/path-extractor.cjs +359 -0
- package/templates/claude/hooks/scout-block/pattern-matcher.cjs +184 -0
- package/templates/claude/hooks/scout-block/vendor/ignore.js +626 -0
- package/templates/claude/hooks/scout-block.cjs +167 -0
- package/templates/claude/hooks/session-end.cjs +35 -0
- package/templates/claude/hooks/session-init.cjs +214 -0
- package/templates/claude/hooks/subagent-init.cjs +161 -0
- package/templates/claude/hooks/write-compact-marker.cjs +153 -0
- package/templates/claude/output-styles/coding-level-1.md +148 -0
- package/templates/claude/output-styles/coding-level-2.md +159 -0
- package/templates/claude/output-styles/coding-level-3.md +91 -0
- package/templates/claude/scripts/README.md +33 -0
- package/templates/claude/scripts/generate-catalogs.cjs +318 -0
- package/templates/claude/scripts/registry.json +48 -0
- package/templates/claude/scripts/set-active-plan.cjs +45 -0
- package/templates/claude/scripts/validate-docs.cjs +447 -0
- package/templates/claude/scripts/worktree.cjs +658 -0
- package/templates/claude/skills/README.md +112 -0
- package/templates/claude/skills/ai-artist/SKILL.md +75 -0
- package/templates/claude/skills/ai-artist/references/advanced-techniques.md +184 -0
- package/templates/claude/skills/ai-artist/references/domain-code.md +66 -0
- package/templates/claude/skills/ai-artist/references/domain-data.md +72 -0
- package/templates/claude/skills/ai-artist/references/domain-marketing.md +66 -0
- package/templates/claude/skills/ai-artist/references/domain-patterns.md +33 -0
- package/templates/claude/skills/ai-artist/references/domain-writing.md +68 -0
- package/templates/claude/skills/ai-artist/references/image-prompting.md +141 -0
- package/templates/claude/skills/ai-artist/references/llm-prompting.md +165 -0
- package/templates/claude/skills/ai-artist/references/nano-banana.md +59 -0
- package/templates/claude/skills/ai-artist/references/reasoning-techniques.md +201 -0
- package/templates/claude/skills/backend-development/SKILL.md +95 -0
- package/templates/claude/skills/backend-development/references/backend-api-design.md +495 -0
- package/templates/claude/skills/backend-development/references/backend-architecture.md +454 -0
- package/templates/claude/skills/backend-development/references/backend-authentication.md +338 -0
- package/templates/claude/skills/backend-development/references/backend-code-quality.md +659 -0
- package/templates/claude/skills/backend-development/references/backend-debugging.md +904 -0
- package/templates/claude/skills/backend-development/references/backend-devops.md +494 -0
- package/templates/claude/skills/backend-development/references/backend-mindset.md +387 -0
- package/templates/claude/skills/backend-development/references/backend-performance.md +397 -0
- package/templates/claude/skills/backend-development/references/backend-security.md +290 -0
- package/templates/claude/skills/backend-development/references/backend-technologies.md +256 -0
- package/templates/claude/skills/backend-development/references/backend-testing.md +429 -0
- package/templates/claude/skills/better-auth/SKILL.md +204 -0
- package/templates/claude/skills/better-auth/references/advanced-features.md +553 -0
- package/templates/claude/skills/better-auth/references/database-integration.md +577 -0
- package/templates/claude/skills/better-auth/references/email-password-auth.md +416 -0
- package/templates/claude/skills/better-auth/references/oauth-providers.md +430 -0
- package/templates/claude/skills/better-auth/scripts/better_auth_init.py +521 -0
- package/templates/claude/skills/chrome-devtools/SKILL.md +473 -0
- package/templates/claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
- package/templates/claude/skills/chrome-devtools/references/performance-guide.md +940 -0
- package/templates/claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
- package/templates/claude/skills/chrome-devtools/scripts/README.md +288 -0
- package/templates/claude/skills/chrome-devtools/scripts/aria-snapshot.js +368 -0
- package/templates/claude/skills/chrome-devtools/scripts/click.js +92 -0
- package/templates/claude/skills/chrome-devtools/scripts/console.js +85 -0
- package/templates/claude/skills/chrome-devtools/scripts/evaluate.js +59 -0
- package/templates/claude/skills/chrome-devtools/scripts/fill.js +84 -0
- package/templates/claude/skills/chrome-devtools/scripts/inject-auth.js +247 -0
- package/templates/claude/skills/chrome-devtools/scripts/install-deps.sh +11 -0
- package/templates/claude/skills/chrome-devtools/scripts/install.sh +36 -0
- package/templates/claude/skills/chrome-devtools/scripts/lib/browser.js +335 -0
- package/templates/claude/skills/chrome-devtools/scripts/lib/selector.js +183 -0
- package/templates/claude/skills/chrome-devtools/scripts/navigate.js +60 -0
- package/templates/claude/skills/chrome-devtools/scripts/network.js +113 -0
- package/templates/claude/skills/chrome-devtools/scripts/package.json +16 -0
- package/templates/claude/skills/chrome-devtools/scripts/performance.js +159 -0
- package/templates/claude/skills/chrome-devtools/scripts/screenshot.js +212 -0
- package/templates/claude/skills/chrome-devtools/scripts/select-ref.js +151 -0
- package/templates/claude/skills/chrome-devtools/scripts/snapshot.js +143 -0
- package/templates/claude/skills/chrome-devtools/scripts/ws-debug.js +47 -0
- package/templates/claude/skills/chrome-devtools/scripts/ws-full-debug.js +115 -0
- package/templates/claude/skills/claude-code/references/advanced-features.md +399 -0
- package/templates/claude/skills/claude-code/references/agent-skills.md +399 -0
- package/templates/claude/skills/claude-code/references/api-reference.md +498 -0
- package/templates/claude/skills/claude-code/references/best-practices.md +447 -0
- package/templates/claude/skills/claude-code/references/cicd-integration.md +428 -0
- package/templates/claude/skills/claude-code/references/common-workflows.md +107 -0
- package/templates/claude/skills/claude-code/references/configuration.md +480 -0
- package/templates/claude/skills/claude-code/references/enterprise-features.md +472 -0
- package/templates/claude/skills/claude-code/references/getting-started.md +244 -0
- package/templates/claude/skills/claude-code/references/hooks-and-plugins.md +444 -0
- package/templates/claude/skills/claude-code/references/hooks-comprehensive.md +622 -0
- package/templates/claude/skills/claude-code/references/ide-integration.md +316 -0
- package/templates/claude/skills/claude-code/references/mcp-integration.md +386 -0
- package/templates/claude/skills/claude-code/references/slash-commands.md +460 -0
- package/templates/claude/skills/claude-code/references/troubleshooting.md +455 -0
- package/templates/claude/skills/claude-code/skill.md +60 -0
- package/templates/claude/skills/code-review/SKILL.md +143 -0
- package/templates/claude/skills/code-review/references/code-review-reception.md +209 -0
- package/templates/claude/skills/code-review/references/requesting-code-review.md +105 -0
- package/templates/claude/skills/code-review/references/verification-before-completion.md +139 -0
- package/templates/claude/skills/context-engineering/SKILL.md +86 -0
- package/templates/claude/skills/context-engineering/references/context-compression.md +84 -0
- package/templates/claude/skills/context-engineering/references/context-degradation.md +93 -0
- package/templates/claude/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/templates/claude/skills/context-engineering/references/context-optimization.md +82 -0
- package/templates/claude/skills/context-engineering/references/evaluation.md +89 -0
- package/templates/claude/skills/context-engineering/references/memory-systems.md +88 -0
- package/templates/claude/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/templates/claude/skills/context-engineering/references/project-development.md +97 -0
- package/templates/claude/skills/context-engineering/references/tool-design.md +86 -0
- package/templates/claude/skills/context-engineering/scripts/compression_evaluator.py +329 -0
- package/templates/claude/skills/context-engineering/scripts/context_analyzer.py +294 -0
- package/templates/claude/skills/databases/SKILL.md +232 -0
- package/templates/claude/skills/databases/references/mongodb-aggregation.md +447 -0
- package/templates/claude/skills/databases/references/mongodb-atlas.md +465 -0
- package/templates/claude/skills/databases/references/mongodb-crud.md +408 -0
- package/templates/claude/skills/databases/references/mongodb-indexing.md +442 -0
- package/templates/claude/skills/databases/references/postgresql-administration.md +594 -0
- package/templates/claude/skills/databases/references/postgresql-performance.md +527 -0
- package/templates/claude/skills/databases/references/postgresql-psql-cli.md +467 -0
- package/templates/claude/skills/databases/references/postgresql-queries.md +475 -0
- package/templates/claude/skills/databases/scripts/db_backup.py +502 -0
- package/templates/claude/skills/databases/scripts/db_migrate.py +414 -0
- package/templates/claude/skills/databases/scripts/db_performance_check.py +445 -0
- package/templates/claude/skills/debugging/SKILL.md +84 -0
- package/templates/claude/skills/debugging/references/defense-in-depth.md +124 -0
- package/templates/claude/skills/debugging/references/root-cause-tracing.md +122 -0
- package/templates/claude/skills/debugging/references/systematic-debugging.md +102 -0
- package/templates/claude/skills/debugging/references/verification.md +123 -0
- package/templates/claude/skills/debugging/scripts/find-polluter.sh +63 -0
- package/templates/claude/skills/debugging/scripts/find-polluter.test.md +102 -0
- package/templates/claude/skills/devops/SKILL.md +293 -0
- package/templates/claude/skills/devops/references/browser-rendering.md +305 -0
- package/templates/claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
- package/templates/claude/skills/devops/references/cloudflare-platform.md +271 -0
- package/templates/claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
- package/templates/claude/skills/devops/references/docker-basics.md +297 -0
- package/templates/claude/skills/devops/references/docker-compose.md +292 -0
- package/templates/claude/skills/devops/references/gcloud-platform.md +307 -0
- package/templates/claude/skills/devops/references/gcloud-services.md +304 -0
- package/templates/claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
- package/templates/claude/skills/devops/scripts/docker_optimize.py +320 -0
- package/templates/claude/skills/docs-seeker/SKILL.md +95 -0
- package/templates/claude/skills/docs-seeker/package.json +24 -0
- package/templates/claude/skills/docs-seeker/references/advanced.md +78 -0
- package/templates/claude/skills/docs-seeker/references/context7-patterns.md +68 -0
- package/templates/claude/skills/docs-seeker/references/errors.md +68 -0
- package/templates/claude/skills/docs-seeker/scripts/analyze-llms-txt.js +245 -0
- package/templates/claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
- package/templates/claude/skills/docs-seeker/scripts/fetch-docs.js +212 -0
- package/templates/claude/skills/docs-seeker/workflows/library-search.md +87 -0
- package/templates/claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
- package/templates/claude/skills/docs-seeker/workflows/topic-search.md +77 -0
- package/templates/claude/skills/frontend-design/SKILL.md +85 -0
- package/templates/claude/skills/frontend-design/references/analysis-best-practices.md +80 -0
- package/templates/claude/skills/frontend-design/references/analysis-prompts.md +141 -0
- package/templates/claude/skills/frontend-design/references/analysis-techniques.md +118 -0
- package/templates/claude/skills/frontend-design/references/animejs.md +396 -0
- package/templates/claude/skills/frontend-design/references/design-extraction-overview.md +71 -0
- package/templates/claude/skills/frontend-design/references/extraction-best-practices.md +141 -0
- package/templates/claude/skills/frontend-design/references/extraction-output-templates.md +162 -0
- package/templates/claude/skills/frontend-design/references/extraction-prompts.md +127 -0
- package/templates/claude/skills/frontend-design/references/technical-accessibility.md +119 -0
- package/templates/claude/skills/frontend-design/references/technical-best-practices.md +97 -0
- package/templates/claude/skills/frontend-design/references/technical-optimization.md +44 -0
- package/templates/claude/skills/frontend-design/references/technical-overview.md +90 -0
- package/templates/claude/skills/frontend-design/references/technical-workflows.md +150 -0
- package/templates/claude/skills/frontend-design/references/visual-analysis-overview.md +95 -0
- package/templates/claude/skills/frontend-development/SKILL.md +399 -0
- package/templates/claude/skills/frontend-development/resources/common-patterns.md +331 -0
- package/templates/claude/skills/frontend-development/resources/complete-examples.md +872 -0
- package/templates/claude/skills/frontend-development/resources/component-patterns.md +502 -0
- package/templates/claude/skills/frontend-development/resources/data-fetching.md +767 -0
- package/templates/claude/skills/frontend-development/resources/file-organization.md +502 -0
- package/templates/claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
- package/templates/claude/skills/frontend-development/resources/performance.md +406 -0
- package/templates/claude/skills/frontend-development/resources/routing-guide.md +364 -0
- package/templates/claude/skills/frontend-development/resources/styling-guide.md +428 -0
- package/templates/claude/skills/frontend-development/resources/typescript-standards.md +418 -0
- package/templates/claude/skills/markdown-novel-viewer/SKILL.md +272 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/favicon.png +0 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/novel-theme.css +872 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/reader.js +378 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/template.html +85 -0
- package/templates/claude/skills/markdown-novel-viewer/package.json +15 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +49 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/server.cjs +398 -0
- package/templates/claude/skills/mcp-builder/SKILL.md +328 -0
- package/templates/claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/templates/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/templates/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/templates/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/templates/claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/templates/claude/skills/mcp-builder/scripts/evaluation.py +381 -0
- package/templates/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/templates/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/templates/claude/skills/mcp-management/README.md +219 -0
- package/templates/claude/skills/mcp-management/SKILL.md +209 -0
- package/templates/claude/skills/mcp-management/assets/tools.json +3146 -0
- package/templates/claude/skills/mcp-management/references/configuration.md +114 -0
- package/templates/claude/skills/mcp-management/references/gemini-cli-integration.md +209 -0
- package/templates/claude/skills/mcp-management/references/mcp-protocol.md +116 -0
- package/templates/claude/skills/mcp-management/scripts/.env.example +10 -0
- package/templates/claude/skills/mcp-management/scripts/cli.ts +202 -0
- package/templates/claude/skills/mcp-management/scripts/mcp-client.ts +247 -0
- package/templates/claude/skills/mcp-management/scripts/package.json +20 -0
- package/templates/claude/skills/mcp-management/scripts/tsconfig.json +15 -0
- package/templates/claude/skills/media-processing/SKILL.md +91 -0
- package/templates/claude/skills/media-processing/references/common-workflows.md +132 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-streaming.md +395 -0
- package/templates/claude/skills/media-processing/references/format-compatibility.md +375 -0
- package/templates/claude/skills/media-processing/references/imagemagick-batch.md +612 -0
- package/templates/claude/skills/media-processing/references/imagemagick-editing.md +623 -0
- package/templates/claude/skills/media-processing/references/rmbg-background-removal.md +66 -0
- package/templates/claude/skills/media-processing/references/troubleshooting.md +109 -0
- package/templates/claude/skills/media-processing/scripts/README.md +102 -0
- package/templates/claude/skills/media-processing/scripts/batch-remove-background.sh +124 -0
- package/templates/claude/skills/media-processing/scripts/batch_resize.py +342 -0
- package/templates/claude/skills/media-processing/scripts/media_convert.py +311 -0
- package/templates/claude/skills/media-processing/scripts/remove-background.sh +96 -0
- package/templates/claude/skills/media-processing/scripts/remove-bg-node.js +181 -0
- package/templates/claude/skills/mermaidjs-v11/SKILL.md +115 -0
- package/templates/claude/skills/mermaidjs-v11/references/cli-usage.md +228 -0
- package/templates/claude/skills/mermaidjs-v11/references/configuration.md +232 -0
- package/templates/claude/skills/mermaidjs-v11/references/diagram-types.md +315 -0
- package/templates/claude/skills/mermaidjs-v11/references/examples.md +344 -0
- package/templates/claude/skills/mermaidjs-v11/references/integration.md +310 -0
- package/templates/claude/skills/planning/SKILL.md +115 -0
- package/templates/claude/skills/planning/references/codebase-understanding.md +62 -0
- package/templates/claude/skills/planning/references/output-standards.md +127 -0
- package/templates/claude/skills/planning/references/plan-organization.md +150 -0
- package/templates/claude/skills/planning/references/research-phase.md +49 -0
- package/templates/claude/skills/planning/references/solution-design.md +63 -0
- package/templates/claude/skills/plans-kanban/SKILL.md +157 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard-template.html +119 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard.css +1594 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard.js +659 -0
- package/templates/claude/skills/plans-kanban/assets/favicon.png +0 -0
- package/templates/claude/skills/plans-kanban/package.json +13 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +941 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-parser.cjs +194 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-scanner.cjs +277 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/port-finder.cjs +49 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
- package/templates/claude/skills/plans-kanban/scripts/server.cjs +249 -0
- package/templates/claude/skills/problem-solving/SKILL.md +96 -0
- package/templates/claude/skills/problem-solving/references/attribution.md +69 -0
- package/templates/claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
- package/templates/claude/skills/problem-solving/references/inversion-exercise.md +91 -0
- package/templates/claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
- package/templates/claude/skills/problem-solving/references/scale-game.md +95 -0
- package/templates/claude/skills/problem-solving/references/simplification-cascades.md +80 -0
- package/templates/claude/skills/problem-solving/references/when-stuck.md +72 -0
- package/templates/claude/skills/registry.json +258 -0
- package/templates/claude/skills/repomix/SKILL.md +247 -0
- package/templates/claude/skills/repomix/references/configuration.md +211 -0
- package/templates/claude/skills/repomix/references/usage-patterns.md +232 -0
- package/templates/claude/skills/repomix/scripts/README.md +179 -0
- package/templates/claude/skills/repomix/scripts/repomix_batch.py +455 -0
- package/templates/claude/skills/repomix/scripts/repos.example.json +15 -0
- package/templates/claude/skills/research/SKILL.md +168 -0
- package/templates/claude/skills/sequential-thinking/.env.example +8 -0
- package/templates/claude/skills/sequential-thinking/README.md +183 -0
- package/templates/claude/skills/sequential-thinking/SKILL.md +94 -0
- package/templates/claude/skills/sequential-thinking/package.json +31 -0
- package/templates/claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
- package/templates/claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
- package/templates/claude/skills/sequential-thinking/references/core-patterns.md +95 -0
- package/templates/claude/skills/sequential-thinking/references/examples-api.md +88 -0
- package/templates/claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
- package/templates/claude/skills/sequential-thinking/references/examples-debug.md +90 -0
- package/templates/claude/skills/sequential-thinking/scripts/format-thought.js +182 -0
- package/templates/claude/skills/sequential-thinking/scripts/process-thought.js +252 -0
- package/templates/claude/skills/skill-creator/LICENSE.txt +202 -0
- package/templates/claude/skills/skill-creator/SKILL.md +266 -0
- package/templates/claude/skills/skill-creator/references/agent-skills-spec.md +51 -0
- package/templates/claude/skills/skill-creator/scripts/encoding_utils.py +21 -0
- package/templates/claude/skills/skill-creator/scripts/init_skill.py +304 -0
- package/templates/claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/claude/skills/skill-creator/scripts/quick_validate.py +66 -0
- package/templates/claude/skills/template-skill/SKILL.md +6 -0
- package/templates/claude/skills/vitest/SKILL.md +595 -0
- package/templates/claude/skills/vitest/references/async-patterns.md +82 -0
- package/templates/claude/skills/vitest/references/mock-patterns.md +78 -0
- package/templates/claude/skills/vitest/references/monorepo-setup.md +185 -0
- package/templates/claude/skills/vitest/references/turborepo-setup.md +332 -0
- package/templates/claude/skills/web-frameworks/SKILL.md +324 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
- package/templates/claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
- package/templates/claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
- package/templates/claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/templates/claude/workflows/development-rules.md +40 -0
- package/templates/claude/workflows/documentation-management.md +121 -0
- package/templates/claude/workflows/orchestration-protocol.md +16 -0
- package/templates/claude/workflows/primary-workflow.md +45 -0
- package/templates/claude/workflows/registry.json +37 -0
- package/templates/common/.cct.json +41 -0
- package/templates/common/.cctkignore +22 -0
- package/templates/common/.env.example +39 -0
- package/templates/common/.mcp.json.example +16 -0
- package/templates/common/metadata.json +15 -0
- package/templates/common/settings.json +79 -0
- package/templates/common/statusline.cjs +271 -0
- package/templates/config/.repomixignore +22 -0
- package/templates/config/AGENTS.md +55 -0
- package/templates/config/CLAUDE.md +87 -0
- package/templates/plans/bug-fix-template.md +69 -0
- package/templates/plans/feature-implementation-template.md +84 -0
- package/templates/plans/refactor-template.md +82 -0
- package/templates/plans/template-usage-guide.md +58 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
# Database Integration
|
|
2
|
+
|
|
3
|
+
Better Auth supports multiple databases and ORMs for flexible data persistence.
|
|
4
|
+
|
|
5
|
+
## Supported Databases
|
|
6
|
+
|
|
7
|
+
- SQLite
|
|
8
|
+
- PostgreSQL
|
|
9
|
+
- MySQL/MariaDB
|
|
10
|
+
- MongoDB
|
|
11
|
+
- Any database with adapter support
|
|
12
|
+
|
|
13
|
+
## Direct Database Connection
|
|
14
|
+
|
|
15
|
+
### SQLite
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { betterAuth } from "better-auth";
|
|
19
|
+
import Database from "better-sqlite3";
|
|
20
|
+
|
|
21
|
+
export const auth = betterAuth({
|
|
22
|
+
database: new Database("./sqlite.db"),
|
|
23
|
+
// or
|
|
24
|
+
database: new Database(":memory:") // In-memory for testing
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### PostgreSQL
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import { betterAuth } from "better-auth";
|
|
32
|
+
import { Pool } from "pg";
|
|
33
|
+
|
|
34
|
+
const pool = new Pool({
|
|
35
|
+
connectionString: process.env.DATABASE_URL,
|
|
36
|
+
// or explicit config
|
|
37
|
+
host: "localhost",
|
|
38
|
+
port: 5432,
|
|
39
|
+
user: "postgres",
|
|
40
|
+
password: "password",
|
|
41
|
+
database: "myapp"
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const auth = betterAuth({
|
|
45
|
+
database: pool
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### MySQL
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { betterAuth } from "better-auth";
|
|
53
|
+
import { createPool } from "mysql2/promise";
|
|
54
|
+
|
|
55
|
+
const pool = createPool({
|
|
56
|
+
host: "localhost",
|
|
57
|
+
user: "root",
|
|
58
|
+
password: "password",
|
|
59
|
+
database: "myapp",
|
|
60
|
+
waitForConnections: true,
|
|
61
|
+
connectionLimit: 10
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export const auth = betterAuth({
|
|
65
|
+
database: pool
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## ORM Adapters
|
|
70
|
+
|
|
71
|
+
### Drizzle ORM
|
|
72
|
+
|
|
73
|
+
**Install:**
|
|
74
|
+
```bash
|
|
75
|
+
npm install drizzle-orm better-auth
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Setup:**
|
|
79
|
+
```ts
|
|
80
|
+
import { betterAuth } from "better-auth";
|
|
81
|
+
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
82
|
+
import { drizzle } from "drizzle-orm/node-postgres";
|
|
83
|
+
import { Pool } from "pg";
|
|
84
|
+
|
|
85
|
+
const pool = new Pool({
|
|
86
|
+
connectionString: process.env.DATABASE_URL
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const db = drizzle(pool);
|
|
90
|
+
|
|
91
|
+
export const auth = betterAuth({
|
|
92
|
+
database: drizzleAdapter(db, {
|
|
93
|
+
provider: "pg", // "pg" | "mysql" | "sqlite"
|
|
94
|
+
schema: {
|
|
95
|
+
// Optional: custom table names
|
|
96
|
+
user: "users",
|
|
97
|
+
session: "sessions",
|
|
98
|
+
account: "accounts",
|
|
99
|
+
verification: "verifications"
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Generate Schema:**
|
|
106
|
+
```bash
|
|
107
|
+
npx @better-auth/cli generate --adapter drizzle
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Prisma
|
|
111
|
+
|
|
112
|
+
**Install:**
|
|
113
|
+
```bash
|
|
114
|
+
npm install @prisma/client better-auth
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Setup:**
|
|
118
|
+
```ts
|
|
119
|
+
import { betterAuth } from "better-auth";
|
|
120
|
+
import { prismaAdapter } from "better-auth/adapters/prisma";
|
|
121
|
+
import { PrismaClient } from "@prisma/client";
|
|
122
|
+
|
|
123
|
+
const prisma = new PrismaClient();
|
|
124
|
+
|
|
125
|
+
export const auth = betterAuth({
|
|
126
|
+
database: prismaAdapter(prisma, {
|
|
127
|
+
provider: "postgresql", // "postgresql" | "mysql" | "sqlite"
|
|
128
|
+
})
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Generate Schema:**
|
|
133
|
+
```bash
|
|
134
|
+
npx @better-auth/cli generate --adapter prisma
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Apply to Prisma:**
|
|
138
|
+
```bash
|
|
139
|
+
# Add generated schema to schema.prisma
|
|
140
|
+
npx prisma migrate dev --name init
|
|
141
|
+
npx prisma generate
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Kysely
|
|
145
|
+
|
|
146
|
+
**Install:**
|
|
147
|
+
```bash
|
|
148
|
+
npm install kysely better-auth
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Setup:**
|
|
152
|
+
```ts
|
|
153
|
+
import { betterAuth } from "better-auth";
|
|
154
|
+
import { kyselyAdapter } from "better-auth/adapters/kysely";
|
|
155
|
+
import { Kysely, PostgresDialect } from "kysely";
|
|
156
|
+
import { Pool } from "pg";
|
|
157
|
+
|
|
158
|
+
const db = new Kysely({
|
|
159
|
+
dialect: new PostgresDialect({
|
|
160
|
+
pool: new Pool({
|
|
161
|
+
connectionString: process.env.DATABASE_URL
|
|
162
|
+
})
|
|
163
|
+
})
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export const auth = betterAuth({
|
|
167
|
+
database: kyselyAdapter(db, {
|
|
168
|
+
provider: "pg"
|
|
169
|
+
})
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Auto-migrate with Kysely:**
|
|
174
|
+
```bash
|
|
175
|
+
npx @better-auth/cli migrate --adapter kysely
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### MongoDB
|
|
179
|
+
|
|
180
|
+
**Install:**
|
|
181
|
+
```bash
|
|
182
|
+
npm install mongodb better-auth
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Setup:**
|
|
186
|
+
```ts
|
|
187
|
+
import { betterAuth } from "better-auth";
|
|
188
|
+
import { mongodbAdapter } from "better-auth/adapters/mongodb";
|
|
189
|
+
import { MongoClient } from "mongodb";
|
|
190
|
+
|
|
191
|
+
const client = new MongoClient(process.env.MONGODB_URI!);
|
|
192
|
+
await client.connect();
|
|
193
|
+
|
|
194
|
+
export const auth = betterAuth({
|
|
195
|
+
database: mongodbAdapter(client, {
|
|
196
|
+
databaseName: "myapp"
|
|
197
|
+
})
|
|
198
|
+
});
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Generate Collections:**
|
|
202
|
+
```bash
|
|
203
|
+
npx @better-auth/cli generate --adapter mongodb
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Core Database Schema
|
|
207
|
+
|
|
208
|
+
Better Auth requires these core tables/collections:
|
|
209
|
+
|
|
210
|
+
### User Table
|
|
211
|
+
|
|
212
|
+
```sql
|
|
213
|
+
CREATE TABLE user (
|
|
214
|
+
id TEXT PRIMARY KEY,
|
|
215
|
+
email TEXT UNIQUE NOT NULL,
|
|
216
|
+
emailVerified BOOLEAN DEFAULT FALSE,
|
|
217
|
+
name TEXT,
|
|
218
|
+
image TEXT,
|
|
219
|
+
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
220
|
+
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
221
|
+
);
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Session Table
|
|
225
|
+
|
|
226
|
+
```sql
|
|
227
|
+
CREATE TABLE session (
|
|
228
|
+
id TEXT PRIMARY KEY,
|
|
229
|
+
userId TEXT NOT NULL,
|
|
230
|
+
expiresAt TIMESTAMP NOT NULL,
|
|
231
|
+
ipAddress TEXT,
|
|
232
|
+
userAgent TEXT,
|
|
233
|
+
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
234
|
+
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
235
|
+
FOREIGN KEY (userId) REFERENCES user(id) ON DELETE CASCADE
|
|
236
|
+
);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Account Table
|
|
240
|
+
|
|
241
|
+
```sql
|
|
242
|
+
CREATE TABLE account (
|
|
243
|
+
id TEXT PRIMARY KEY,
|
|
244
|
+
userId TEXT NOT NULL,
|
|
245
|
+
accountId TEXT NOT NULL,
|
|
246
|
+
providerId TEXT NOT NULL,
|
|
247
|
+
accessToken TEXT,
|
|
248
|
+
refreshToken TEXT,
|
|
249
|
+
expiresAt TIMESTAMP,
|
|
250
|
+
scope TEXT,
|
|
251
|
+
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
252
|
+
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
253
|
+
FOREIGN KEY (userId) REFERENCES user(id) ON DELETE CASCADE,
|
|
254
|
+
UNIQUE(providerId, accountId)
|
|
255
|
+
);
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Verification Table
|
|
259
|
+
|
|
260
|
+
```sql
|
|
261
|
+
CREATE TABLE verification (
|
|
262
|
+
id TEXT PRIMARY KEY,
|
|
263
|
+
identifier TEXT NOT NULL,
|
|
264
|
+
value TEXT NOT NULL,
|
|
265
|
+
expiresAt TIMESTAMP NOT NULL,
|
|
266
|
+
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
267
|
+
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
268
|
+
);
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Schema Generation
|
|
272
|
+
|
|
273
|
+
### Using CLI
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Generate schema files
|
|
277
|
+
npx @better-auth/cli generate
|
|
278
|
+
|
|
279
|
+
# Specify adapter
|
|
280
|
+
npx @better-auth/cli generate --adapter drizzle
|
|
281
|
+
npx @better-auth/cli generate --adapter prisma
|
|
282
|
+
|
|
283
|
+
# Specify output
|
|
284
|
+
npx @better-auth/cli generate --output ./db/schema.ts
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Auto-migrate (Kysely only)
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
npx @better-auth/cli migrate
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
For other ORMs, apply generated schema manually.
|
|
294
|
+
|
|
295
|
+
## Custom Fields
|
|
296
|
+
|
|
297
|
+
Add custom fields to user table:
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
export const auth = betterAuth({
|
|
301
|
+
user: {
|
|
302
|
+
additionalFields: {
|
|
303
|
+
role: {
|
|
304
|
+
type: "string",
|
|
305
|
+
required: false,
|
|
306
|
+
defaultValue: "user"
|
|
307
|
+
},
|
|
308
|
+
phoneNumber: {
|
|
309
|
+
type: "string",
|
|
310
|
+
required: false
|
|
311
|
+
},
|
|
312
|
+
subscriptionTier: {
|
|
313
|
+
type: "string",
|
|
314
|
+
required: false
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
After adding fields:
|
|
322
|
+
```bash
|
|
323
|
+
npx @better-auth/cli generate
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Update user with custom fields:
|
|
327
|
+
```ts
|
|
328
|
+
await authClient.updateUser({
|
|
329
|
+
role: "admin",
|
|
330
|
+
phoneNumber: "+1234567890"
|
|
331
|
+
});
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## Plugin Schema Extensions
|
|
335
|
+
|
|
336
|
+
Plugins add their own tables/fields. Regenerate schema after adding plugins:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
npx @better-auth/cli generate
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Two-Factor Plugin Tables
|
|
343
|
+
|
|
344
|
+
- `twoFactor`: Stores TOTP secrets, backup codes
|
|
345
|
+
|
|
346
|
+
### Passkey Plugin Tables
|
|
347
|
+
|
|
348
|
+
- `passkey`: Stores WebAuthn credentials
|
|
349
|
+
|
|
350
|
+
### Organization Plugin Tables
|
|
351
|
+
|
|
352
|
+
- `organization`: Organization data
|
|
353
|
+
- `member`: Organization members
|
|
354
|
+
- `invitation`: Pending invitations
|
|
355
|
+
|
|
356
|
+
## Migration Strategies
|
|
357
|
+
|
|
358
|
+
### Development
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
# Generate schema
|
|
362
|
+
npx @better-auth/cli generate
|
|
363
|
+
|
|
364
|
+
# Apply migrations (Kysely)
|
|
365
|
+
npx @better-auth/cli migrate
|
|
366
|
+
|
|
367
|
+
# Or manual (Prisma)
|
|
368
|
+
npx prisma migrate dev
|
|
369
|
+
|
|
370
|
+
# Or manual (Drizzle)
|
|
371
|
+
npx drizzle-kit push
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Production
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
# Review generated migration
|
|
378
|
+
npx @better-auth/cli generate
|
|
379
|
+
|
|
380
|
+
# Test in staging
|
|
381
|
+
# Apply to production with your ORM's migration tool
|
|
382
|
+
|
|
383
|
+
# Prisma
|
|
384
|
+
npx prisma migrate deploy
|
|
385
|
+
|
|
386
|
+
# Drizzle
|
|
387
|
+
npx drizzle-kit push
|
|
388
|
+
|
|
389
|
+
# Kysely
|
|
390
|
+
npx @better-auth/cli migrate
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
## Connection Pooling
|
|
394
|
+
|
|
395
|
+
### PostgreSQL
|
|
396
|
+
|
|
397
|
+
```ts
|
|
398
|
+
import { Pool } from "pg";
|
|
399
|
+
|
|
400
|
+
const pool = new Pool({
|
|
401
|
+
connectionString: process.env.DATABASE_URL,
|
|
402
|
+
max: 20, // Max connections
|
|
403
|
+
idleTimeoutMillis: 30000,
|
|
404
|
+
connectionTimeoutMillis: 2000,
|
|
405
|
+
});
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### MySQL
|
|
409
|
+
|
|
410
|
+
```ts
|
|
411
|
+
import { createPool } from "mysql2/promise";
|
|
412
|
+
|
|
413
|
+
const pool = createPool({
|
|
414
|
+
connectionString: process.env.DATABASE_URL,
|
|
415
|
+
waitForConnections: true,
|
|
416
|
+
connectionLimit: 10,
|
|
417
|
+
queueLimit: 0
|
|
418
|
+
});
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## Database URLs
|
|
422
|
+
|
|
423
|
+
### PostgreSQL
|
|
424
|
+
|
|
425
|
+
```env
|
|
426
|
+
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
|
|
427
|
+
# Or with connection params
|
|
428
|
+
DATABASE_URL=postgresql://user:password@localhost:5432/dbname?schema=public&connection_limit=10
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### MySQL
|
|
432
|
+
|
|
433
|
+
```env
|
|
434
|
+
DATABASE_URL=mysql://user:password@localhost:3306/dbname
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### SQLite
|
|
438
|
+
|
|
439
|
+
```env
|
|
440
|
+
DATABASE_URL=file:./dev.db
|
|
441
|
+
# Or in-memory
|
|
442
|
+
DATABASE_URL=:memory:
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### MongoDB
|
|
446
|
+
|
|
447
|
+
```env
|
|
448
|
+
MONGODB_URI=mongodb://localhost:27017/dbname
|
|
449
|
+
# Or Atlas
|
|
450
|
+
MONGODB_URI=mongodb+srv://user:password@cluster.mongodb.net/dbname
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
## Performance Optimization
|
|
454
|
+
|
|
455
|
+
### Indexes
|
|
456
|
+
|
|
457
|
+
Better Auth CLI auto-generates essential indexes:
|
|
458
|
+
- `user.email` (unique)
|
|
459
|
+
- `session.userId`
|
|
460
|
+
- `account.userId`
|
|
461
|
+
- `account.providerId, accountId` (unique)
|
|
462
|
+
|
|
463
|
+
Add custom indexes for performance:
|
|
464
|
+
```sql
|
|
465
|
+
CREATE INDEX idx_session_expires ON session(expiresAt);
|
|
466
|
+
CREATE INDEX idx_user_created ON user(createdAt);
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### Query Optimization
|
|
470
|
+
|
|
471
|
+
```ts
|
|
472
|
+
// Use connection pooling
|
|
473
|
+
// Enable query caching where applicable
|
|
474
|
+
// Monitor slow queries
|
|
475
|
+
|
|
476
|
+
export const auth = betterAuth({
|
|
477
|
+
advanced: {
|
|
478
|
+
defaultCookieAttributes: {
|
|
479
|
+
sameSite: "lax",
|
|
480
|
+
secure: true,
|
|
481
|
+
httpOnly: true
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
## Backup Strategies
|
|
488
|
+
|
|
489
|
+
### PostgreSQL
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
# Backup
|
|
493
|
+
pg_dump dbname > backup.sql
|
|
494
|
+
|
|
495
|
+
# Restore
|
|
496
|
+
psql dbname < backup.sql
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### MySQL
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
# Backup
|
|
503
|
+
mysqldump -u root -p dbname > backup.sql
|
|
504
|
+
|
|
505
|
+
# Restore
|
|
506
|
+
mysql -u root -p dbname < backup.sql
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### SQLite
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
# Copy file
|
|
513
|
+
cp dev.db dev.db.backup
|
|
514
|
+
|
|
515
|
+
# Or use backup command
|
|
516
|
+
sqlite3 dev.db ".backup backup.db"
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
### MongoDB
|
|
520
|
+
|
|
521
|
+
```bash
|
|
522
|
+
# Backup
|
|
523
|
+
mongodump --db=dbname --out=./backup
|
|
524
|
+
|
|
525
|
+
# Restore
|
|
526
|
+
mongorestore --db=dbname ./backup/dbname
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
## Best Practices
|
|
530
|
+
|
|
531
|
+
1. **Environment Variables**: Store credentials in env vars, never commit
|
|
532
|
+
2. **Connection Pooling**: Use pools for PostgreSQL/MySQL in production
|
|
533
|
+
3. **Migrations**: Use ORM migration tools, not raw SQL in production
|
|
534
|
+
4. **Indexes**: Add indexes for frequently queried fields
|
|
535
|
+
5. **Backups**: Automate daily backups in production
|
|
536
|
+
6. **SSL**: Use SSL/TLS for database connections in production
|
|
537
|
+
7. **Schema Sync**: Keep schema in sync across environments
|
|
538
|
+
8. **Testing**: Use separate database for tests (in-memory SQLite ideal)
|
|
539
|
+
9. **Monitoring**: Monitor query performance and connection pool usage
|
|
540
|
+
10. **Cleanup**: Periodically clean expired sessions/verifications
|
|
541
|
+
|
|
542
|
+
## Troubleshooting
|
|
543
|
+
|
|
544
|
+
### Connection Errors
|
|
545
|
+
|
|
546
|
+
```ts
|
|
547
|
+
// Add connection timeout
|
|
548
|
+
const pool = new Pool({
|
|
549
|
+
connectionString: process.env.DATABASE_URL,
|
|
550
|
+
connectionTimeoutMillis: 5000
|
|
551
|
+
});
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Schema Mismatch
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
# Regenerate schema
|
|
558
|
+
npx @better-auth/cli generate
|
|
559
|
+
|
|
560
|
+
# Apply migrations
|
|
561
|
+
# For Prisma: npx prisma migrate dev
|
|
562
|
+
# For Drizzle: npx drizzle-kit push
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Migration Failures
|
|
566
|
+
|
|
567
|
+
- Check database credentials
|
|
568
|
+
- Verify database server is running
|
|
569
|
+
- Check for schema conflicts
|
|
570
|
+
- Review migration SQL manually
|
|
571
|
+
|
|
572
|
+
### Performance Issues
|
|
573
|
+
|
|
574
|
+
- Add indexes on foreign keys
|
|
575
|
+
- Enable connection pooling
|
|
576
|
+
- Monitor slow queries
|
|
577
|
+
- Consider read replicas for heavy read workloads
|