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
|
+
# Internationalization (i18n)
|
|
2
|
+
|
|
3
|
+
Multi-language and locale support for applications.
|
|
4
|
+
|
|
5
|
+
## Setup (Next.js)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install next-intl
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// i18n.config.ts
|
|
15
|
+
import { getRequestConfig } from 'next-intl/server';
|
|
16
|
+
|
|
17
|
+
export default getRequestConfig(async ({ locale }) => ({
|
|
18
|
+
messages: (await import(`./messages/${locale}.json`)).default
|
|
19
|
+
}));
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
// messages/en.json
|
|
24
|
+
{
|
|
25
|
+
"header": {
|
|
26
|
+
"welcome": "Welcome",
|
|
27
|
+
"login": "Login",
|
|
28
|
+
"logout": "Logout"
|
|
29
|
+
},
|
|
30
|
+
"common": {
|
|
31
|
+
"home": "Home",
|
|
32
|
+
"about": "About",
|
|
33
|
+
"contact": "Contact"
|
|
34
|
+
},
|
|
35
|
+
"errors": {
|
|
36
|
+
"notFound": "Not found"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## React Components
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { useTranslations } from 'next-intl';
|
|
45
|
+
import { useLocale } from 'next-intl';
|
|
46
|
+
|
|
47
|
+
export function Header() {
|
|
48
|
+
const t = useTranslations('header');
|
|
49
|
+
const locale = useLocale();
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<header>
|
|
53
|
+
<h1>{t('welcome')}</h1>
|
|
54
|
+
<div>Current language: {locale}</div>
|
|
55
|
+
<Link href="/en/home">{t('home')}</Link>
|
|
56
|
+
<Link href="/es/home">Inicio</Link>
|
|
57
|
+
</header>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function ProductCard({ product }: { product: any }) {
|
|
62
|
+
const t = useTranslations('products');
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<div>
|
|
66
|
+
<h2>{t('title', { name: product.name })}</h2>
|
|
67
|
+
<p>{t('price', { price: product.price })}</p>
|
|
68
|
+
</div>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Dynamic Messages with Parameters
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"products": {
|
|
78
|
+
"title": "{name} Product",
|
|
79
|
+
"price": "Price: ${price}",
|
|
80
|
+
"rating": "{count, plural, =0 {No ratings} one {1 rating} other {# ratings}}"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Date & Number Formatting
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { useFormatter } from 'next-intl';
|
|
89
|
+
|
|
90
|
+
export function PriceDisplay({ amount }: { amount: number }) {
|
|
91
|
+
const format = useFormatter();
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<div>
|
|
95
|
+
Price: {format.number(amount, {
|
|
96
|
+
style: 'currency',
|
|
97
|
+
currency: 'USD'
|
|
98
|
+
})}
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function DateDisplay({ date }: { date: Date }) {
|
|
104
|
+
const format = useFormatter();
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<time>
|
|
108
|
+
{format.dateTime(date, {
|
|
109
|
+
year: 'numeric',
|
|
110
|
+
month: 'long',
|
|
111
|
+
day: 'numeric'
|
|
112
|
+
})}
|
|
113
|
+
</time>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## URL Routing
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// middleware.ts
|
|
122
|
+
import createMiddleware from 'next-intl/middleware';
|
|
123
|
+
|
|
124
|
+
export default createMiddleware({
|
|
125
|
+
locales: ['en', 'es', 'fr', 'de'],
|
|
126
|
+
defaultLocale: 'en'
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Config matching paths
|
|
130
|
+
export const config = {
|
|
131
|
+
matcher: ['/((?!api|_next|.*\\..*).*)']
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Server-Side Translations
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { getTranslations } from 'next-intl/server';
|
|
139
|
+
|
|
140
|
+
export async function generateMetadata({ locale }: any) {
|
|
141
|
+
const t = await getTranslations({ locale, namespace: 'metadata' });
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
title: t('title'),
|
|
145
|
+
description: t('description')
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Language Switcher
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
import Link from 'next/link';
|
|
154
|
+
import { usePathname } from 'next/navigation';
|
|
155
|
+
|
|
156
|
+
export function LanguageSwitcher() {
|
|
157
|
+
const pathname = usePathname();
|
|
158
|
+
|
|
159
|
+
const languages = [
|
|
160
|
+
{ code: 'en', name: 'English' },
|
|
161
|
+
{ code: 'es', name: 'Español' },
|
|
162
|
+
{ code: 'fr', name: 'Français' }
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
return (
|
|
166
|
+
<select onChange={(e) => {
|
|
167
|
+
const newPath = pathname.replace(/^\/[a-z]{2}/, `/${e.target.value}`);
|
|
168
|
+
// Navigate
|
|
169
|
+
}}>
|
|
170
|
+
{languages.map(lang => (
|
|
171
|
+
<option key={lang.code} value={lang.code}>
|
|
172
|
+
{lang.name}
|
|
173
|
+
</option>
|
|
174
|
+
))}
|
|
175
|
+
</select>
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Best Practices
|
|
181
|
+
|
|
182
|
+
✅ **Namespace translations** - Organize by feature/page
|
|
183
|
+
✅ **Use placeholders** - For dynamic values
|
|
184
|
+
✅ **RTL support** - Test with right-to-left languages
|
|
185
|
+
✅ **Translation management** - Use Crowdin or similar
|
|
186
|
+
✅ **SEO optimization** - Use hreflang for language variants
|
|
187
|
+
|
|
188
|
+
## Resources
|
|
189
|
+
|
|
190
|
+
- [next-intl Documentation](https://next-intl-docs.vercel.app/)
|
|
191
|
+
- [ICU Message Syntax](https://unicode-org.github.io/icu/userguide/format_parse/messages/)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Next.js i18n
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Add internationalization to Next.js with next-intl for type-safe translations and locale routing.
|
|
5
|
+
|
|
6
|
+
## Setup with next-intl
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install next-intl
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
messages/
|
|
14
|
+
├── en.json
|
|
15
|
+
├── es.json
|
|
16
|
+
└── ja.json
|
|
17
|
+
app/
|
|
18
|
+
├── [locale]/
|
|
19
|
+
│ ├── layout.tsx
|
|
20
|
+
│ └── page.tsx
|
|
21
|
+
└── i18n.ts
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Configuration
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// i18n.ts
|
|
28
|
+
import { getRequestConfig } from 'next-intl/server';
|
|
29
|
+
|
|
30
|
+
export default getRequestConfig(async ({ locale }) => ({
|
|
31
|
+
messages: (await import(`./messages/${locale}.json`)).default
|
|
32
|
+
}));
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// middleware.ts
|
|
37
|
+
import createMiddleware from 'next-intl/middleware';
|
|
38
|
+
|
|
39
|
+
export default createMiddleware({
|
|
40
|
+
locales: ['en', 'es', 'ja'],
|
|
41
|
+
defaultLocale: 'en',
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const config = { matcher: ['/((?!api|_next|.*\..*).*)'] };
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Translation Files
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
// messages/en.json
|
|
51
|
+
{
|
|
52
|
+
"HomePage": {
|
|
53
|
+
"title": "Welcome to {appName}",
|
|
54
|
+
"description": "A Next.js app with i18n"
|
|
55
|
+
},
|
|
56
|
+
"Common": {
|
|
57
|
+
"save": "Save",
|
|
58
|
+
"items": "{count, plural, one {# item} other {# items}}"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Server Component Usage
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
// app/[locale]/page.tsx
|
|
67
|
+
import { useTranslations } from 'next-intl';
|
|
68
|
+
import { setRequestLocale } from 'next-intl/server';
|
|
69
|
+
|
|
70
|
+
export default function HomePage({ params: { locale } }: { params: { locale: string } }) {
|
|
71
|
+
setRequestLocale(locale);
|
|
72
|
+
const t = useTranslations('HomePage');
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<main>
|
|
76
|
+
<h1>{t('title', { appName: 'My App' })}</h1>
|
|
77
|
+
<p>{t('description')}</p>
|
|
78
|
+
</main>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function generateStaticParams() {
|
|
83
|
+
return ['en', 'es', 'ja'].map(locale => ({ locale }));
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Client Component Usage
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
'use client';
|
|
91
|
+
import { useTranslations } from 'next-intl';
|
|
92
|
+
|
|
93
|
+
export function SaveButton() {
|
|
94
|
+
const t = useTranslations('Common');
|
|
95
|
+
return <button>{t('save')}</button>;
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Locale Switcher
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
'use client';
|
|
103
|
+
import { useRouter, usePathname } from 'next/navigation';
|
|
104
|
+
|
|
105
|
+
export function LocaleSwitcher({ locale }: { locale: string }) {
|
|
106
|
+
const router = useRouter();
|
|
107
|
+
const pathname = usePathname();
|
|
108
|
+
const locales = ['en', 'es', 'ja'];
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<select value={locale} onChange={e => {
|
|
112
|
+
const newPath = pathname.replace(`/${locale}`, `/${e.target.value}`);
|
|
113
|
+
router.replace(newPath);
|
|
114
|
+
}}>
|
|
115
|
+
{locales.map(l => <option key={l} value={l}>{l.toUpperCase()}</option>)}
|
|
116
|
+
</select>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Best Practices
|
|
122
|
+
- Use `setRequestLocale` in server components for static rendering
|
|
123
|
+
- Use `generateStaticParams` to pre-render all locale variants
|
|
124
|
+
- Keep translation keys hierarchical: `HomePage.title`, `Common.save`
|
|
125
|
+
|
|
126
|
+
## Resources
|
|
127
|
+
- [next-intl docs](https://next-intl-docs.vercel.app)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Docker Compose
|
|
2
|
+
|
|
3
|
+
Multi-container application orchestration.
|
|
4
|
+
|
|
5
|
+
## Basic Setup
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
version: '3.9'
|
|
9
|
+
|
|
10
|
+
services:
|
|
11
|
+
app:
|
|
12
|
+
build: .
|
|
13
|
+
ports:
|
|
14
|
+
- "3000:3000"
|
|
15
|
+
environment:
|
|
16
|
+
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
|
|
17
|
+
- REDIS_URL=redis://cache:6379
|
|
18
|
+
depends_on:
|
|
19
|
+
- db
|
|
20
|
+
- cache
|
|
21
|
+
volumes:
|
|
22
|
+
- .:/app
|
|
23
|
+
- /app/node_modules
|
|
24
|
+
|
|
25
|
+
db:
|
|
26
|
+
image: postgres:15
|
|
27
|
+
environment:
|
|
28
|
+
- POSTGRES_USER=user
|
|
29
|
+
- POSTGRES_PASSWORD=pass
|
|
30
|
+
- POSTGRES_DB=myapp
|
|
31
|
+
volumes:
|
|
32
|
+
- db_data:/var/lib/postgresql/data
|
|
33
|
+
ports:
|
|
34
|
+
- "5432:5432"
|
|
35
|
+
|
|
36
|
+
cache:
|
|
37
|
+
image: redis:7
|
|
38
|
+
ports:
|
|
39
|
+
- "6379:6379"
|
|
40
|
+
|
|
41
|
+
volumes:
|
|
42
|
+
db_data:
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Commands
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Start services
|
|
49
|
+
docker-compose up
|
|
50
|
+
|
|
51
|
+
# Start in background
|
|
52
|
+
docker-compose up -d
|
|
53
|
+
|
|
54
|
+
# View logs
|
|
55
|
+
docker-compose logs -f
|
|
56
|
+
|
|
57
|
+
# Execute command in container
|
|
58
|
+
docker-compose exec app npm run migrate
|
|
59
|
+
|
|
60
|
+
# Stop services
|
|
61
|
+
docker-compose down
|
|
62
|
+
|
|
63
|
+
# Remove volumes
|
|
64
|
+
docker-compose down -v
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Best Practices
|
|
68
|
+
|
|
69
|
+
✅ **Volume mapping** - Persist data
|
|
70
|
+
✅ **Environment variables** - Configuration
|
|
71
|
+
✅ **Depends_on** - Service ordering
|
|
72
|
+
✅ **Health checks** - Monitor services
|
|
73
|
+
✅ **Networks** - Service communication
|
|
74
|
+
|
|
75
|
+
## Resources
|
|
76
|
+
|
|
77
|
+
- [Docker Compose Documentation](https://docs.docker.com/compose/)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Serverless Computing
|
|
2
|
+
|
|
3
|
+
Building applications without managing servers.
|
|
4
|
+
|
|
5
|
+
## AWS Lambda
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// Handler function
|
|
9
|
+
export const handler = async (event: any) => {
|
|
10
|
+
console.log('Event:', event);
|
|
11
|
+
|
|
12
|
+
try {
|
|
13
|
+
// Process event
|
|
14
|
+
const result = await processData(event.body);
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
statusCode: 200,
|
|
18
|
+
body: JSON.stringify(result)
|
|
19
|
+
};
|
|
20
|
+
} catch (error) {
|
|
21
|
+
console.error('Error:', error);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
statusCode: 500,
|
|
25
|
+
body: JSON.stringify({ error: 'Internal error' })
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// With dependencies
|
|
31
|
+
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
|
|
32
|
+
|
|
33
|
+
const s3 = new S3Client();
|
|
34
|
+
|
|
35
|
+
export const s3Handler = async (event: S3Event) => {
|
|
36
|
+
for (const record of event.Records) {
|
|
37
|
+
const bucket = record.s3.bucket.name;
|
|
38
|
+
const key = record.s3.object.key;
|
|
39
|
+
|
|
40
|
+
const command = new GetObjectCommand({ Bucket: bucket, Key: key });
|
|
41
|
+
const response = await s3.send(command);
|
|
42
|
+
|
|
43
|
+
// Process object
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Google Cloud Functions
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import functions from '@google-cloud/functions-framework';
|
|
52
|
+
|
|
53
|
+
functions.http('helloWorld', (req, res) => {
|
|
54
|
+
const name = req.query.name || 'World';
|
|
55
|
+
res.send(`Hello ${name}!`);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Async function
|
|
59
|
+
functions.http('asyncFunction', async (req, res) => {
|
|
60
|
+
const data = await fetchData();
|
|
61
|
+
res.json(data);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Pub/Sub trigger
|
|
65
|
+
functions.cloud.pubsub('processPubSub', (message) => {
|
|
66
|
+
const data = Buffer.from(message.data, 'base64').toString();
|
|
67
|
+
console.log('Received:', data);
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Azure Functions
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { AzureFunction, Context, HttpRequest } from '@azure/functions';
|
|
75
|
+
|
|
76
|
+
const httpTrigger: AzureFunction = async (
|
|
77
|
+
context: Context,
|
|
78
|
+
req: HttpRequest
|
|
79
|
+
): Promise<void> => {
|
|
80
|
+
context.log('HTTP trigger function processed a request.');
|
|
81
|
+
|
|
82
|
+
const name = req.query.name || req.body?.name || 'World';
|
|
83
|
+
|
|
84
|
+
context.res = {
|
|
85
|
+
status: 200,
|
|
86
|
+
body: `Hello, ${name}!`
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export default httpTrigger;
|
|
91
|
+
|
|
92
|
+
// Timer trigger
|
|
93
|
+
const timerTrigger: AzureFunction = async (context: Context) => {
|
|
94
|
+
const timeStamp = new Date().toISOString();
|
|
95
|
+
context.log('Timer trigger function ran!', timeStamp);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export default timerTrigger;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Deployment
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# AWS SAM
|
|
105
|
+
sam init
|
|
106
|
+
sam build
|
|
107
|
+
sam deploy
|
|
108
|
+
|
|
109
|
+
# Google Cloud
|
|
110
|
+
gcloud functions deploy myFunction \
|
|
111
|
+
--runtime nodejs20 \
|
|
112
|
+
--trigger-http
|
|
113
|
+
|
|
114
|
+
# Azure Functions
|
|
115
|
+
func new
|
|
116
|
+
func start
|
|
117
|
+
func azure functionapp publish <FunctionAppName>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Local Development
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# AWS SAM local
|
|
124
|
+
sam local start-api
|
|
125
|
+
|
|
126
|
+
# Google Cloud Functions Framework
|
|
127
|
+
functions-framework --target=myFunction --debug
|
|
128
|
+
|
|
129
|
+
# Azure Functions Core Tools
|
|
130
|
+
func start
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Monitoring & Logging
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
// CloudWatch logging
|
|
137
|
+
console.log('Info message');
|
|
138
|
+
console.error('Error message');
|
|
139
|
+
|
|
140
|
+
// Structured logging
|
|
141
|
+
console.log(JSON.stringify({
|
|
142
|
+
timestamp: new Date().toISOString(),
|
|
143
|
+
level: 'INFO',
|
|
144
|
+
message: 'Processing event',
|
|
145
|
+
eventId: event.id
|
|
146
|
+
}));
|
|
147
|
+
|
|
148
|
+
// Custom metrics
|
|
149
|
+
import { CloudWatch } from 'aws-sdk';
|
|
150
|
+
|
|
151
|
+
const cw = new CloudWatch();
|
|
152
|
+
|
|
153
|
+
await cw.putMetricData({
|
|
154
|
+
Namespace: 'MyApp',
|
|
155
|
+
MetricData: [
|
|
156
|
+
{
|
|
157
|
+
MetricName: 'ProcessingTime',
|
|
158
|
+
Value: duration,
|
|
159
|
+
Unit: 'Milliseconds'
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}).promise();
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Best Practices
|
|
166
|
+
|
|
167
|
+
✅ **Keep functions small** - Single responsibility
|
|
168
|
+
✅ **Optimize cold starts** - Minimize dependencies
|
|
169
|
+
✅ **Handle errors** - Return proper status codes
|
|
170
|
+
✅ **Set timeouts** - Prevent hanging functions
|
|
171
|
+
✅ **Monitor costs** - Track function executions
|
|
172
|
+
|
|
173
|
+
## Resources
|
|
174
|
+
|
|
175
|
+
- [AWS Lambda Documentation](https://docs.aws.amazon.com/lambda/)
|
|
176
|
+
- [Google Cloud Functions](https://cloud.google.com/functions/docs)
|
|
177
|
+
- [Azure Functions](https://docs.microsoft.com/en-us/azure/azure-functions/)
|
|
@@ -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
|