cokit-cli 1.0.1 → 1.0.2
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/AGENTS.md +103 -0
- package/README.FLOW.md +237 -0
- package/README.md +153 -94
- package/agents/brainstormer.agent.md +71 -0
- package/agents/code-reviewer.agent.md +128 -0
- package/agents/database-admin.agent.md +91 -0
- package/agents/debugger.agent.md +128 -0
- package/agents/docs-manager.agent.md +121 -0
- package/agents/fullstack-developer.agent.md +96 -0
- package/agents/git-manager.agent.md +392 -0
- package/agents/mcp-manager.agent.md +93 -0
- package/agents/planner.agent.md +94 -0
- package/agents/project-manager.agent.md +124 -0
- package/agents/researcher.agent.md +32 -0
- package/agents/scout-external.agent.md +141 -0
- package/agents/scout.agent.md +107 -0
- package/agents/tester.agent.md +106 -0
- package/agents/ui-ux-designer.agent.md +225 -0
- package/collections/ck-core.collection.yml +30 -0
- package/collections/ck-development-rules.collection.yml +18 -0
- package/collections/ck-documentation.collection.yml +18 -0
- package/collections/ck-git-workflow.collection.yml +18 -0
- package/collections/ck-orchestration.collection.yml +22 -0
- package/collections/ck-ui-design.collection.yml +18 -0
- package/docs/README.md +85 -0
- package/docs/copilot-processing-flow.md +128 -0
- package/instructions/ck-backend.instructions.md +48 -0
- package/instructions/ck-development.instructions.md +40 -0
- package/instructions/ck-frontend-design-pro.instructions.md +58 -0
- package/instructions/ck-frontend.instructions.md +44 -0
- package/instructions/ck-google-adk-python.instructions.md +242 -0
- package/instructions/ck-research.instructions.md +167 -0
- package/instructions/ck-testing.instructions.md +36 -0
- package/package.json +9 -2
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
- package/prompts/ck-ask.prompt.md +57 -0
- package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
- package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
- package/prompts/ck-bootstrap-auto.prompt.md +114 -0
- package/prompts/ck-bootstrap.prompt.md +136 -0
- package/prompts/ck-brainstorm.prompt.md +68 -0
- package/prompts/ck-ck-help.prompt.md +114 -0
- package/prompts/ck-code-auto.prompt.md +171 -0
- package/prompts/ck-code-no-test.prompt.md +159 -0
- package/prompts/ck-code-parallel.prompt.md +56 -0
- package/prompts/ck-code.prompt.md +177 -0
- package/prompts/ck-coding-level.prompt.md +54 -0
- package/prompts/ck-cook-auto-fast.prompt.md +26 -0
- package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
- package/prompts/ck-cook-auto.prompt.md +15 -0
- package/prompts/ck-cook.prompt.md +96 -0
- package/prompts/ck-debug.prompt.md +14 -0
- package/prompts/ck-design-3d.prompt.md +84 -0
- package/prompts/ck-design-describe.prompt.md +24 -0
- package/prompts/ck-design-fast.prompt.md +32 -0
- package/prompts/ck-design-good.prompt.md +36 -0
- package/prompts/ck-design-screenshot.prompt.md +35 -0
- package/prompts/ck-design-video.prompt.md +35 -0
- package/prompts/ck-docs-init.prompt.md +27 -0
- package/prompts/ck-docs-summarize.prompt.md +23 -0
- package/prompts/ck-docs-update.prompt.md +36 -0
- package/prompts/ck-fix-ci.prompt.md +18 -0
- package/prompts/ck-fix-fast.prompt.md +18 -0
- package/prompts/ck-fix-hard.prompt.md +36 -0
- package/prompts/ck-fix-logs.prompt.md +27 -0
- package/prompts/ck-fix-parallel.prompt.md +54 -0
- package/prompts/ck-fix-test.prompt.md +19 -0
- package/prompts/ck-fix-types.prompt.md +11 -0
- package/prompts/ck-fix-ui.prompt.md +49 -0
- package/prompts/ck-fix.prompt.md +44 -0
- package/prompts/ck-git-cm.prompt.md +8 -0
- package/prompts/ck-git-cp.prompt.md +7 -0
- package/prompts/ck-git-merge.prompt.md +41 -0
- package/prompts/ck-git-pr.prompt.md +49 -0
- package/prompts/ck-kanban.prompt.md +77 -0
- package/prompts/ck-plan-archive.prompt.md +58 -0
- package/prompts/ck-plan-ci.prompt.md +34 -0
- package/prompts/ck-plan-cro.prompt.md +66 -0
- package/prompts/ck-plan-fast.prompt.md +67 -0
- package/prompts/ck-plan-hard.prompt.md +89 -0
- package/prompts/ck-plan-parallel.prompt.md +126 -0
- package/prompts/ck-plan-two.prompt.md +43 -0
- package/prompts/ck-plan-validate.prompt.md +118 -0
- package/prompts/ck-plan.prompt.md +29 -1
- package/prompts/ck-preview.prompt.md +65 -0
- package/prompts/ck-review-codebase.prompt.md +44 -0
- package/prompts/ck-scout-ext.prompt.md +35 -0
- package/prompts/ck-scout.prompt.md +25 -0
- package/prompts/ck-skill-add.prompt.md +36 -0
- package/prompts/ck-skill-create.prompt.md +29 -0
- package/prompts/ck-skill-fix-logs.prompt.md +22 -0
- package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
- package/prompts/ck-skill-optimize.prompt.md +34 -0
- package/prompts/ck-skill-plan.prompt.md +46 -0
- package/prompts/ck-test-ui.prompt.md +92 -0
- package/prompts/ck-test.prompt.md +10 -0
- package/prompts/ck-use-mcp.prompt.md +27 -0
- package/prompts/ck-watzup.prompt.md +11 -0
- package/prompts/ck-worktree.prompt.md +127 -0
- package/rules/README.agents.md +55 -0
- package/rules/README.collections.md +78 -0
- package/rules/README.copilot-instructions.md +66 -0
- package/rules/README.instructions.md +73 -0
- package/rules/README.md +39 -0
- package/rules/README.prompts.md +76 -0
- package/rules/README.skills.md +71 -0
- package/skills/ck-ai-artist/SKILL.md +73 -0
- package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ck-ai-artist/references/domain-code.md +66 -0
- package/skills/ck-ai-artist/references/domain-data.md +72 -0
- package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
- package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
- package/skills/ck-ai-artist/references/domain-writing.md +68 -0
- package/skills/ck-ai-artist/references/image-prompting.md +141 -0
- package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
- package/skills/ck-ai-artist/references/nano-banana.md +59 -0
- package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ck-backend-development/SKILL.md +93 -0
- package/skills/ck-backend-development/references/backend-api-design.md +495 -0
- package/skills/ck-backend-development/references/backend-architecture.md +454 -0
- package/skills/ck-backend-development/references/backend-authentication.md +338 -0
- package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
- package/skills/ck-backend-development/references/backend-debugging.md +904 -0
- package/skills/ck-backend-development/references/backend-devops.md +494 -0
- package/skills/ck-backend-development/references/backend-mindset.md +387 -0
- package/skills/ck-backend-development/references/backend-performance.md +397 -0
- package/skills/ck-backend-development/references/backend-security.md +290 -0
- package/skills/ck-backend-development/references/backend-technologies.md +256 -0
- package/skills/ck-backend-development/references/backend-testing.md +429 -0
- package/skills/ck-better-auth/SKILL.md +202 -0
- package/skills/ck-better-auth/references/advanced-features.md +553 -0
- package/skills/ck-better-auth/references/database-integration.md +577 -0
- package/skills/ck-better-auth/references/email-password-auth.md +416 -0
- package/skills/ck-better-auth/references/oauth-providers.md +430 -0
- package/skills/ck-better-auth/scripts/.coverage +0 -0
- package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
- package/skills/ck-better-auth/scripts/requirements.txt +15 -0
- package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
- package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/skills/ck-chrome-devtools/SKILL.md +470 -0
- package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
- package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
- package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
- package/skills/ck-chrome-devtools/scripts/README.md +272 -0
- package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
- package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
- package/skills/ck-chrome-devtools/scripts/click.js +83 -0
- package/skills/ck-chrome-devtools/scripts/console.js +79 -0
- package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
- package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
- package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
- package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
- package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
- package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
- package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
- package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
- package/skills/ck-chrome-devtools/scripts/network.js +106 -0
- package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
- package/skills/ck-chrome-devtools/scripts/package.json +16 -0
- package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
- package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
- package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
- package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
- package/skills/ck-code-review/SKILL.md +110 -53
- package/skills/ck-code-review/references/code-review-reception.md +182 -49
- package/skills/ck-code-review/references/requesting-code-review.md +105 -0
- package/skills/ck-code-review/references/verification-before-completion.md +111 -58
- package/skills/ck-databases/SKILL.md +231 -0
- package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
- package/skills/ck-databases/references/mongodb-atlas.md +465 -0
- package/skills/ck-databases/references/mongodb-crud.md +408 -0
- package/skills/ck-databases/references/mongodb-indexing.md +442 -0
- package/skills/ck-databases/references/postgresql-administration.md +594 -0
- package/skills/ck-databases/references/postgresql-performance.md +527 -0
- package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
- package/skills/ck-databases/references/postgresql-queries.md +475 -0
- package/skills/ck-databases/scripts/.coverage +0 -0
- package/skills/ck-databases/scripts/db_backup.py +502 -0
- package/skills/ck-databases/scripts/db_migrate.py +425 -0
- package/skills/ck-databases/scripts/db_performance_check.py +456 -0
- package/skills/ck-databases/scripts/requirements.txt +20 -0
- package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
- package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
- package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/ck-debugging/SKILL.md +55 -43
- package/skills/ck-debugging/references/defense-in-depth.md +124 -0
- package/skills/ck-debugging/references/root-cause-tracing.md +100 -43
- package/skills/ck-debugging/references/systematic-debugging.md +80 -52
- package/skills/ck-debugging/references/verification.md +101 -52
- package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
- package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
- package/skills/ck-devops/.env.example +76 -0
- package/skills/ck-devops/SKILL.md +283 -0
- package/skills/ck-devops/references/browser-rendering.md +305 -0
- package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/ck-devops/references/cloudflare-platform.md +271 -0
- package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/ck-devops/references/docker-basics.md +297 -0
- package/skills/ck-devops/references/docker-compose.md +292 -0
- package/skills/ck-devops/references/gcloud-platform.md +297 -0
- package/skills/ck-devops/references/gcloud-services.md +304 -0
- package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/ck-devops/scripts/docker_optimize.py +331 -0
- package/skills/ck-devops/scripts/requirements.txt +20 -0
- package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
- package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/ck-docs-seeker/.env.example +15 -0
- package/skills/ck-docs-seeker/SKILL.md +70 -65
- package/skills/ck-docs-seeker/package.json +25 -0
- package/skills/ck-docs-seeker/references/advanced.md +79 -0
- package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
- package/skills/ck-docs-seeker/references/errors.md +68 -0
- package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
- package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
- package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
- package/skills/ck-frontend-design/SKILL.md +79 -0
- package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
- package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
- package/skills/ck-frontend-design/references/animejs.md +396 -0
- package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
- package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
- package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
- package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
- package/skills/ck-frontend-design/references/technical-overview.md +90 -0
- package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
- package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/ck-frontend-development/SKILL.md +399 -0
- package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
- package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
- package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
- package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
- package/skills/ck-frontend-development/resources/file-organization.md +502 -0
- package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
- package/skills/ck-frontend-development/resources/performance.md +406 -0
- package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
- package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
- package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
- package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
- package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
- package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
- package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
- package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
- package/skills/ck-markdown-novel-viewer/package.json +15 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
- package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/skills/ck-mcp-builder/LICENSE.txt +202 -0
- package/skills/ck-mcp-builder/SKILL.md +327 -0
- package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
- package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/ck-mcp-builder/scripts/connections.py +151 -0
- package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
- package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
- package/skills/ck-mcp-management/README.md +219 -0
- package/skills/ck-mcp-management/SKILL.md +209 -0
- package/skills/ck-mcp-management/assets/tools.json +3146 -0
- package/skills/ck-mcp-management/references/configuration.md +114 -0
- package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
- package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ck-mcp-management/scripts/.env.example +10 -0
- package/skills/ck-mcp-management/scripts/cli.ts +195 -0
- package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ck-mcp-management/scripts/package.json +20 -0
- package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
- package/skills/ck-media-processing/SKILL.md +90 -0
- package/skills/ck-media-processing/references/common-workflows.md +132 -0
- package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
- package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
- package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
- package/skills/ck-media-processing/references/format-compatibility.md +375 -0
- package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
- package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
- package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
- package/skills/ck-media-processing/references/troubleshooting.md +109 -0
- package/skills/ck-media-processing/scripts/README.md +111 -0
- package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
- package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
- package/skills/ck-media-processing/scripts/media_convert.py +311 -0
- package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
- package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
- package/skills/ck-media-processing/scripts/requirements.txt +24 -0
- package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
- package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
- package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
- package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
- package/skills/ck-mobile-development/SKILL.md +210 -0
- package/skills/ck-mobile-development/references/mobile-android.md +604 -0
- package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
- package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
- package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
- package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
- package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
- package/skills/ck-payment-integration/README.md +185 -0
- package/skills/ck-payment-integration/SKILL.md +116 -0
- package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
- package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
- package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
- package/skills/ck-payment-integration/references/polar/overview.md +184 -0
- package/skills/ck-payment-integration/references/polar/products.md +244 -0
- package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
- package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
- package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
- package/skills/ck-payment-integration/references/sepay/api.md +140 -0
- package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
- package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
- package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
- package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
- package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
- package/skills/ck-payment-integration/scripts/.env.example +20 -0
- package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
- package/skills/ck-payment-integration/scripts/package.json +17 -0
- package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
- package/skills/ck-planning/SKILL.md +79 -49
- package/skills/ck-planning/references/codebase-understanding.md +62 -0
- package/skills/ck-planning/references/output-standards.md +127 -0
- package/skills/ck-planning/references/plan-organization.md +122 -60
- package/skills/ck-planning/references/research-phase.md +49 -56
- package/skills/ck-planning/references/solution-design.md +61 -63
- package/skills/ck-problem-solving/SKILL.md +95 -0
- package/skills/ck-problem-solving/references/attribution.md +69 -0
- package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
- package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
- package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
- package/skills/ck-problem-solving/references/scale-game.md +95 -0
- package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
- package/skills/ck-problem-solving/references/when-stuck.md +72 -0
- package/skills/ck-repomix/SKILL.md +247 -0
- package/skills/ck-repomix/references/configuration.md +211 -0
- package/skills/ck-repomix/references/usage-patterns.md +232 -0
- package/skills/ck-repomix/scripts/.coverage +0 -0
- package/skills/ck-repomix/scripts/README.md +179 -0
- package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
- package/skills/ck-repomix/scripts/repos.example.json +15 -0
- package/skills/ck-repomix/scripts/requirements.txt +15 -0
- package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/ck-sequential-thinking/.env.example +8 -0
- package/skills/ck-sequential-thinking/README.md +183 -0
- package/skills/ck-sequential-thinking/SKILL.md +14 -2
- package/skills/ck-sequential-thinking/package.json +31 -0
- package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/ck-sequential-thinking/references/advanced-techniques.md +2 -14
- package/skills/ck-sequential-thinking/references/core-patterns.md +8 -0
- package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
- package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
- package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/ck-shopify/README.md +66 -0
- package/skills/ck-shopify/SKILL.md +319 -0
- package/skills/ck-shopify/references/app-development.md +470 -0
- package/skills/ck-shopify/references/extensions.md +493 -0
- package/skills/ck-shopify/references/themes.md +498 -0
- package/skills/ck-shopify/scripts/.coverage +0 -0
- package/skills/ck-shopify/scripts/requirements.txt +19 -0
- package/skills/ck-shopify/scripts/shopify_init.py +423 -0
- package/skills/ck-shopify/scripts/tests/.coverage +0 -0
- package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
- package/skills/ck-skill-creator/LICENSE.txt +202 -0
- package/skills/ck-skill-creator/SKILL.md +265 -0
- package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
- package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
- package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
- package/skills/ck-threejs/SKILL.md +87 -0
- package/skills/ck-threejs/references/01-getting-started.md +177 -0
- package/skills/ck-threejs/references/02-loaders.md +169 -0
- package/skills/ck-threejs/references/03-textures.md +170 -0
- package/skills/ck-threejs/references/04-cameras.md +195 -0
- package/skills/ck-threejs/references/05-lights.md +183 -0
- package/skills/ck-threejs/references/06-animations.md +214 -0
- package/skills/ck-threejs/references/07-math.md +260 -0
- package/skills/ck-threejs/references/08-interaction.md +267 -0
- package/skills/ck-threejs/references/09-postprocessing.md +240 -0
- package/skills/ck-threejs/references/10-controls.md +259 -0
- package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
- package/skills/ck-threejs/references/12-performance.md +269 -0
- package/skills/ck-threejs/references/13-node-materials.md +298 -0
- package/skills/ck-threejs/references/14-physics-vr.md +304 -0
- package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
- package/skills/ck-threejs/references/16-webgpu.md +302 -0
- package/skills/ck-ui-styling/LICENSE.txt +202 -0
- package/skills/ck-ui-styling/SKILL.md +319 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
- package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/ck-ui-styling/scripts/.coverage +0 -0
- package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
- package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
- package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
- package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
- package/skills/ck-web-frameworks/SKILL.md +322 -0
- package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
- package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
- package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
- package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
- package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
- package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
- package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
- package/skills/ck-web-frameworks/scripts/.coverage +0 -0
- package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
- package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
- package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
- package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
- package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/src/commands/init.js +61 -30
- package/src/utils/paths.js +35 -4
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
# Next.js Data Fetching
|
|
2
|
+
|
|
3
|
+
Server-side data fetching, caching strategies, revalidation, and loading patterns.
|
|
4
|
+
|
|
5
|
+
## Fetch API Extensions
|
|
6
|
+
|
|
7
|
+
Next.js extends native fetch with caching and revalidation:
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
// Force cache (default) - cache forever
|
|
11
|
+
fetch('https://api.example.com/data', { cache: 'force-cache' })
|
|
12
|
+
|
|
13
|
+
// No cache - fetch on every request
|
|
14
|
+
fetch('https://api.example.com/data', { cache: 'no-store' })
|
|
15
|
+
|
|
16
|
+
// Revalidate - cache with time-based revalidation
|
|
17
|
+
fetch('https://api.example.com/data', { next: { revalidate: 3600 } })
|
|
18
|
+
|
|
19
|
+
// Tag-based revalidation
|
|
20
|
+
fetch('https://api.example.com/data', { next: { tags: ['posts'] } })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Caching Strategies
|
|
24
|
+
|
|
25
|
+
### Static Data (Default)
|
|
26
|
+
|
|
27
|
+
Fetched at build time, cached indefinitely:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
// app/posts/page.tsx
|
|
31
|
+
async function getPosts() {
|
|
32
|
+
const res = await fetch('https://api.example.com/posts')
|
|
33
|
+
// Same as: fetch(url, { cache: 'force-cache' })
|
|
34
|
+
return res.json()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export default async function Posts() {
|
|
38
|
+
const posts = await getPosts()
|
|
39
|
+
return <PostsList posts={posts} />
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Use for: Content that rarely changes, static pages
|
|
44
|
+
|
|
45
|
+
### Dynamic Data
|
|
46
|
+
|
|
47
|
+
Fetched on every request:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
async function getUser() {
|
|
51
|
+
const res = await fetch('https://api.example.com/user', {
|
|
52
|
+
cache: 'no-store'
|
|
53
|
+
})
|
|
54
|
+
return res.json()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default async function Profile() {
|
|
58
|
+
const user = await getUser()
|
|
59
|
+
return <div>{user.name}</div>
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Use for: User-specific data, real-time content
|
|
64
|
+
|
|
65
|
+
### Incremental Static Regeneration (ISR)
|
|
66
|
+
|
|
67
|
+
Revalidate cached data after time period:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
async function getPosts() {
|
|
71
|
+
const res = await fetch('https://api.example.com/posts', {
|
|
72
|
+
next: { revalidate: 60 } // Revalidate every 60 seconds
|
|
73
|
+
})
|
|
74
|
+
return res.json()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default async function Posts() {
|
|
78
|
+
const posts = await getPosts()
|
|
79
|
+
return <PostsList posts={posts} />
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
How it works:
|
|
84
|
+
1. First request: Generate page, cache it
|
|
85
|
+
2. Subsequent requests: Serve cached page
|
|
86
|
+
3. After 60s: Next request triggers regeneration in background
|
|
87
|
+
4. New page cached, served to subsequent requests
|
|
88
|
+
|
|
89
|
+
Use for: News sites, blogs, product listings
|
|
90
|
+
|
|
91
|
+
## Revalidation Strategies
|
|
92
|
+
|
|
93
|
+
### Time-Based Revalidation
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
// Revalidate every hour
|
|
97
|
+
fetch('https://api.example.com/posts', {
|
|
98
|
+
next: { revalidate: 3600 }
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
// Revalidate every 10 seconds
|
|
102
|
+
fetch('https://api.example.com/trending', {
|
|
103
|
+
next: { revalidate: 10 }
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### On-Demand Revalidation
|
|
108
|
+
|
|
109
|
+
Revalidate specific paths or tags programmatically:
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
// app/actions.ts
|
|
113
|
+
'use server'
|
|
114
|
+
|
|
115
|
+
import { revalidatePath, revalidateTag } from 'next/cache'
|
|
116
|
+
|
|
117
|
+
export async function createPost(formData: FormData) {
|
|
118
|
+
const post = await db.post.create({
|
|
119
|
+
data: {
|
|
120
|
+
title: formData.get('title'),
|
|
121
|
+
content: formData.get('content')
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
// Revalidate specific path
|
|
126
|
+
revalidatePath('/posts')
|
|
127
|
+
revalidatePath(`/posts/${post.id}`)
|
|
128
|
+
|
|
129
|
+
// Or revalidate by tag
|
|
130
|
+
revalidateTag('posts')
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Tag-based revalidation:
|
|
135
|
+
```tsx
|
|
136
|
+
// Fetch with tags
|
|
137
|
+
async function getPosts() {
|
|
138
|
+
const res = await fetch('https://api.example.com/posts', {
|
|
139
|
+
next: { tags: ['posts', 'content'] }
|
|
140
|
+
})
|
|
141
|
+
return res.json()
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async function getComments(postId: string) {
|
|
145
|
+
const res = await fetch(`https://api.example.com/comments/${postId}`, {
|
|
146
|
+
next: { tags: ['comments', `post-${postId}`] }
|
|
147
|
+
})
|
|
148
|
+
return res.json()
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Revalidate all 'posts' tagged requests
|
|
152
|
+
revalidateTag('posts')
|
|
153
|
+
|
|
154
|
+
// Revalidate specific post comments
|
|
155
|
+
revalidateTag(`post-${postId}`)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Route Segment Config
|
|
159
|
+
|
|
160
|
+
Configure entire route segment:
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
// app/posts/page.tsx
|
|
164
|
+
export const revalidate = 3600 // Revalidate every hour
|
|
165
|
+
|
|
166
|
+
export default async function Posts() {
|
|
167
|
+
const posts = await fetch('https://api.example.com/posts').then(r => r.json())
|
|
168
|
+
return <PostsList posts={posts} />
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Options:
|
|
173
|
+
```tsx
|
|
174
|
+
export const dynamic = 'auto' // default
|
|
175
|
+
export const dynamic = 'force-dynamic' // no caching
|
|
176
|
+
export const dynamic = 'error' // error if dynamic
|
|
177
|
+
export const dynamic = 'force-static' // force static
|
|
178
|
+
|
|
179
|
+
export const revalidate = false // never revalidate (default)
|
|
180
|
+
export const revalidate = 0 // no cache
|
|
181
|
+
export const revalidate = 60 // revalidate every 60s
|
|
182
|
+
|
|
183
|
+
export const fetchCache = 'auto' // default
|
|
184
|
+
export const fetchCache = 'default-cache'
|
|
185
|
+
export const fetchCache = 'only-cache'
|
|
186
|
+
export const fetchCache = 'force-cache'
|
|
187
|
+
export const fetchCache = 'default-no-store'
|
|
188
|
+
export const fetchCache = 'only-no-store'
|
|
189
|
+
export const fetchCache = 'force-no-store'
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Data Fetching Patterns
|
|
193
|
+
|
|
194
|
+
### Parallel Fetching
|
|
195
|
+
|
|
196
|
+
Fetch multiple resources simultaneously:
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
async function getData() {
|
|
200
|
+
// Start both requests in parallel
|
|
201
|
+
const [posts, users] = await Promise.all([
|
|
202
|
+
fetch('https://api.example.com/posts').then(r => r.json()),
|
|
203
|
+
fetch('https://api.example.com/users').then(r => r.json())
|
|
204
|
+
])
|
|
205
|
+
|
|
206
|
+
return { posts, users }
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export default async function Page() {
|
|
210
|
+
const { posts, users } = await getData()
|
|
211
|
+
return (
|
|
212
|
+
<div>
|
|
213
|
+
<PostsList posts={posts} />
|
|
214
|
+
<UsersList users={users} />
|
|
215
|
+
</div>
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Sequential Fetching
|
|
221
|
+
|
|
222
|
+
Fetch dependent data:
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
async function getData(postId: string) {
|
|
226
|
+
// Fetch post first
|
|
227
|
+
const post = await fetch(`https://api.example.com/posts/${postId}`).then(r => r.json())
|
|
228
|
+
|
|
229
|
+
// Then fetch author based on post data
|
|
230
|
+
const author = await fetch(`https://api.example.com/users/${post.authorId}`).then(r => r.json())
|
|
231
|
+
|
|
232
|
+
return { post, author }
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export default async function Post({ params }: { params: { id: string } }) {
|
|
236
|
+
const { post, author } = await getData(params.id)
|
|
237
|
+
return (
|
|
238
|
+
<article>
|
|
239
|
+
<h1>{post.title}</h1>
|
|
240
|
+
<p>By {author.name}</p>
|
|
241
|
+
<div>{post.content}</div>
|
|
242
|
+
</article>
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Preloading Data
|
|
248
|
+
|
|
249
|
+
Optimize sequential waterfalls:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
// lib/data.ts
|
|
253
|
+
import { cache } from 'react'
|
|
254
|
+
|
|
255
|
+
export const getUser = cache(async (id: string) => {
|
|
256
|
+
const res = await fetch(`https://api.example.com/users/${id}`)
|
|
257
|
+
return res.json()
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
// app/user/[id]/page.tsx
|
|
261
|
+
import { getUser } from '@/lib/data'
|
|
262
|
+
|
|
263
|
+
// Preload before component renders
|
|
264
|
+
async function preload(id: string) {
|
|
265
|
+
void getUser(id) // Start fetching immediately
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export default async function User({ params }: { params: { id: string } }) {
|
|
269
|
+
preload(params.id) // Start fetch
|
|
270
|
+
// Render other UI
|
|
271
|
+
const user = await getUser(params.id) // Will use cached result
|
|
272
|
+
|
|
273
|
+
return <div>{user.name}</div>
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Loading States
|
|
278
|
+
|
|
279
|
+
### Loading File
|
|
280
|
+
|
|
281
|
+
Automatic loading UI:
|
|
282
|
+
|
|
283
|
+
```tsx
|
|
284
|
+
// app/dashboard/loading.tsx
|
|
285
|
+
export default function Loading() {
|
|
286
|
+
return <div className="spinner">Loading dashboard...</div>
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// app/dashboard/page.tsx
|
|
290
|
+
export default async function Dashboard() {
|
|
291
|
+
const data = await fetchDashboard()
|
|
292
|
+
return <DashboardView data={data} />
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Suspense Boundaries
|
|
297
|
+
|
|
298
|
+
Granular loading states:
|
|
299
|
+
|
|
300
|
+
```tsx
|
|
301
|
+
// app/dashboard/page.tsx
|
|
302
|
+
import { Suspense } from 'react'
|
|
303
|
+
|
|
304
|
+
async function Revenue() {
|
|
305
|
+
const data = await fetchRevenue() // 2s
|
|
306
|
+
return <RevenueChart data={data} />
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
async function Sales() {
|
|
310
|
+
const data = await fetchSales() // 0.5s
|
|
311
|
+
return <SalesTable data={data} />
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export default function Dashboard() {
|
|
315
|
+
return (
|
|
316
|
+
<div>
|
|
317
|
+
<h1>Dashboard</h1>
|
|
318
|
+
|
|
319
|
+
<Suspense fallback={<RevenueChartSkeleton />}>
|
|
320
|
+
<Revenue />
|
|
321
|
+
</Suspense>
|
|
322
|
+
|
|
323
|
+
<Suspense fallback={<SalesTableSkeleton />}>
|
|
324
|
+
<Sales />
|
|
325
|
+
</Suspense>
|
|
326
|
+
</div>
|
|
327
|
+
)
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Sales loads after 0.5s, Revenue after 2s - no blocking.
|
|
332
|
+
|
|
333
|
+
## Static Generation
|
|
334
|
+
|
|
335
|
+
### generateStaticParams
|
|
336
|
+
|
|
337
|
+
Pre-render dynamic routes at build time:
|
|
338
|
+
|
|
339
|
+
```tsx
|
|
340
|
+
// app/posts/[slug]/page.tsx
|
|
341
|
+
export async function generateStaticParams() {
|
|
342
|
+
const posts = await fetch('https://api.example.com/posts').then(r => r.json())
|
|
343
|
+
|
|
344
|
+
return posts.map(post => ({
|
|
345
|
+
slug: post.slug
|
|
346
|
+
}))
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export default async function Post({ params }: { params: { slug: string } }) {
|
|
350
|
+
const post = await fetch(`https://api.example.com/posts/${params.slug}`).then(r => r.json())
|
|
351
|
+
return <article>{post.content}</article>
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Generates static pages at build:
|
|
356
|
+
- `/posts/hello-world`
|
|
357
|
+
- `/posts/nextjs-guide`
|
|
358
|
+
- `/posts/react-tips`
|
|
359
|
+
|
|
360
|
+
### Dynamic Params Handling
|
|
361
|
+
|
|
362
|
+
```tsx
|
|
363
|
+
// app/posts/[slug]/page.tsx
|
|
364
|
+
export const dynamicParams = true // default - generate on-demand if not pre-rendered
|
|
365
|
+
|
|
366
|
+
export const dynamicParams = false // 404 for paths not in generateStaticParams
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Error Handling
|
|
370
|
+
|
|
371
|
+
### Try-Catch in Server Components
|
|
372
|
+
|
|
373
|
+
```tsx
|
|
374
|
+
async function getData() {
|
|
375
|
+
try {
|
|
376
|
+
const res = await fetch('https://api.example.com/data')
|
|
377
|
+
|
|
378
|
+
if (!res.ok) {
|
|
379
|
+
throw new Error('Failed to fetch data')
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return res.json()
|
|
383
|
+
} catch (error) {
|
|
384
|
+
console.error('Data fetch error:', error)
|
|
385
|
+
return null
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export default async function Page() {
|
|
390
|
+
const data = await getData()
|
|
391
|
+
|
|
392
|
+
if (!data) {
|
|
393
|
+
return <div>Failed to load data</div>
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return <DataView data={data} />
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Error Boundaries
|
|
401
|
+
|
|
402
|
+
```tsx
|
|
403
|
+
// app/error.tsx
|
|
404
|
+
'use client'
|
|
405
|
+
|
|
406
|
+
export default function Error({
|
|
407
|
+
error,
|
|
408
|
+
reset,
|
|
409
|
+
}: {
|
|
410
|
+
error: Error & { digest?: string }
|
|
411
|
+
reset: () => void
|
|
412
|
+
}) {
|
|
413
|
+
return (
|
|
414
|
+
<div>
|
|
415
|
+
<h2>Something went wrong!</h2>
|
|
416
|
+
<button onClick={() => reset()}>Try again</button>
|
|
417
|
+
</div>
|
|
418
|
+
)
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
## Database Queries
|
|
423
|
+
|
|
424
|
+
Direct database access in Server Components:
|
|
425
|
+
|
|
426
|
+
```tsx
|
|
427
|
+
// lib/db.ts
|
|
428
|
+
import { PrismaClient } from '@prisma/client'
|
|
429
|
+
|
|
430
|
+
const prisma = new PrismaClient()
|
|
431
|
+
|
|
432
|
+
export async function getPosts() {
|
|
433
|
+
return prisma.post.findMany({
|
|
434
|
+
include: { author: true },
|
|
435
|
+
orderBy: { createdAt: 'desc' }
|
|
436
|
+
})
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// app/posts/page.tsx
|
|
440
|
+
import { getPosts } from '@/lib/db'
|
|
441
|
+
|
|
442
|
+
export default async function Posts() {
|
|
443
|
+
const posts = await getPosts()
|
|
444
|
+
return <PostsList posts={posts} />
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
## Best Practices
|
|
449
|
+
|
|
450
|
+
1. **Default to static** - Use `cache: 'force-cache'` or default behavior
|
|
451
|
+
2. **Use ISR for semi-dynamic content** - Balance freshness and performance
|
|
452
|
+
3. **Fetch in parallel** - Use `Promise.all()` for independent requests
|
|
453
|
+
4. **Add loading states** - Use Suspense for better UX
|
|
454
|
+
5. **Handle errors gracefully** - Provide fallbacks and error boundaries
|
|
455
|
+
6. **Use on-demand revalidation** - Trigger updates after mutations
|
|
456
|
+
7. **Tag your fetches** - Enable granular cache invalidation
|
|
457
|
+
8. **Dedupe automatically** - Next.js dedupes identical fetch requests
|
|
458
|
+
9. **Avoid client-side fetching** - Use Server Components when possible
|
|
459
|
+
10. **Cache database queries** - Use React cache() for expensive queries
|