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,106 @@
|
|
|
1
|
+
# Winston Logger
|
|
2
|
+
|
|
3
|
+
Structured logging for Node.js applications.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install winston winston-daily-rotate-file
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import winston from 'winston';
|
|
15
|
+
import DailyRotateFile from 'winston-daily-rotate-file';
|
|
16
|
+
|
|
17
|
+
const logger = winston.createLogger({
|
|
18
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
19
|
+
format: winston.format.combine(
|
|
20
|
+
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
|
|
21
|
+
winston.format.errors({ stack: true }),
|
|
22
|
+
winston.format.json()
|
|
23
|
+
),
|
|
24
|
+
defaultMeta: { service: 'my-api' },
|
|
25
|
+
transports: [
|
|
26
|
+
new winston.transports.File({
|
|
27
|
+
filename: 'logs/error.log',
|
|
28
|
+
level: 'error'
|
|
29
|
+
}),
|
|
30
|
+
new winston.transports.File({
|
|
31
|
+
filename: 'logs/combined.log'
|
|
32
|
+
}),
|
|
33
|
+
new DailyRotateFile({
|
|
34
|
+
filename: 'logs/application-%DATE%.log',
|
|
35
|
+
datePattern: 'YYYY-MM-DD',
|
|
36
|
+
maxSize: '20m',
|
|
37
|
+
maxDays: '14d'
|
|
38
|
+
})
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Console in development
|
|
43
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
44
|
+
logger.add(new winston.transports.Console({
|
|
45
|
+
format: winston.format.combine(
|
|
46
|
+
winston.format.colorize(),
|
|
47
|
+
winston.format.simple()
|
|
48
|
+
)
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default logger;
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Usage
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
logger.info('User logged in', { userId: '123' });
|
|
59
|
+
logger.warn('Deprecated endpoint used', { endpoint: '/api/v1/users' });
|
|
60
|
+
logger.error('Database connection failed', { error: err.message });
|
|
61
|
+
|
|
62
|
+
// With context
|
|
63
|
+
logger.info('Payment processed', {
|
|
64
|
+
userId: '123',
|
|
65
|
+
orderId: '456',
|
|
66
|
+
amount: 99.99,
|
|
67
|
+
status: 'success'
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Express Integration
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import expressWinston from 'express-winston';
|
|
75
|
+
|
|
76
|
+
app.use(expressWinston.logger({
|
|
77
|
+
transports: [
|
|
78
|
+
new winston.transports.File({ filename: 'logs/requests.log' })
|
|
79
|
+
],
|
|
80
|
+
format: winston.format.combine(
|
|
81
|
+
winston.format.timestamp(),
|
|
82
|
+
winston.format.json()
|
|
83
|
+
),
|
|
84
|
+
meta: true,
|
|
85
|
+
msg: 'HTTP {{req.method}} {{req.url}}',
|
|
86
|
+
expressFormat: true
|
|
87
|
+
}));
|
|
88
|
+
|
|
89
|
+
app.use(expressWinston.errorLogger({
|
|
90
|
+
transports: [
|
|
91
|
+
new winston.transports.File({ filename: 'logs/errors.log' })
|
|
92
|
+
]
|
|
93
|
+
}));
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Best Practices
|
|
97
|
+
|
|
98
|
+
✅ **Structured logging** - JSON format
|
|
99
|
+
✅ **Log levels** - Appropriate severity
|
|
100
|
+
✅ **Context** - Include relevant metadata
|
|
101
|
+
✅ **Rotation** - Archive old logs
|
|
102
|
+
✅ **No PII** - Never log passwords
|
|
103
|
+
|
|
104
|
+
## Resources
|
|
105
|
+
|
|
106
|
+
- [Winston Documentation](https://github.com/winstonjs/winston)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Apache Kafka
|
|
2
|
+
|
|
3
|
+
Distributed event streaming platform.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
docker run -d --name kafka -p 9092:9092 apache/kafka:latest
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Producer
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Kafka } from 'kafkajs';
|
|
15
|
+
|
|
16
|
+
const kafka = new Kafka({
|
|
17
|
+
clientId: 'my-app',
|
|
18
|
+
brokers: ['localhost:9092']
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const producer = kafka.producer();
|
|
22
|
+
|
|
23
|
+
async function sendEvent(topic: string, event: any) {
|
|
24
|
+
await producer.connect();
|
|
25
|
+
|
|
26
|
+
await producer.send({
|
|
27
|
+
topic,
|
|
28
|
+
messages: [
|
|
29
|
+
{
|
|
30
|
+
key: event.id,
|
|
31
|
+
value: JSON.stringify(event),
|
|
32
|
+
timestamp: Date.now().toString()
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await producer.disconnect();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Usage
|
|
41
|
+
await sendEvent('user.created', {
|
|
42
|
+
id: '123',
|
|
43
|
+
email: 'user@example.com',
|
|
44
|
+
timestamp: new Date()
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Consumer
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
const consumer = kafka.consumer({ groupId: 'user-service' });
|
|
52
|
+
|
|
53
|
+
async function subscribeToTopic(topic: string) {
|
|
54
|
+
await consumer.connect();
|
|
55
|
+
await consumer.subscribe({ topic, fromBeginning: true });
|
|
56
|
+
|
|
57
|
+
await consumer.run({
|
|
58
|
+
eachMessage: async ({ topic, partition, message }) => {
|
|
59
|
+
const event = JSON.parse(message.value.toString());
|
|
60
|
+
console.log(`Received event: ${JSON.stringify(event)}`);
|
|
61
|
+
|
|
62
|
+
// Process event
|
|
63
|
+
await handleUserCreated(event);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
await subscribeToTopic('user.created');
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Topics & Partitions
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// Create topic with 3 partitions
|
|
75
|
+
const admin = kafka.admin();
|
|
76
|
+
await admin.createTopics({
|
|
77
|
+
topics: [
|
|
78
|
+
{
|
|
79
|
+
topic: 'user.events',
|
|
80
|
+
numPartitions: 3,
|
|
81
|
+
replicationFactor: 1
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// List topics
|
|
87
|
+
const topics = await admin.listTopics();
|
|
88
|
+
console.log(topics);
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Best Practices
|
|
92
|
+
|
|
93
|
+
✅ **Partitioning** - Distribute by key
|
|
94
|
+
✅ **Consumer groups** - Scale processing
|
|
95
|
+
✅ **Retention** - Set appropriate TTL
|
|
96
|
+
✅ **Monitoring** - Track lag
|
|
97
|
+
✅ **Schema** - Use Avro or Protobuf
|
|
98
|
+
|
|
99
|
+
## Resources
|
|
100
|
+
|
|
101
|
+
- [KafkaJS Documentation](https://kafka.js.org/)
|
|
102
|
+
- [Apache Kafka Guide](https://kafka.apache.org/documentation/)
|
|
@@ -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,109 @@
|
|
|
1
|
+
# Capacitor
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Capacitor converts web apps to native iOS/Android apps with access to native device APIs.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @capacitor/core @capacitor/cli
|
|
10
|
+
npx cap init "My App" com.mycompany.myapp --web-dir dist
|
|
11
|
+
|
|
12
|
+
npm install @capacitor/ios @capacitor/android
|
|
13
|
+
npx cap add ios
|
|
14
|
+
npx cap add android
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## capacitor.config.ts
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { CapacitorConfig } from '@capacitor/cli';
|
|
21
|
+
|
|
22
|
+
const config: CapacitorConfig = {
|
|
23
|
+
appId: 'com.mycompany.myapp',
|
|
24
|
+
appName: 'My App',
|
|
25
|
+
webDir: 'dist',
|
|
26
|
+
server: {
|
|
27
|
+
androidScheme: 'https',
|
|
28
|
+
},
|
|
29
|
+
plugins: {
|
|
30
|
+
PushNotifications: {
|
|
31
|
+
presentationOptions: ['badge', 'sound', 'alert'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default config;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Native Plugins
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { Camera, CameraResultType } from '@capacitor/camera';
|
|
43
|
+
import { Geolocation } from '@capacitor/geolocation';
|
|
44
|
+
import { Storage } from '@capacitor/preferences';
|
|
45
|
+
import { PushNotifications } from '@capacitor/push-notifications';
|
|
46
|
+
|
|
47
|
+
// Camera
|
|
48
|
+
async function takePicture() {
|
|
49
|
+
const image = await Camera.getPhoto({
|
|
50
|
+
quality: 90,
|
|
51
|
+
allowEditing: false,
|
|
52
|
+
resultType: CameraResultType.DataUrl,
|
|
53
|
+
});
|
|
54
|
+
return image.dataUrl;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Location
|
|
58
|
+
async function getCurrentLocation() {
|
|
59
|
+
const position = await Geolocation.getCurrentPosition({ enableHighAccuracy: true });
|
|
60
|
+
return { lat: position.coords.latitude, lng: position.coords.longitude };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Secure Storage
|
|
64
|
+
await Storage.set({ key: 'authToken', value: token });
|
|
65
|
+
const { value } = await Storage.get({ key: 'authToken' });
|
|
66
|
+
|
|
67
|
+
// Push Notifications
|
|
68
|
+
await PushNotifications.requestPermissions();
|
|
69
|
+
await PushNotifications.register();
|
|
70
|
+
PushNotifications.addListener('registration', ({ value: token }) => {
|
|
71
|
+
// Send token to server
|
|
72
|
+
fetch('/api/push/register', { method: 'POST', body: JSON.stringify({ token }) });
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Build & Deploy
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Build web app first
|
|
80
|
+
npm run build
|
|
81
|
+
|
|
82
|
+
# Sync to native projects
|
|
83
|
+
npx cap sync
|
|
84
|
+
|
|
85
|
+
# Open in Xcode / Android Studio
|
|
86
|
+
npx cap open ios
|
|
87
|
+
npx cap open android
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Live Reload During Development
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// capacitor.config.ts
|
|
94
|
+
const config: CapacitorConfig = {
|
|
95
|
+
server: {
|
|
96
|
+
url: 'http://192.168.1.100:3000', // your local IP
|
|
97
|
+
cleartext: true,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Best Practices
|
|
103
|
+
- Always call `cap sync` after adding plugins or building
|
|
104
|
+
- Use `@capacitor/preferences` (not localStorage) for persistent storage
|
|
105
|
+
- Test on real devices — simulators miss camera, GPS, push notification behaviors
|
|
106
|
+
- Handle permissions gracefully with fallback UI
|
|
107
|
+
|
|
108
|
+
## Resources
|
|
109
|
+
- [Capacitor docs](https://capacitorjs.com/docs)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Expo (React Native)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Expo provides a managed workflow for React Native apps targeting iOS, Android, and web.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npx create-expo-app@latest my-app --template blank-typescript
|
|
10
|
+
cd my-app
|
|
11
|
+
npx expo start
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Core Components
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
// app/(tabs)/index.tsx
|
|
18
|
+
import { View, Text, StyleSheet, Pressable, FlatList } from 'react-native';
|
|
19
|
+
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
20
|
+
import { useRouter } from 'expo-router';
|
|
21
|
+
|
|
22
|
+
export default function HomeScreen() {
|
|
23
|
+
const router = useRouter();
|
|
24
|
+
return (
|
|
25
|
+
<SafeAreaView style={styles.container}>
|
|
26
|
+
<Text style={styles.title}>Home</Text>
|
|
27
|
+
<Pressable
|
|
28
|
+
style={({ pressed }) => [styles.btn, pressed && { opacity: 0.8 }]}
|
|
29
|
+
onPress={() => router.push('/details')}
|
|
30
|
+
>
|
|
31
|
+
<Text style={styles.btnText}>Go to Details</Text>
|
|
32
|
+
</Pressable>
|
|
33
|
+
</SafeAreaView>
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const styles = StyleSheet.create({
|
|
38
|
+
container: { flex: 1, padding: 20 },
|
|
39
|
+
title: { fontSize: 24, fontWeight: 'bold', marginBottom: 20 },
|
|
40
|
+
btn: { backgroundColor: '#007AFF', padding: 14, borderRadius: 8, alignItems: 'center' },
|
|
41
|
+
btnText: { color: '#fff', fontWeight: '600' },
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Expo Router File Structure
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
app/
|
|
49
|
+
├── _layout.tsx # Root layout with providers
|
|
50
|
+
├── (tabs)/
|
|
51
|
+
│ ├── _layout.tsx # Tab bar config
|
|
52
|
+
│ ├── index.tsx # Home tab
|
|
53
|
+
│ └── profile.tsx # Profile tab
|
|
54
|
+
├── (auth)/
|
|
55
|
+
│ ├── login.tsx
|
|
56
|
+
│ └── signup.tsx
|
|
57
|
+
└── [id].tsx # Dynamic route
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## API with React Query
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
import { useQuery } from '@tanstack/react-query';
|
|
64
|
+
|
|
65
|
+
function useUsers() {
|
|
66
|
+
return useQuery({
|
|
67
|
+
queryKey: ['users'],
|
|
68
|
+
queryFn: async () => {
|
|
69
|
+
const res = await fetch(`${process.env.EXPO_PUBLIC_API_URL}/users`);
|
|
70
|
+
if (!res.ok) throw new Error('Failed to fetch');
|
|
71
|
+
return res.json();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function UserList() {
|
|
77
|
+
const { data, isLoading, error } = useUsers();
|
|
78
|
+
if (isLoading) return <ActivityIndicator />;
|
|
79
|
+
if (error) return <Text>Error loading users</Text>;
|
|
80
|
+
return <FlatList data={data} keyExtractor={i => i.id} renderItem={({ item }) => <Text>{item.name}</Text>} />;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## EAS Build & Submit
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npm install -g eas-cli && eas login
|
|
88
|
+
eas build:configure
|
|
89
|
+
eas build --platform ios --profile production
|
|
90
|
+
eas submit --platform ios
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Best Practices
|
|
94
|
+
- Use Expo Router for file-based navigation
|
|
95
|
+
- Use `expo-secure-store` for tokens, never AsyncStorage
|
|
96
|
+
- Test on real devices early — simulators miss important native behaviors
|
|
97
|
+
- Use EAS Update for OTA JavaScript updates
|
|
98
|
+
|
|
99
|
+
## Resources
|
|
100
|
+
- [Expo docs](https://docs.expo.dev)
|
|
101
|
+
- [Expo Router](https://expo.github.io/router/docs)
|