claudeinone-cli 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -1
- package/kit/.claude/.ck.json +9 -0
- package/kit/.claude/.ckignore +12 -0
- package/kit/.claude/agents/accessibility-auditor.md +46 -0
- package/kit/.claude/agents/api-designer.md +43 -0
- package/kit/.claude/agents/backend-developer.md +54 -0
- package/kit/.claude/agents/brainstormer.md +33 -0
- package/kit/.claude/agents/campaign-manager.md +36 -0
- package/kit/.claude/agents/code-reviewer.md +39 -0
- package/kit/.claude/agents/content-creator.md +38 -0
- package/kit/.claude/agents/copywriter.md +42 -0
- package/kit/.claude/agents/database-admin.md +37 -0
- package/kit/.claude/agents/debugger.md +46 -0
- package/kit/.claude/agents/devops-engineer.md +41 -0
- package/kit/.claude/agents/docs-manager.md +33 -0
- package/kit/.claude/agents/email-wizard.md +40 -0
- package/kit/.claude/agents/frontend-developer.md +52 -0
- package/kit/.claude/agents/fullstack-developer.md +55 -0
- package/kit/.claude/agents/git-manager.md +40 -0
- package/kit/.claude/agents/i18n-specialist.md +46 -0
- package/kit/.claude/agents/integration-specialist.md +48 -0
- package/kit/.claude/agents/journal-writer.md +39 -0
- package/kit/.claude/agents/mcp-manager.md +57 -0
- package/kit/.claude/agents/mobile-developer.md +38 -0
- package/kit/.claude/agents/performance-optimizer.md +38 -0
- package/kit/.claude/agents/planner.md +56 -0
- package/kit/.claude/agents/project-manager.md +34 -0
- package/kit/.claude/agents/refactorer.md +43 -0
- package/kit/.claude/agents/researcher.md +45 -0
- package/kit/.claude/agents/risk-analyst.md +33 -0
- package/kit/.claude/agents/scalability-consultant.md +39 -0
- package/kit/.claude/agents/scout.md +25 -0
- package/kit/.claude/agents/security-auditor.md +42 -0
- package/kit/.claude/agents/seo-specialist.md +44 -0
- package/kit/.claude/agents/skill-creator.md +64 -0
- package/kit/.claude/agents/social-media-manager.md +35 -0
- package/kit/.claude/agents/systems-designer.md +35 -0
- package/kit/.claude/agents/technology-strategist.md +43 -0
- package/kit/.claude/agents/tester.md +40 -0
- package/kit/.claude/agents/ui-ux-designer.md +40 -0
- package/kit/.claude/commands/co/ask.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/co/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/co/bootstrap.md +31 -0
- package/kit/.claude/commands/co/brainstorm.md +27 -0
- package/kit/.claude/commands/co/campaign.md +28 -0
- package/kit/.claude/commands/co/changelog.md +25 -0
- package/kit/.claude/commands/co/checkpoint.md +25 -0
- package/kit/.claude/commands/co/ci.md +26 -0
- package/kit/.claude/commands/co/ck-help.md +24 -0
- package/kit/.claude/commands/co/coding-level.md +24 -0
- package/kit/.claude/commands/co/content-cro.md +26 -0
- package/kit/.claude/commands/co/content-enhance.md +26 -0
- package/kit/.claude/commands/co/content-fast.md +24 -0
- package/kit/.claude/commands/co/content-good.md +26 -0
- package/kit/.claude/commands/co/cook.md +33 -0
- package/kit/.claude/commands/co/debug.md +26 -0
- package/kit/.claude/commands/co/deploy.md +25 -0
- package/kit/.claude/commands/co/design-3d.md +27 -0
- package/kit/.claude/commands/co/design-describe.md +25 -0
- package/kit/.claude/commands/co/design-fast.md +25 -0
- package/kit/.claude/commands/co/design-good.md +28 -0
- package/kit/.claude/commands/co/design-screenshot.md +26 -0
- package/kit/.claude/commands/co/design-video.md +26 -0
- package/kit/.claude/commands/co/docker.md +24 -0
- package/kit/.claude/commands/co/docs-api.md +25 -0
- package/kit/.claude/commands/co/docs-init.md +26 -0
- package/kit/.claude/commands/co/docs-readme.md +24 -0
- package/kit/.claude/commands/co/docs-summarize.md +25 -0
- package/kit/.claude/commands/co/docs-update.md +25 -0
- package/kit/.claude/commands/co/env-check.md +25 -0
- package/kit/.claude/commands/co/fix-ci.md +29 -0
- package/kit/.claude/commands/co/fix-fast.md +28 -0
- package/kit/.claude/commands/co/fix-hard.md +33 -0
- package/kit/.claude/commands/co/fix-logs.md +28 -0
- package/kit/.claude/commands/co/fix-types.md +28 -0
- package/kit/.claude/commands/co/fix-ui.md +28 -0
- package/kit/.claude/commands/co/fix.md +27 -0
- package/kit/.claude/commands/co/git-cm.md +26 -0
- package/kit/.claude/commands/co/git-cp.md +26 -0
- package/kit/.claude/commands/co/git-pr.md +26 -0
- package/kit/.claude/commands/co/index.md +24 -0
- package/kit/.claude/commands/co/integrate-polar.md +29 -0
- package/kit/.claude/commands/co/integrate-sepay.md +29 -0
- package/kit/.claude/commands/co/journal.md +27 -0
- package/kit/.claude/commands/co/k8s.md +24 -0
- package/kit/.claude/commands/co/kanban.md +25 -0
- package/kit/.claude/commands/co/lint-fix.md +24 -0
- package/kit/.claude/commands/co/load.md +25 -0
- package/kit/.claude/commands/co/migrate.md +28 -0
- package/kit/.claude/commands/co/mock.md +26 -0
- package/kit/.claude/commands/co/mode.md +24 -0
- package/kit/.claude/commands/co/monitor.md +25 -0
- package/kit/.claude/commands/co/new-feature.md +27 -0
- package/kit/.claude/commands/co/optimize.md +26 -0
- package/kit/.claude/commands/co/plan-archive.md +24 -0
- package/kit/.claude/commands/co/plan-ci.md +28 -0
- package/kit/.claude/commands/co/plan-cro.md +27 -0
- package/kit/.claude/commands/co/plan-fast.md +24 -0
- package/kit/.claude/commands/co/plan-hard.md +27 -0
- package/kit/.claude/commands/co/plan-parallel.md +25 -0
- package/kit/.claude/commands/co/plan-two.md +29 -0
- package/kit/.claude/commands/co/plan-validate.md +27 -0
- package/kit/.claude/commands/co/plan.md +27 -0
- package/kit/.claude/commands/co/pr.md +25 -0
- package/kit/.claude/commands/co/preview.md +26 -0
- package/kit/.claude/commands/co/refactor.md +25 -0
- package/kit/.claude/commands/co/release.md +25 -0
- package/kit/.claude/commands/co/review-a11y.md +24 -0
- package/kit/.claude/commands/co/review-codebase-parallel.md +27 -0
- package/kit/.claude/commands/co/review-codebase.md +27 -0
- package/kit/.claude/commands/co/review-perf.md +24 -0
- package/kit/.claude/commands/co/review-security.md +25 -0
- package/kit/.claude/commands/co/scaffold.md +25 -0
- package/kit/.claude/commands/co/scout.md +26 -0
- package/kit/.claude/commands/co/secure.md +26 -0
- package/kit/.claude/commands/co/seed.md +25 -0
- package/kit/.claude/commands/co/seo-audit.md +24 -0
- package/kit/.claude/commands/co/seo-keywords.md +25 -0
- package/kit/.claude/commands/co/skill-create.md +29 -0
- package/kit/.claude/commands/co/skill-fix-logs.md +28 -0
- package/kit/.claude/commands/co/slide-create.md +24 -0
- package/kit/.claude/commands/co/spawn.md +24 -0
- package/kit/.claude/commands/co/terraform.md +24 -0
- package/kit/.claude/commands/co/test-gen.md +24 -0
- package/kit/.claude/commands/co/test-ui.md +27 -0
- package/kit/.claude/commands/co/test.md +26 -0
- package/kit/.claude/commands/co/use-mcp.md +25 -0
- package/kit/.claude/commands/co/video-script.md +25 -0
- package/kit/.claude/commands/co/watzup.md +25 -0
- package/kit/.claude/commands/co/worktree.md +25 -0
- package/kit/.claude/commands/co/write-blog.md +25 -0
- package/kit/.claude/commands/co/write-copy.md +24 -0
- package/kit/.claude/commands/co/write-email.md +25 -0
- package/kit/.claude/commands/content/content-cro.md +26 -0
- package/kit/.claude/commands/content/content-enhance.md +26 -0
- package/kit/.claude/commands/content/content-fast.md +24 -0
- package/kit/.claude/commands/content/content-good.md +26 -0
- package/kit/.claude/commands/content/enhance.md +26 -0
- package/kit/.claude/commands/content/good.md +26 -0
- package/kit/.claude/commands/core/ask.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/core/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/core/bootstrap.md +31 -0
- package/kit/.claude/commands/core/ck-help.md +24 -0
- package/kit/.claude/commands/core/coding-level.md +24 -0
- package/kit/.claude/commands/core/cook.md +33 -0
- package/kit/.claude/commands/core/debug.md +26 -0
- package/kit/.claude/commands/core/journal.md +27 -0
- package/kit/.claude/commands/core/kanban.md +25 -0
- package/kit/.claude/commands/core/preview.md +26 -0
- package/kit/.claude/commands/core/scout.md +26 -0
- package/kit/.claude/commands/core/test-ui.md +27 -0
- package/kit/.claude/commands/core/test.md +26 -0
- package/kit/.claude/commands/core/use-mcp.md +25 -0
- package/kit/.claude/commands/core/watzup.md +25 -0
- package/kit/.claude/commands/core/worktree.md +25 -0
- package/kit/.claude/commands/design/3d.md +27 -0
- package/kit/.claude/commands/design/design-3d.md +27 -0
- package/kit/.claude/commands/design/design-describe.md +25 -0
- package/kit/.claude/commands/design/design-fast.md +25 -0
- package/kit/.claude/commands/design/design-good.md +28 -0
- package/kit/.claude/commands/design/design-screenshot.md +26 -0
- package/kit/.claude/commands/design/design-video.md +26 -0
- package/kit/.claude/commands/design/good.md +28 -0
- package/kit/.claude/commands/design/video.md +26 -0
- package/kit/.claude/commands/docs/docs-init.md +26 -0
- package/kit/.claude/commands/docs/docs-summarize.md +25 -0
- package/kit/.claude/commands/docs/docs-update.md +25 -0
- package/kit/.claude/commands/docs/init.md +26 -0
- package/kit/.claude/commands/docs/summarize.md +25 -0
- package/kit/.claude/commands/fix/ci.md +29 -0
- package/kit/.claude/commands/fix/fast.md +28 -0
- package/kit/.claude/commands/fix/fix-ci.md +29 -0
- package/kit/.claude/commands/fix/fix-fast.md +28 -0
- package/kit/.claude/commands/fix/fix-hard.md +33 -0
- package/kit/.claude/commands/fix/fix-logs.md +28 -0
- package/kit/.claude/commands/fix/fix-types.md +28 -0
- package/kit/.claude/commands/fix/fix-ui.md +28 -0
- package/kit/.claude/commands/fix/hard.md +33 -0
- package/kit/.claude/commands/fix/logs.md +28 -0
- package/kit/.claude/commands/fix/types.md +28 -0
- package/kit/.claude/commands/fix/ui.md +28 -0
- package/kit/.claude/commands/git/cp.md +26 -0
- package/kit/.claude/commands/git/git-cm.md +26 -0
- package/kit/.claude/commands/git/git-cp.md +26 -0
- package/kit/.claude/commands/git/git-pr.md +26 -0
- package/kit/.claude/commands/integrate/integrate-polar.md +29 -0
- package/kit/.claude/commands/integrate/integrate-sepay.md +29 -0
- package/kit/.claude/commands/integrate/sepay.md +29 -0
- package/kit/.claude/commands/plan/ci.md +28 -0
- package/kit/.claude/commands/plan/cro.md +27 -0
- package/kit/.claude/commands/plan/hard.md +27 -0
- package/kit/.claude/commands/plan/plan-archive.md +24 -0
- package/kit/.claude/commands/plan/plan-ci.md +28 -0
- package/kit/.claude/commands/plan/plan-cro.md +27 -0
- package/kit/.claude/commands/plan/plan-fast.md +24 -0
- package/kit/.claude/commands/plan/plan-hard.md +27 -0
- package/kit/.claude/commands/plan/plan-parallel.md +25 -0
- package/kit/.claude/commands/plan/plan-two.md +29 -0
- package/kit/.claude/commands/plan/plan-validate.md +27 -0
- package/kit/.claude/commands/plan/plan.md +27 -0
- package/kit/.claude/commands/plan/validate.md +27 -0
- package/kit/.claude/commands/skill/fix-logs.md +28 -0
- package/kit/.claude/commands/skill/skill-create.md +29 -0
- package/kit/.claude/commands/skill/skill-fix-logs.md +28 -0
- package/kit/.claude/settings.json +16 -0
- package/kit/.claude/skills/ai-anthropic.md +100 -0
- package/kit/.claude/skills/ai-context-engineering.md +113 -0
- package/kit/.claude/skills/ai-gemini.md +152 -0
- package/kit/.claude/skills/ai-langchain.md +93 -0
- package/kit/.claude/skills/ai-llamaindex.md +179 -0
- package/kit/.claude/skills/ai-mcp-builder.md +101 -0
- package/kit/.claude/skills/ai-openai.md +250 -0
- package/kit/.claude/skills/ai-prompt-engineering.md +173 -0
- package/kit/.claude/skills/ai-rag.md +91 -0
- package/kit/.claude/skills/ai-vectordb.md +215 -0
- package/kit/.claude/skills/analytics-segment.md +161 -0
- package/kit/.claude/skills/api-caching.md +103 -0
- package/kit/.claude/skills/api-documentation.md +50 -0
- package/kit/.claude/skills/api-graphql.md +234 -0
- package/kit/.claude/skills/api-openapi.md +116 -0
- package/kit/.claude/skills/api-pagination-filtering.md +239 -0
- package/kit/.claude/skills/api-rate-limiting.md +179 -0
- package/kit/.claude/skills/api-rest-advanced.md +50 -0
- package/kit/.claude/skills/api-rest.md +217 -0
- package/kit/.claude/skills/api-trpc.md +173 -0
- package/kit/.claude/skills/api-versioning.md +70 -0
- package/kit/.claude/skills/api-webhooks.md +226 -0
- package/kit/.claude/skills/arch-clean-code.md +226 -0
- package/kit/.claude/skills/arch-clean.md +91 -0
- package/kit/.claude/skills/arch-cqrs.md +229 -0
- package/kit/.claude/skills/arch-ddd.md +85 -0
- package/kit/.claude/skills/arch-event-driven.md +189 -0
- package/kit/.claude/skills/arch-microservices.md +80 -0
- package/kit/.claude/skills/arch-monorepo.md +87 -0
- package/kit/.claude/skills/arch-multi-tenant.md +81 -0
- package/kit/.claude/skills/arch-serverless.md +86 -0
- package/kit/.claude/skills/auth-clerk.md +97 -0
- package/kit/.claude/skills/auth-jwt.md +143 -0
- package/kit/.claude/skills/auth-lucia.md +93 -0
- package/kit/.claude/skills/auth-nextauth.md +446 -0
- package/kit/.claude/skills/auth-oauth.md +208 -0
- package/kit/.claude/skills/auth-oauth2.md +110 -0
- package/kit/.claude/skills/auth-passkeys.md +109 -0
- package/kit/.claude/skills/auth-session.md +88 -0
- package/kit/.claude/skills/backend-dotnet.md +414 -0
- package/kit/.claude/skills/backend-express.md +129 -0
- package/kit/.claude/skills/backend-fastify.md +104 -0
- package/kit/.claude/skills/backend-go.md +205 -0
- package/kit/.claude/skills/backend-graphql.md +149 -0
- package/kit/.claude/skills/backend-grpc.md +382 -0
- package/kit/.claude/skills/backend-hono.md +95 -0
- package/kit/.claude/skills/backend-java-spring.md +198 -0
- package/kit/.claude/skills/backend-nodejs-express.md +165 -0
- package/kit/.claude/skills/backend-nodejs.md +143 -0
- package/kit/.claude/skills/backend-php-laravel.md +156 -0
- package/kit/.claude/skills/backend-python-django.md +200 -0
- package/kit/.claude/skills/backend-python-fastapi.md +169 -0
- package/kit/.claude/skills/backend-ruby-rails.md +190 -0
- package/kit/.claude/skills/backend-rust.md +182 -0
- package/kit/.claude/skills/backend-websockets.md +392 -0
- package/kit/.claude/skills/cache-redis.md +195 -0
- package/kit/.claude/skills/caching-strategies.md +100 -0
- package/kit/.claude/skills/cloud-aws.md +165 -0
- package/kit/.claude/skills/cloud-azure.md +187 -0
- package/kit/.claude/skills/cloud-cloudflare.md +74 -0
- package/kit/.claude/skills/cloud-fly.md +94 -0
- package/kit/.claude/skills/cloud-gcp.md +160 -0
- package/kit/.claude/skills/cloud-railway.md +92 -0
- package/kit/.claude/skills/cloud-render.md +70 -0
- package/kit/.claude/skills/cloud-serverless.md +68 -0
- package/kit/.claude/skills/cloud-vercel.md +76 -0
- package/kit/.claude/skills/component-patterns.md +50 -0
- package/kit/.claude/skills/content-management.md +197 -0
- package/kit/.claude/skills/cors-security.md +50 -0
- package/kit/.claude/skills/data-csv-excel.md +210 -0
- package/kit/.claude/skills/database-optimization.md +196 -0
- package/kit/.claude/skills/databases-transactions.md +68 -0
- package/kit/.claude/skills/db-cassandra.md +89 -0
- package/kit/.claude/skills/db-drizzle.md +363 -0
- package/kit/.claude/skills/db-dynamodb.md +83 -0
- package/kit/.claude/skills/db-elasticsearch.md +105 -0
- package/kit/.claude/skills/db-firebase-firestore.md +191 -0
- package/kit/.claude/skills/db-mongodb.md +198 -0
- package/kit/.claude/skills/db-mysql.md +50 -0
- package/kit/.claude/skills/db-neon.md +72 -0
- package/kit/.claude/skills/db-planetscale.md +76 -0
- package/kit/.claude/skills/db-postgresql.md +50 -0
- package/kit/.claude/skills/db-prisma.md +414 -0
- package/kit/.claude/skills/db-redis.md +50 -0
- package/kit/.claude/skills/db-sqlite.md +149 -0
- package/kit/.claude/skills/db-supabase.md +445 -0
- package/kit/.claude/skills/devops-ci-cd.md +271 -0
- package/kit/.claude/skills/devops-database-backup.md +77 -0
- package/kit/.claude/skills/devops-docker.md +93 -0
- package/kit/.claude/skills/devops-github-actions.md +82 -0
- package/kit/.claude/skills/devops-health-checks.md +50 -0
- package/kit/.claude/skills/devops-kubernetes.md +109 -0
- package/kit/.claude/skills/devops-logging.md +163 -0
- package/kit/.claude/skills/devops-monitoring.md +203 -0
- package/kit/.claude/skills/devops-pulumi.md +94 -0
- package/kit/.claude/skills/devops-secrets.md +166 -0
- package/kit/.claude/skills/devops-terraform.md +226 -0
- package/kit/.claude/skills/error-boundaries.md +84 -0
- package/kit/.claude/skills/file-storage.md +50 -0
- package/kit/.claude/skills/frontend-angular.md +104 -0
- package/kit/.claude/skills/frontend-astro.md +94 -0
- package/kit/.claude/skills/frontend-bundle-analysis.md +147 -0
- package/kit/.claude/skills/frontend-forms.md +134 -0
- package/kit/.claude/skills/frontend-htmx.md +86 -0
- package/kit/.claude/skills/frontend-nextjs.md +188 -0
- package/kit/.claude/skills/frontend-pwa.md +105 -0
- package/kit/.claude/skills/frontend-react-hooks.md +238 -0
- package/kit/.claude/skills/frontend-react.md +129 -0
- package/kit/.claude/skills/frontend-remix-advanced.md +106 -0
- package/kit/.claude/skills/frontend-remix.md +101 -0
- package/kit/.claude/skills/frontend-solid.md +99 -0
- package/kit/.claude/skills/frontend-state-management.md +134 -0
- package/kit/.claude/skills/frontend-state.md +106 -0
- package/kit/.claude/skills/frontend-svelte.md +121 -0
- package/kit/.claude/skills/frontend-testing.md +100 -0
- package/kit/.claude/skills/frontend-vite.md +94 -0
- package/kit/.claude/skills/frontend-vue.md +133 -0
- package/kit/.claude/skills/frontend-webpack.md +93 -0
- package/kit/.claude/skills/functional-programming.md +50 -0
- package/kit/.claude/skills/hooks-custom.md +50 -0
- package/kit/.claude/skills/http-server.md +50 -0
- package/kit/.claude/skills/i18n-general.md +89 -0
- package/kit/.claude/skills/i18n-localization.md +191 -0
- package/kit/.claude/skills/i18n-nextjs.md +127 -0
- package/kit/.claude/skills/infrastructure-docker-compose.md +77 -0
- package/kit/.claude/skills/infrastructure-serverless.md +177 -0
- package/kit/.claude/skills/jwt-tokens.md +50 -0
- package/kit/.claude/skills/logging-winston.md +106 -0
- package/kit/.claude/skills/messaging-kafka.md +102 -0
- package/kit/.claude/skills/messaging-rabbitmq.md +50 -0
- package/kit/.claude/skills/mobile-capacitor.md +109 -0
- package/kit/.claude/skills/mobile-expo.md +101 -0
- package/kit/.claude/skills/mobile-flutter.md +259 -0
- package/kit/.claude/skills/mobile-react-native.md +238 -0
- package/kit/.claude/skills/monitoring-apm.md +50 -0
- package/kit/.claude/skills/monitoring-error-tracking.md +217 -0
- package/kit/.claude/skills/nodejs-streams.md +168 -0
- package/kit/.claude/skills/oauth-integration.md +50 -0
- package/kit/.claude/skills/patterns-dependency-injection.md +218 -0
- package/kit/.claude/skills/patterns-factory-singleton.md +209 -0
- package/kit/.claude/skills/patterns-observer-pubsub.md +210 -0
- package/kit/.claude/skills/payment-lemonsqueezy.md +101 -0
- package/kit/.claude/skills/payment-square.md +178 -0
- package/kit/.claude/skills/payment-stripe.md +206 -0
- package/kit/.claude/skills/perf-bundle.md +100 -0
- package/kit/.claude/skills/perf-web-vitals.md +102 -0
- package/kit/.claude/skills/performance-database-connection-pooling.md +67 -0
- package/kit/.claude/skills/performance-metrics.md +73 -0
- package/kit/.claude/skills/performance-optimization.md +208 -0
- package/kit/.claude/skills/performance-web-vitals.md +169 -0
- package/kit/.claude/skills/rate-limiting.md +77 -0
- package/kit/.claude/skills/reactive-programming.md +50 -0
- package/kit/.claude/skills/realtime-database.md +50 -0
- package/kit/.claude/skills/realtime-subscriptions.md +218 -0
- package/kit/.claude/skills/saas-ab-testing.md +90 -0
- package/kit/.claude/skills/saas-analytics.md +113 -0
- package/kit/.claude/skills/saas-billing.md +106 -0
- package/kit/.claude/skills/saas-email.md +88 -0
- package/kit/.claude/skills/saas-feature-flags.md +83 -0
- package/kit/.claude/skills/saas-onboarding.md +96 -0
- package/kit/.claude/skills/saas-user-onboarding.md +207 -0
- package/kit/.claude/skills/security-encryption.md +216 -0
- package/kit/.claude/skills/security-owasp.md +212 -0
- package/kit/.claude/skills/security-secrets-rotation.md +64 -0
- package/kit/.claude/skills/seo-content.md +94 -0
- package/kit/.claude/skills/seo-technical.md +101 -0
- package/kit/.claude/skills/serverless-framework.md +151 -0
- package/kit/.claude/skills/sharding-scaling.md +50 -0
- package/kit/.claude/skills/styling-css-modules.md +219 -0
- package/kit/.claude/skills/styling-styled-components.md +206 -0
- package/kit/.claude/skills/styling-tailwind.md +206 -0
- package/kit/.claude/skills/test-e2e.md +86 -0
- package/kit/.claude/skills/test-integration.md +216 -0
- package/kit/.claude/skills/test-performance.md +162 -0
- package/kit/.claude/skills/test-tdd.md +170 -0
- package/kit/.claude/skills/test-unit.md +301 -0
- package/kit/.claude/skills/testing-accessibility.md +117 -0
- package/kit/.claude/skills/testing-contract.md +75 -0
- package/kit/.claude/skills/testing-e2e-advanced.md +50 -0
- package/kit/.claude/skills/testing-load-stress.md +79 -0
- package/kit/.claude/skills/testing-mutation.md +92 -0
- package/kit/.claude/skills/testing-snapshot.md +50 -0
- package/kit/.claude/skills/testing-vitest.md +172 -0
- package/kit/.claude/skills/tooling-biome.md +91 -0
- package/kit/.claude/skills/tooling-build-tools.md +166 -0
- package/kit/.claude/skills/tooling-bun.md +94 -0
- package/kit/.claude/skills/tooling-eslint.md +103 -0
- package/kit/.claude/skills/tooling-git.md +79 -0
- package/kit/.claude/skills/tooling-monorepo.md +162 -0
- package/kit/.claude/skills/tooling-testing-frameworks.md +207 -0
- package/kit/.claude/skills/tooling-typescript.md +156 -0
- package/kit/.claude/skills/ui-a11y.md +106 -0
- package/kit/.claude/skills/ui-framer.md +106 -0
- package/kit/.claude/skills/ui-gsap.md +102 -0
- package/kit/.claude/skills/ui-radix.md +82 -0
- package/kit/.claude/skills/ui-shadcn.md +463 -0
- package/kit/.claude/skills/ui-tailwind.md +98 -0
- package/kit/.claude/skills/ui-threejs.md +110 -0
- package/kit/.claude/skills/ui-tokens.md +97 -0
- package/kit/.claude/skills/utilities-date-time.md +170 -0
- package/kit/.claude/skills/validation-schemas.md +110 -0
- package/kit/.claude/skills/version-control-git.md +144 -0
- package/kit/.claude/skills/web-accessibility-wcag.md +102 -0
- package/kit/.claude/skills/web-astro.md +197 -0
- package/kit/.claude/skills/web-html-css.md +224 -0
- package/kit/.claude/skills/web-htmx.md +99 -0
- package/kit/.claude/skills/web-nextjs-advanced.md +202 -0
- package/kit/.claude/skills/web-remix.md +194 -0
- package/kit/.claude/skills/web-seo.md +99 -0
- package/kit/.claude/skills/web-svelte.md +234 -0
- package/kit/.claude/skills/websocket-server.md +50 -0
- package/kit/.claude/skills/writing-marketing.md +89 -0
- package/kit/.claude/skills/writing-technical.md +119 -0
- package/kit/CLAUDE.md +206 -0
- package/kit/README.md +150 -0
- package/kit/SKILLS_INDEX.md +188 -0
- package/kit/docs/README.md +3 -0
- package/kit/journals/README.md +3 -0
- package/kit/plans/README.md +3 -0
- package/package.json +3 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Firebase & Firestore
|
|
2
|
+
|
|
3
|
+
Google's real-time database for rapid development.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install firebase firebase-admin
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Client SDK
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { initializeApp } from 'firebase/app';
|
|
15
|
+
import { getFirestore, collection, doc, getDoc, getDocs, setDoc, updateDoc, deleteDoc, query, where, orderBy } from 'firebase/firestore';
|
|
16
|
+
|
|
17
|
+
const firebaseConfig = {
|
|
18
|
+
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
|
|
19
|
+
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
|
|
20
|
+
// ...
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const app = initializeApp(firebaseConfig);
|
|
24
|
+
const db = getFirestore(app);
|
|
25
|
+
|
|
26
|
+
// Create/Set
|
|
27
|
+
await setDoc(doc(db, 'users', 'user123'), {
|
|
28
|
+
email: 'user@example.com',
|
|
29
|
+
name: 'John Doe',
|
|
30
|
+
createdAt: new Date()
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Read single
|
|
34
|
+
const userDoc = await getDoc(doc(db, 'users', 'user123'));
|
|
35
|
+
if (userDoc.exists()) {
|
|
36
|
+
console.log(userDoc.data());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Read multiple
|
|
40
|
+
const userQuery = query(
|
|
41
|
+
collection(db, 'users'),
|
|
42
|
+
where('status', '==', 'active'),
|
|
43
|
+
orderBy('createdAt', 'desc')
|
|
44
|
+
);
|
|
45
|
+
const querySnapshot = await getDocs(userQuery);
|
|
46
|
+
|
|
47
|
+
querySnapshot.forEach(doc => {
|
|
48
|
+
console.log(doc.id, doc.data());
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Update
|
|
52
|
+
await updateDoc(doc(db, 'users', 'user123'), {
|
|
53
|
+
name: 'Jane Doe'
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Delete
|
|
57
|
+
await deleteDoc(doc(db, 'users', 'user123'));
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Real-time Listeners
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { onSnapshot } from 'firebase/firestore';
|
|
64
|
+
|
|
65
|
+
// Listen to single document
|
|
66
|
+
const unsubscribe = onSnapshot(
|
|
67
|
+
doc(db, 'users', 'user123'),
|
|
68
|
+
(doc) => {
|
|
69
|
+
console.log('Current data:', doc.data());
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// Listen to collection
|
|
74
|
+
onSnapshot(
|
|
75
|
+
query(
|
|
76
|
+
collection(db, 'messages'),
|
|
77
|
+
where('conversationId', '==', 'conv123'),
|
|
78
|
+
orderBy('createdAt')
|
|
79
|
+
),
|
|
80
|
+
(snapshot) => {
|
|
81
|
+
snapshot.forEach(doc => {
|
|
82
|
+
console.log(doc.data());
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Stop listening
|
|
88
|
+
unsubscribe();
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Transactions
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { runTransaction } from 'firebase/firestore';
|
|
95
|
+
|
|
96
|
+
await runTransaction(db, async (transaction) => {
|
|
97
|
+
const userDoc = await transaction.get(doc(db, 'users', 'user1'));
|
|
98
|
+
const balance = userDoc.data().balance;
|
|
99
|
+
|
|
100
|
+
transaction.update(doc(db, 'users', 'user1'), {
|
|
101
|
+
balance: balance - 100
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
transaction.update(doc(db, 'users', 'user2'), {
|
|
105
|
+
balance: (await transaction.get(doc(db, 'users', 'user2'))).data().balance + 100
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Firebase Authentication
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { getAuth, createUserWithEmailAndPassword, signInWithEmailAndPassword, signOut } from 'firebase/auth';
|
|
114
|
+
|
|
115
|
+
const auth = getAuth();
|
|
116
|
+
|
|
117
|
+
// Sign up
|
|
118
|
+
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
|
|
119
|
+
const user = userCredential.user;
|
|
120
|
+
|
|
121
|
+
// Sign in
|
|
122
|
+
await signInWithEmailAndPassword(auth, email, password);
|
|
123
|
+
|
|
124
|
+
// Sign out
|
|
125
|
+
await signOut(auth);
|
|
126
|
+
|
|
127
|
+
// Listen to auth state
|
|
128
|
+
onAuthStateChanged(auth, (user) => {
|
|
129
|
+
if (user) {
|
|
130
|
+
console.log('User logged in:', user.uid);
|
|
131
|
+
} else {
|
|
132
|
+
console.log('User logged out');
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Admin SDK (Server-side)
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import * as admin from 'firebase-admin';
|
|
141
|
+
|
|
142
|
+
admin.initializeApp({
|
|
143
|
+
credential: admin.credential.cert(serviceAccount),
|
|
144
|
+
databaseURL: process.env.FIREBASE_DATABASE_URL
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const db = admin.firestore();
|
|
148
|
+
|
|
149
|
+
// Server-side operations
|
|
150
|
+
await db.collection('users').doc('user123').set({
|
|
151
|
+
email: 'user@example.com',
|
|
152
|
+
admin: true
|
|
153
|
+
}, { merge: true });
|
|
154
|
+
|
|
155
|
+
// Batch operations
|
|
156
|
+
const batch = db.batch();
|
|
157
|
+
batch.set(db.collection('users').doc('user1'), { status: 'active' });
|
|
158
|
+
batch.set(db.collection('users').doc('user2'), { status: 'active' });
|
|
159
|
+
await batch.commit();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Security Rules
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
rules_version = '2';
|
|
166
|
+
service cloud.firestore {
|
|
167
|
+
match /databases/{database}/documents {
|
|
168
|
+
match /users/{userId} {
|
|
169
|
+
allow read, write: if request.auth.uid == userId;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
match /public/{document=**} {
|
|
173
|
+
allow read: if true;
|
|
174
|
+
allow write: if false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Best Practices
|
|
181
|
+
|
|
182
|
+
✅ **Security rules** - Enforce access control
|
|
183
|
+
✅ **Indexes** - Create for complex queries
|
|
184
|
+
✅ **Denormalization** - Store related data together
|
|
185
|
+
✅ **Real-time listeners** - Efficient subscriptions
|
|
186
|
+
✅ **Pagination** - Use startAfter for large datasets
|
|
187
|
+
|
|
188
|
+
## Resources
|
|
189
|
+
|
|
190
|
+
- [Firestore Documentation](https://firebase.google.com/docs/firestore)
|
|
191
|
+
- [Firebase CLI](https://firebase.google.com/docs/cli)
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# MongoDB
|
|
2
|
+
|
|
3
|
+
NoSQL document database for flexible schema design.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install mongodb
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Connection
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { MongoClient } from 'mongodb';
|
|
15
|
+
|
|
16
|
+
const client = new MongoClient(process.env.MONGODB_URI);
|
|
17
|
+
|
|
18
|
+
async function main() {
|
|
19
|
+
try {
|
|
20
|
+
await client.connect();
|
|
21
|
+
const db = client.db('myapp');
|
|
22
|
+
const collection = db.collection('users');
|
|
23
|
+
|
|
24
|
+
// Perform operations
|
|
25
|
+
} finally {
|
|
26
|
+
await client.close();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
main();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## CRUD Operations
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
const collection = db.collection('users');
|
|
37
|
+
|
|
38
|
+
// Create
|
|
39
|
+
await collection.insertOne({
|
|
40
|
+
email: 'user@example.com',
|
|
41
|
+
name: 'John Doe',
|
|
42
|
+
createdAt: new Date()
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Insert multiple
|
|
46
|
+
await collection.insertMany([
|
|
47
|
+
{ email: 'user1@example.com', name: 'User 1' },
|
|
48
|
+
{ email: 'user2@example.com', name: 'User 2' }
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
// Read
|
|
52
|
+
const user = await collection.findOne({ email: 'user@example.com' });
|
|
53
|
+
|
|
54
|
+
// Read multiple
|
|
55
|
+
const users = await collection.find({ role: 'admin' }).toArray();
|
|
56
|
+
|
|
57
|
+
// Update
|
|
58
|
+
await collection.updateOne(
|
|
59
|
+
{ _id: userId },
|
|
60
|
+
{ $set: { name: 'Jane Doe' } }
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
// Update multiple
|
|
64
|
+
await collection.updateMany(
|
|
65
|
+
{ role: 'user' },
|
|
66
|
+
{ $set: { status: 'active' } }
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// Delete
|
|
70
|
+
await collection.deleteOne({ _id: userId });
|
|
71
|
+
|
|
72
|
+
// Delete multiple
|
|
73
|
+
await collection.deleteMany({ status: 'inactive' });
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Queries
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Filter
|
|
80
|
+
const activeUsers = await collection
|
|
81
|
+
.find({ status: 'active' })
|
|
82
|
+
.toArray();
|
|
83
|
+
|
|
84
|
+
// Comparison operators
|
|
85
|
+
const adults = await collection
|
|
86
|
+
.find({ age: { $gte: 18 } })
|
|
87
|
+
.toArray();
|
|
88
|
+
|
|
89
|
+
// Logical operators
|
|
90
|
+
const users = await collection
|
|
91
|
+
.find({
|
|
92
|
+
$or: [
|
|
93
|
+
{ role: 'admin' },
|
|
94
|
+
{ verified: true }
|
|
95
|
+
]
|
|
96
|
+
})
|
|
97
|
+
.toArray();
|
|
98
|
+
|
|
99
|
+
// Text search
|
|
100
|
+
await collection.createIndex({ name: 'text' });
|
|
101
|
+
const results = await collection
|
|
102
|
+
.find({ $text: { $search: 'john' } })
|
|
103
|
+
.toArray();
|
|
104
|
+
|
|
105
|
+
// Aggregation
|
|
106
|
+
const pipeline = [
|
|
107
|
+
{ $match: { status: 'active' } },
|
|
108
|
+
{ $group: { _id: '$role', count: { $sum: 1 } } },
|
|
109
|
+
{ $sort: { count: -1 } }
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
const results = await collection.aggregate(pipeline).toArray();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Transactions
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
const session = client.startSession();
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
await session.withTransaction(async () => {
|
|
122
|
+
const usersCollection = db.collection('users');
|
|
123
|
+
const transactionsCollection = db.collection('transactions');
|
|
124
|
+
|
|
125
|
+
// Both operations succeed or both fail
|
|
126
|
+
await usersCollection.updateOne(
|
|
127
|
+
{ _id: user1Id },
|
|
128
|
+
{ $inc: { balance: -100 } },
|
|
129
|
+
{ session }
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
await usersCollection.updateOne(
|
|
133
|
+
{ _id: user2Id },
|
|
134
|
+
{ $inc: { balance: 100 } },
|
|
135
|
+
{ session }
|
|
136
|
+
);
|
|
137
|
+
});
|
|
138
|
+
} finally {
|
|
139
|
+
await session.endSession();
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Indexes
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// Single field index
|
|
147
|
+
await collection.createIndex({ email: 1 });
|
|
148
|
+
|
|
149
|
+
// Composite index
|
|
150
|
+
await collection.createIndex({ role: 1, createdAt: -1 });
|
|
151
|
+
|
|
152
|
+
// Text index
|
|
153
|
+
await collection.createIndex({ name: 'text', description: 'text' });
|
|
154
|
+
|
|
155
|
+
// Unique index
|
|
156
|
+
await collection.createIndex({ email: 1 }, { unique: true });
|
|
157
|
+
|
|
158
|
+
// List indexes
|
|
159
|
+
const indexes = await collection.listIndexes().toArray();
|
|
160
|
+
|
|
161
|
+
// Drop index
|
|
162
|
+
await collection.dropIndex('email_1');
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Validation
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// Schema validation
|
|
169
|
+
db.createCollection('users', {
|
|
170
|
+
validator: {
|
|
171
|
+
$jsonSchema: {
|
|
172
|
+
bsonType: 'object',
|
|
173
|
+
required: ['email', 'name'],
|
|
174
|
+
properties: {
|
|
175
|
+
email: {
|
|
176
|
+
bsonType: 'string',
|
|
177
|
+
pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$'
|
|
178
|
+
},
|
|
179
|
+
name: { bsonType: 'string' },
|
|
180
|
+
age: { bsonType: 'int', minimum: 0 }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Best Practices
|
|
188
|
+
|
|
189
|
+
✅ **Use ObjectId** - MongoDB's built-in unique ID
|
|
190
|
+
✅ **Index frequently queried fields** - Improve query performance
|
|
191
|
+
✅ **Validate schema** - Enforce data structure
|
|
192
|
+
✅ **Use transactions** - Multi-document consistency
|
|
193
|
+
✅ **Pagination** - Use skip/limit for large results
|
|
194
|
+
|
|
195
|
+
## Resources
|
|
196
|
+
|
|
197
|
+
- [MongoDB Documentation](https://docs.mongodb.com/)
|
|
198
|
+
- [Node.js Driver](https://docs.mongodb.com/drivers/node/)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Production-Ready Skill Implementation
|
|
2
|
+
|
|
3
|
+
## Setup & Installation
|
|
4
|
+
|
|
5
|
+
Detailed installation and configuration steps for the technology.
|
|
6
|
+
|
|
7
|
+
## Core Concepts
|
|
8
|
+
|
|
9
|
+
Fundamental patterns and approaches.
|
|
10
|
+
|
|
11
|
+
## Implementation Examples
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// Real production code examples
|
|
15
|
+
// with error handling and best practices
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Advanced Patterns
|
|
19
|
+
|
|
20
|
+
Complex scenarios and optimization techniques.
|
|
21
|
+
|
|
22
|
+
## Performance Optimization
|
|
23
|
+
|
|
24
|
+
Tips for maximizing efficiency and speed.
|
|
25
|
+
|
|
26
|
+
## Security Considerations
|
|
27
|
+
|
|
28
|
+
Security best practices specific to this technology.
|
|
29
|
+
|
|
30
|
+
## Testing
|
|
31
|
+
|
|
32
|
+
How to properly test this feature.
|
|
33
|
+
|
|
34
|
+
## Monitoring & Debugging
|
|
35
|
+
|
|
36
|
+
Tools and techniques for production support.
|
|
37
|
+
|
|
38
|
+
## Best Practices
|
|
39
|
+
|
|
40
|
+
✅ Key recommendations
|
|
41
|
+
✅ Common pitfalls to avoid
|
|
42
|
+
✅ Performance considerations
|
|
43
|
+
✅ Security measures
|
|
44
|
+
✅ Production readiness
|
|
45
|
+
|
|
46
|
+
## Resources
|
|
47
|
+
|
|
48
|
+
- Official documentation
|
|
49
|
+
- Community guides
|
|
50
|
+
- Performance benchmarks
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Neon Serverless Postgres
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Neon is serverless PostgreSQL with branching, autoscaling to zero, and a generous free tier.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @neondatabase/serverless
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```env
|
|
13
|
+
DATABASE_URL=postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/neondb?sslmode=require
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Direct SQL
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { neon } from '@neondatabase/serverless';
|
|
20
|
+
const sql = neon(process.env.DATABASE_URL!);
|
|
21
|
+
|
|
22
|
+
const users = await sql`SELECT * FROM users WHERE active = true LIMIT 20`;
|
|
23
|
+
const user = await sql`SELECT * FROM users WHERE id = ${userId}`;
|
|
24
|
+
const [newUser] = await sql`INSERT INTO users (email, name) VALUES (${email}, ${name}) RETURNING *`;
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## With Prisma
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install prisma @prisma/client @prisma/adapter-neon
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { PrismaClient } from '@prisma/client';
|
|
35
|
+
import { Pool, neonConfig } from '@neondatabase/serverless';
|
|
36
|
+
import { PrismaNeon } from '@prisma/adapter-neon';
|
|
37
|
+
import ws from 'ws';
|
|
38
|
+
|
|
39
|
+
neonConfig.webSocketConstructor = ws;
|
|
40
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
41
|
+
const adapter = new PrismaNeon(pool);
|
|
42
|
+
export const prisma = new PrismaClient({ adapter });
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```env
|
|
46
|
+
# Use pooled for app, direct for migrations
|
|
47
|
+
DATABASE_URL=...?pgbouncer=true
|
|
48
|
+
DIRECT_URL=... # without pgbouncer
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Database Branching for PRs
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Create branch for PR preview
|
|
55
|
+
neon branches create --name preview/pr-123 --parent main
|
|
56
|
+
|
|
57
|
+
# Get connection string
|
|
58
|
+
neon connection-string preview/pr-123
|
|
59
|
+
|
|
60
|
+
# Delete branch after PR merge
|
|
61
|
+
neon branches delete preview/pr-123
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Best Practices
|
|
65
|
+
- Always use pooled connection URL for serverless functions
|
|
66
|
+
- Use `DIRECT_URL` for Prisma migrations
|
|
67
|
+
- Enable autoscale-to-zero on dev/staging to save costs
|
|
68
|
+
- Use branching in CI for isolated integration tests
|
|
69
|
+
|
|
70
|
+
## Resources
|
|
71
|
+
- [Neon docs](https://neon.tech/docs)
|
|
72
|
+
- [Neon + Prisma](https://neon.tech/docs/guides/prisma)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# PlanetScale
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
PlanetScale is a MySQL-compatible serverless database with Git-like branching and horizontal scaling via Vitess.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @planetscale/database
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```env
|
|
13
|
+
DATABASE_URL=mysql://user:pass@aws.connect.psdb.cloud/mydb?ssl={"rejectUnauthorized":true}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Direct SQL
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { connect } from '@planetscale/database';
|
|
20
|
+
const conn = connect({ url: process.env.DATABASE_URL });
|
|
21
|
+
|
|
22
|
+
const { rows } = await conn.execute('SELECT * FROM users WHERE email = ?', [email]);
|
|
23
|
+
const result = await conn.execute('INSERT INTO users (id, email, name) VALUES (?, ?, ?)', [id, email, name]);
|
|
24
|
+
console.log(result.insertId);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## With Prisma
|
|
28
|
+
|
|
29
|
+
```prisma
|
|
30
|
+
datasource db {
|
|
31
|
+
provider = "mysql"
|
|
32
|
+
url = env("DATABASE_URL")
|
|
33
|
+
relationMode = "prisma" // PlanetScale disables FK constraints
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx prisma db push # Use db push instead of migrate for PlanetScale
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## With Drizzle
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { drizzle } from 'drizzle-orm/planetscale-serverless';
|
|
45
|
+
import { connect } from '@planetscale/database';
|
|
46
|
+
|
|
47
|
+
const connection = connect({ url: process.env.DATABASE_URL });
|
|
48
|
+
const db = drizzle(connection);
|
|
49
|
+
|
|
50
|
+
const results = await db.select().from(users).where(eq(users.email, email));
|
|
51
|
+
await db.insert(users).values({ id: crypto.randomUUID(), email, name });
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Branch Workflow
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Create dev branch
|
|
58
|
+
pscale branch create mydb dev
|
|
59
|
+
|
|
60
|
+
# Connect to dev branch locally
|
|
61
|
+
pscale connect mydb dev --port 3309
|
|
62
|
+
|
|
63
|
+
# Create deploy request (schema PR)
|
|
64
|
+
pscale deploy-request create mydb dev
|
|
65
|
+
|
|
66
|
+
# Merge (runs online DDL, no downtime)
|
|
67
|
+
pscale deploy-request deploy mydb 1
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Best Practices
|
|
71
|
+
- Use `relationMode = "prisma"` since PlanetScale disables FK constraints
|
|
72
|
+
- Never modify main branch directly — always use branches + deploy requests
|
|
73
|
+
- Use deploy requests for zero-downtime schema migrations
|
|
74
|
+
|
|
75
|
+
## Resources
|
|
76
|
+
- [PlanetScale quickstart](https://planetscale.com/docs/tutorials/planetscale-quickstart-guide)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Production-Ready Skill Implementation
|
|
2
|
+
|
|
3
|
+
## Setup & Installation
|
|
4
|
+
|
|
5
|
+
Detailed installation and configuration steps for the technology.
|
|
6
|
+
|
|
7
|
+
## Core Concepts
|
|
8
|
+
|
|
9
|
+
Fundamental patterns and approaches.
|
|
10
|
+
|
|
11
|
+
## Implementation Examples
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// Real production code examples
|
|
15
|
+
// with error handling and best practices
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Advanced Patterns
|
|
19
|
+
|
|
20
|
+
Complex scenarios and optimization techniques.
|
|
21
|
+
|
|
22
|
+
## Performance Optimization
|
|
23
|
+
|
|
24
|
+
Tips for maximizing efficiency and speed.
|
|
25
|
+
|
|
26
|
+
## Security Considerations
|
|
27
|
+
|
|
28
|
+
Security best practices specific to this technology.
|
|
29
|
+
|
|
30
|
+
## Testing
|
|
31
|
+
|
|
32
|
+
How to properly test this feature.
|
|
33
|
+
|
|
34
|
+
## Monitoring & Debugging
|
|
35
|
+
|
|
36
|
+
Tools and techniques for production support.
|
|
37
|
+
|
|
38
|
+
## Best Practices
|
|
39
|
+
|
|
40
|
+
✅ Key recommendations
|
|
41
|
+
✅ Common pitfalls to avoid
|
|
42
|
+
✅ Performance considerations
|
|
43
|
+
✅ Security measures
|
|
44
|
+
✅ Production readiness
|
|
45
|
+
|
|
46
|
+
## Resources
|
|
47
|
+
|
|
48
|
+
- Official documentation
|
|
49
|
+
- Community guides
|
|
50
|
+
- Performance benchmarks
|