agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Next.js Pro — Engineering Specification
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
tags: nextjs-pro
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Next.js Pro — Engineering Specification
|
|
8
|
+
|
|
9
|
+
> Production-grade specification for Next.js App Router and React performance patterns at FAANG scale.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Overview
|
|
14
|
+
|
|
15
|
+
Next.js Pro provides structured decision frameworks for Next.js App Router development: Server vs Client component routing, data fetching strategy (static/ISR/dynamic), routing conventions, caching patterns, and 60+ performance rules. The skill operates as an **Expert (decision tree)** — it produces component type decisions, data fetching strategy selections, routing guidance, and performance recommendations. It does not create projects, write components, or execute builds.
|
|
16
|
+
|
|
17
|
+
**Contract Version:** 2.0.0
|
|
18
|
+
**Backward Compatibility:** breaking (first hardened version)
|
|
19
|
+
**Breaking Changes:** None — new spec for first hardening
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. Problem Statement
|
|
24
|
+
|
|
25
|
+
Next.js development at scale faces four quantified problems:
|
|
26
|
+
|
|
27
|
+
| Problem | Measurement | Impact |
|
|
28
|
+
|---------|-------------|--------|
|
|
29
|
+
| Unnecessary `'use client'` | 60% of components marked client when not needed | Larger bundles, no SSR |
|
|
30
|
+
| Data fetching waterfalls | 45% of pages have sequential fetches | Slow TTFB |
|
|
31
|
+
| Barrel import bloat | 35% of imports use barrel files (`index.js`) | Tree-shaking failure |
|
|
32
|
+
| Missing loading/error states | 50% of routes lack loading.tsx or error.tsx | Poor UX |
|
|
33
|
+
|
|
34
|
+
Next.js Pro eliminates these with Server-first defaults (no directive = Server Component), parallel data fetching, direct imports, and mandatory route file conventions.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 3. Design Goals
|
|
39
|
+
|
|
40
|
+
| ID | Goal | Measurable Constraint |
|
|
41
|
+
|----|------|-----------------------|
|
|
42
|
+
| G1 | Server/Client decision tree | Binary: needs useState/useEffect/events → client; else → server |
|
|
43
|
+
| G2 | Data fetching routing | 3 strategies: static (default), ISR (revalidate: 60), dynamic (no-store) |
|
|
44
|
+
| G3 | Route conventions | 4 files: page.tsx, layout.tsx, loading.tsx, error.tsx |
|
|
45
|
+
| G4 | 60+ performance rules | 7 categories: async, bundle, server, client, rendering, rerender, js |
|
|
46
|
+
| G5 | Core Web Vitals pass | LCP < 2.5s, INP < 200ms, CLS < 0.1 |
|
|
47
|
+
| G6 | Server-first philosophy | Server Component by default; client only when necessary |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4. Non-Goals
|
|
52
|
+
|
|
53
|
+
| ID | Excluded | Rationale |
|
|
54
|
+
|----|----------|-----------|
|
|
55
|
+
| NG1 | React component architecture | Owned by `react-architect` skill |
|
|
56
|
+
| NG2 | CSS/Tailwind styling | Owned by `tailwind-kit` skill |
|
|
57
|
+
| NG3 | Design system | Owned by `design-system` skill |
|
|
58
|
+
| NG4 | Performance profiling | Owned by `perf-optimizer` skill |
|
|
59
|
+
| NG5 | API route design | Owned by `api-architect` skill |
|
|
60
|
+
| NG6 | Deployment pipeline | Owned by `cicd-pipeline` skill |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 5. System Boundaries
|
|
65
|
+
|
|
66
|
+
| Boundary | Owned | Not Owned |
|
|
67
|
+
|----------|-------|-----------|
|
|
68
|
+
| Server/Client component decision | Decision tree | Component implementation |
|
|
69
|
+
| Data fetching strategy (3 options) | Strategy selection | API design |
|
|
70
|
+
| Routing conventions (4 files) | Convention guidance | Route implementation |
|
|
71
|
+
| 60+ performance rules | Pattern guidance | Performance measurement |
|
|
72
|
+
| Core Web Vitals targets | Target definition | Vitals measurement |
|
|
73
|
+
| Caching strategy (static/ISR/dynamic) | Strategy selection | Cache infrastructure |
|
|
74
|
+
|
|
75
|
+
**Side-effect boundary:** Next.js Pro produces decisions, patterns, and rule references. It does not create files, build projects, or measure performance.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 6. Integration Model
|
|
80
|
+
|
|
81
|
+
### 6.1 Agent Contract
|
|
82
|
+
|
|
83
|
+
#### Input Schema
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Request_Type: string # "component-type" | "data-fetching" | "routing" |
|
|
87
|
+
# "performance-rules" | "project-structure" | "full-guide"
|
|
88
|
+
Context: {
|
|
89
|
+
needs_interactivity: boolean # useState, useEffect, event handlers
|
|
90
|
+
data_volatility: string # "static" | "periodic" | "real-time"
|
|
91
|
+
revalidate_seconds: number | null # ISR interval (default: 60)
|
|
92
|
+
route_group: string | null # Route group name (e.g., "(marketing)")
|
|
93
|
+
rule_category: string | null # "async" | "bundle" | "server" | "client" |
|
|
94
|
+
# "rendering" | "rerender" | "js"
|
|
95
|
+
}
|
|
96
|
+
contract_version: string # "2.0.0"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### Output Schema
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Status: "success" | "error"
|
|
103
|
+
Data: {
|
|
104
|
+
component_type: {
|
|
105
|
+
type: string # "server" | "client"
|
|
106
|
+
directive: string | null # "'use client'" or null (server default)
|
|
107
|
+
rationale: string
|
|
108
|
+
} | null
|
|
109
|
+
data_fetching: {
|
|
110
|
+
strategy: string # "static" | "isr" | "dynamic"
|
|
111
|
+
cache_config: string # "default" | "revalidate: N" | "no-store"
|
|
112
|
+
use_case: string
|
|
113
|
+
} | null
|
|
114
|
+
routing: {
|
|
115
|
+
files: Array<{
|
|
116
|
+
name: string # "page.tsx" | "layout.tsx" | "loading.tsx" | "error.tsx"
|
|
117
|
+
purpose: string
|
|
118
|
+
required: boolean
|
|
119
|
+
}>
|
|
120
|
+
} | null
|
|
121
|
+
rules: {
|
|
122
|
+
category: string
|
|
123
|
+
file_count: number
|
|
124
|
+
rule_files: Array<string> # File paths in rules/
|
|
125
|
+
} | null
|
|
126
|
+
project_structure: {
|
|
127
|
+
template: string # Directory structure recommendation
|
|
128
|
+
} | null
|
|
129
|
+
metadata: {
|
|
130
|
+
contract_version: string
|
|
131
|
+
backward_compatibility: string
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
Error: ErrorSchema | null
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### Error Schema
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Code: string # From Error Taxonomy (Section 11)
|
|
141
|
+
Message: string
|
|
142
|
+
Request_Type: string
|
|
143
|
+
Recoverable: boolean
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### Deterministic Guarantees
|
|
147
|
+
|
|
148
|
+
- Component type is binary: needs_interactivity=true → `'use client'`; false → Server Component (no directive).
|
|
149
|
+
- Data fetching is deterministic: static → default cache, periodic → `revalidate: N`, real-time → `no-store`.
|
|
150
|
+
- Route conventions are fixed: page.tsx, layout.tsx, loading.tsx, error.tsx.
|
|
151
|
+
- Rule categories are fixed: 7 categories with fixed file counts.
|
|
152
|
+
- Core Web Vitals targets are fixed: LCP < 2.5s, INP < 200ms, CLS < 0.1.
|
|
153
|
+
- Default ISR interval is 60 seconds.
|
|
154
|
+
|
|
155
|
+
#### What Agents May Assume
|
|
156
|
+
|
|
157
|
+
- Server Component is the default (no directive needed).
|
|
158
|
+
- Data fetching in Server Components uses native `fetch()`.
|
|
159
|
+
- Route file conventions follow App Router specification.
|
|
160
|
+
- Performance rules cover the 7 documented categories.
|
|
161
|
+
|
|
162
|
+
#### What Agents Must NOT Assume
|
|
163
|
+
|
|
164
|
+
- All components need `'use client'`.
|
|
165
|
+
- Client-side data fetching is the default pattern.
|
|
166
|
+
- Barrel imports are acceptable.
|
|
167
|
+
- Loading/error states are optional.
|
|
168
|
+
|
|
169
|
+
#### Side-Effect Boundaries
|
|
170
|
+
|
|
171
|
+
| Operation | Side Effects |
|
|
172
|
+
|-----------|-------------|
|
|
173
|
+
| Component type | None; type recommendation |
|
|
174
|
+
| Data fetching | None; strategy recommendation |
|
|
175
|
+
| Routing | None; file convention guidance |
|
|
176
|
+
| Performance rules | None; rule references |
|
|
177
|
+
| Project structure | None; template output |
|
|
178
|
+
| Full guide | None; combined output |
|
|
179
|
+
|
|
180
|
+
### 6.2 Workflow Contract
|
|
181
|
+
|
|
182
|
+
#### Invocation Pattern
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
1. Identify component requirements (interactivity, data needs)
|
|
186
|
+
2. Invoke component-type for Server vs Client decision
|
|
187
|
+
3. Invoke data-fetching for cache strategy
|
|
188
|
+
4. Invoke routing for file conventions
|
|
189
|
+
5. Invoke performance-rules for category-specific guidance
|
|
190
|
+
6. Read specific rule files from rules/ (caller's responsibility)
|
|
191
|
+
7. Implement patterns (caller's responsibility)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
#### Execution Guarantees
|
|
195
|
+
|
|
196
|
+
- Each invocation produces a complete recommendation.
|
|
197
|
+
- All decisions are independent (can be invoked in any order).
|
|
198
|
+
|
|
199
|
+
#### Failure Propagation Model
|
|
200
|
+
|
|
201
|
+
| Failure Severity | Propagation | Workflow Action |
|
|
202
|
+
|-----------------|-------------|-----------------|
|
|
203
|
+
| Invalid request type | Return error | Use supported type |
|
|
204
|
+
| Unknown rule category | Return error | Use one of 7 categories |
|
|
205
|
+
| Missing interactivity flag | Default to false (server) | Transparent |
|
|
206
|
+
|
|
207
|
+
#### Retry Boundaries
|
|
208
|
+
|
|
209
|
+
- Zero internal retries. Deterministic output.
|
|
210
|
+
|
|
211
|
+
#### Isolation Model
|
|
212
|
+
|
|
213
|
+
- Each invocation is stateless and independent.
|
|
214
|
+
|
|
215
|
+
#### Idempotency Expectations
|
|
216
|
+
|
|
217
|
+
| Operation | Idempotent | Notes |
|
|
218
|
+
|-----------|-----------|-------|
|
|
219
|
+
| Component type | Yes | Same interactivity = same type |
|
|
220
|
+
| Data fetching | Yes | Same volatility = same strategy |
|
|
221
|
+
| Routing | Yes | Fixed conventions |
|
|
222
|
+
| Performance rules | Yes | Fixed categories + files |
|
|
223
|
+
| Project structure | Yes | Fixed template |
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 7. Execution Model
|
|
228
|
+
|
|
229
|
+
### 2-Phase Lifecycle
|
|
230
|
+
|
|
231
|
+
| Phase | Action | Output |
|
|
232
|
+
|-------|--------|--------|
|
|
233
|
+
| **Classify** | Validate context, determine request type | Classification |
|
|
234
|
+
| **Recommend** | Generate type, strategy, or rule references | Complete output |
|
|
235
|
+
|
|
236
|
+
All phases synchronous. No async pipeline.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 8. Deterministic Design Principles
|
|
241
|
+
|
|
242
|
+
| Principle | Enforcement |
|
|
243
|
+
|-----------|-------------|
|
|
244
|
+
| Server-first | No directive = Server Component; explicit `'use client'` required |
|
|
245
|
+
| Binary component decision | needs_interactivity → client; else → server |
|
|
246
|
+
| Fixed data strategies | static (default), ISR (revalidate: 60), dynamic (no-store) |
|
|
247
|
+
| Fixed route files | page.tsx, layout.tsx, loading.tsx, error.tsx |
|
|
248
|
+
| Fixed CWV targets | LCP < 2.5s, INP < 200ms, CLS < 0.1 |
|
|
249
|
+
| No barrel imports | Direct imports only; barrel files break tree-shaking |
|
|
250
|
+
| Parallel fetching | No nested awaits; use Promise.all() |
|
|
251
|
+
| Suspense boundaries | Use loading.tsx for route-level, `<Suspense>` for component-level |
|
|
252
|
+
| 7 rule categories | async (5), bundle (5), server (8), client (4), rendering (10), rerender (12), js (11) |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 9. State & Idempotency Model
|
|
257
|
+
|
|
258
|
+
Stateless. Fully idempotent. No persistent state.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 10. Failure Handling Strategy
|
|
263
|
+
|
|
264
|
+
| Failure Class | Behavior | Caller Recovery |
|
|
265
|
+
|---------------|----------|-----------------|
|
|
266
|
+
| Unknown rule category | Return `ERR_UNKNOWN_CATEGORY` | Use one of 7 categories |
|
|
267
|
+
| Invalid request type | Return `ERR_INVALID_REQUEST_TYPE` | Use supported type |
|
|
268
|
+
| Invalid data volatility | Return `ERR_INVALID_VOLATILITY` | Use static, periodic, or real-time |
|
|
269
|
+
|
|
270
|
+
**Invariant:** Every failure returns a structured error. No partial recommendations.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 11. Error Taxonomy
|
|
275
|
+
|
|
276
|
+
| Code | Category | Recoverable | Description |
|
|
277
|
+
|------|----------|-------------|-------------|
|
|
278
|
+
| `ERR_INVALID_REQUEST_TYPE` | Validation | No | Request type not supported |
|
|
279
|
+
| `ERR_UNKNOWN_CATEGORY` | Validation | Yes | Rule category not one of 7 |
|
|
280
|
+
| `ERR_INVALID_VOLATILITY` | Validation | Yes | Data volatility not recognized |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## 12. Timeout & Retry Policy
|
|
285
|
+
|
|
286
|
+
| Parameter | Default | Maximum | Rationale |
|
|
287
|
+
|-----------|---------|---------|-----------|
|
|
288
|
+
| Decision generation | N/A | N/A | Synchronous; < 50ms |
|
|
289
|
+
| Internal retries | Zero | Zero | Deterministic output |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## 13. Observability & Logging Schema
|
|
294
|
+
|
|
295
|
+
### Log Entry Format
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"trace_id": "uuid",
|
|
300
|
+
"skill_name": "nextjs-pro",
|
|
301
|
+
"contract_version": "2.0.0",
|
|
302
|
+
"execution_id": "uuid",
|
|
303
|
+
"timestamp": "ISO-8601",
|
|
304
|
+
"request_type": "string",
|
|
305
|
+
"component_type": "server|client|null",
|
|
306
|
+
"data_strategy": "static|isr|dynamic|null",
|
|
307
|
+
"rule_category": "string|null",
|
|
308
|
+
"status": "success|error",
|
|
309
|
+
"error_code": "string|null",
|
|
310
|
+
"duration_ms": "number"
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Required Log Points
|
|
315
|
+
|
|
316
|
+
| Event | Log Level | Fields |
|
|
317
|
+
|-------|-----------|--------|
|
|
318
|
+
| Component type decided | INFO | component_type, directive |
|
|
319
|
+
| Data strategy selected | INFO | data_strategy, revalidate_seconds |
|
|
320
|
+
| Rules referenced | INFO | rule_category, file_count |
|
|
321
|
+
| Decision failed | ERROR | error_code, message |
|
|
322
|
+
|
|
323
|
+
### Metrics
|
|
324
|
+
|
|
325
|
+
| Metric | Type | Unit |
|
|
326
|
+
|--------|------|------|
|
|
327
|
+
| `nextjspro.decision.duration` | Histogram | ms |
|
|
328
|
+
| `nextjspro.component_type.distribution` | Counter | server vs client |
|
|
329
|
+
| `nextjspro.data_strategy.distribution` | Counter | static vs isr vs dynamic |
|
|
330
|
+
| `nextjspro.rule_category.distribution` | Counter | per category |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 14. Security & Trust Model
|
|
335
|
+
|
|
336
|
+
### Data Handling
|
|
337
|
+
|
|
338
|
+
- Next.js Pro processes no credentials, API keys, or PII.
|
|
339
|
+
- All guidance is framework-specific best practices.
|
|
340
|
+
- No network calls, no file access.
|
|
341
|
+
|
|
342
|
+
### Server Action Security
|
|
343
|
+
|
|
344
|
+
| Rule | Enforcement |
|
|
345
|
+
|------|-------------|
|
|
346
|
+
| Always validate inputs in Server Actions | Never trust client data |
|
|
347
|
+
| Use `'use server'` directive explicitly | Marks server-only code |
|
|
348
|
+
| Authenticate Server Actions | Check session before mutation |
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## 15. Scalability Model
|
|
353
|
+
|
|
354
|
+
| Dimension | Constraint | Mitigation |
|
|
355
|
+
|-----------|-----------|------------|
|
|
356
|
+
| Throughput | CPU-bound decision tree | < 50ms; scales linearly |
|
|
357
|
+
| Concurrency | Stateless invocations | Unlimited parallel |
|
|
358
|
+
| Rule storage | 60 files (~100 KB total) | Static; growth bounded |
|
|
359
|
+
| Memory per invocation | < 1 MB | No accumulation |
|
|
360
|
+
| Network | Zero network calls | No external dependency |
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 16. Concurrency Model
|
|
365
|
+
|
|
366
|
+
Fully parallel. No shared state. No coordination required.
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## 17. Resource Lifecycle Management
|
|
371
|
+
|
|
372
|
+
All resources scoped to invocation. No persistent handles.
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## 18. Performance Constraints
|
|
377
|
+
|
|
378
|
+
| Operation | P50 Target | P99 Target | Hard Limit |
|
|
379
|
+
|-----------|-----------|-----------|------------|
|
|
380
|
+
| Component type decision | < 1 ms | < 3 ms | 10 ms |
|
|
381
|
+
| Data strategy decision | < 1 ms | < 3 ms | 10 ms |
|
|
382
|
+
| Rule category listing | < 2 ms | < 5 ms | 20 ms |
|
|
383
|
+
| Full guide | < 10 ms | < 30 ms | 50 ms |
|
|
384
|
+
| Output size | ≤ 1,500 chars | ≤ 4,000 chars | 6,000 chars |
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 19. Operational Risks
|
|
389
|
+
|
|
390
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
391
|
+
|------|-----------|--------|------------|
|
|
392
|
+
| Next.js API changes | Medium | Outdated patterns | Track Next.js releases |
|
|
393
|
+
| React Server Components evolution | Medium | Convention changes | Review with major React releases |
|
|
394
|
+
| Rule file count growth | Low | Context overload | Selective loading; read only needed rules |
|
|
395
|
+
| CWV targets updated | Low | Targets misaligned | Track Google updates annually |
|
|
396
|
+
| App Router vs Pages Router confusion | High | Wrong patterns applied | Always specify App Router only |
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## 20. Compliance with skill-design-guide.md
|
|
401
|
+
|
|
402
|
+
| Requirement | Status | Evidence |
|
|
403
|
+
|-------------|--------|----------|
|
|
404
|
+
| YAML frontmatter complete | ✅ | name, description, metadata with category, version, triggers, coordinates_with, success_metrics |
|
|
405
|
+
| SKILL.md < 200 lines | ✅ | Entry point under 200 lines |
|
|
406
|
+
| Prerequisites documented | ✅ | No external dependencies (knowledge skill) |
|
|
407
|
+
| When to Use section | ✅ | Situation-based routing table |
|
|
408
|
+
| Core content matches skill type | ✅ | Expert type: decision trees, pattern guidance |
|
|
409
|
+
| Troubleshooting section | ✅ | Anti-patterns table |
|
|
410
|
+
| Related section | ✅ | Cross-links to react-architect, tailwind-kit, perf-optimizer |
|
|
411
|
+
| Content Map for multi-file | ✅ | Links to 7 rule categories + engineering-spec.md |
|
|
412
|
+
| Contract versioning | ✅ | contract_version, backward_compatibility, breaking_changes |
|
|
413
|
+
| Compliance matrix structured | ✅ | This table with ✅/❌ + evidence |
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## 21. Production Readiness Checklist
|
|
418
|
+
|
|
419
|
+
| Category | Check | Status |
|
|
420
|
+
|----------|-------|--------|
|
|
421
|
+
| **Functionality** | Server/Client binary decision tree | ✅ |
|
|
422
|
+
| **Functionality** | Data fetching (3 strategies: static, ISR, dynamic) | ✅ |
|
|
423
|
+
| **Functionality** | Route conventions (4 files) | ✅ |
|
|
424
|
+
| **Functionality** | 60+ rules across 7 categories | ✅ |
|
|
425
|
+
| **Functionality** | Core Web Vitals targets (LCP, INP, CLS) | ✅ |
|
|
426
|
+
| **Contracts** | Input/output/error schemas in pseudo-schema format | ✅ |
|
|
427
|
+
| **Contracts** | Contract versioning with semver | ✅ |
|
|
428
|
+
| **Failure** | Error taxonomy with 3 categorized codes | ✅ |
|
|
429
|
+
| **Failure** | Zero internal retries | ✅ |
|
|
430
|
+
| **Determinism** | Fixed component decision, fixed strategies, fixed rules | ✅ |
|
|
431
|
+
| **Security** | No credentials, no PII, no file access | ✅ |
|
|
432
|
+
| **Observability** | Structured log schema with 5 mandatory fields | ✅ |
|
|
433
|
+
| **Observability** | 4 metrics defined | ✅ |
|
|
434
|
+
| **Performance** | P50/P99 targets for all operations | ✅ |
|
|
435
|
+
| **Scalability** | Stateless; unlimited parallel | ✅ |
|
|
436
|
+
| **Compliance** | All skill-design-guide.md sections mapped with evidence | ✅ |
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Avoid Layout Thrashing
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: prevents forced synchronous layouts and reduces performance bottlenecks
|
|
5
|
+
tags: javascript, dom, css, performance, reflow, layout-thrashing
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Avoid Layout Thrashing
|
|
9
|
+
|
|
10
|
+
Avoid interleaving style writes with layout reads. When you read a layout property (like `offsetWidth`, `getBoundingClientRect()`, or `getComputedStyle()`) between style changes, the browser is forced to trigger a synchronous reflow.
|
|
11
|
+
|
|
12
|
+
**This is OK (browser batches style changes):**
|
|
13
|
+
```typescript
|
|
14
|
+
function updateElementStyles(element: HTMLElement) {
|
|
15
|
+
// Each line invalidates style, but browser batches the recalculation
|
|
16
|
+
element.style.width = '100px'
|
|
17
|
+
element.style.height = '200px'
|
|
18
|
+
element.style.backgroundColor = 'blue'
|
|
19
|
+
element.style.border = '1px solid black'
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Incorrect (interleaved reads and writes force reflows):**
|
|
24
|
+
```typescript
|
|
25
|
+
function layoutThrashing(element: HTMLElement) {
|
|
26
|
+
element.style.width = '100px'
|
|
27
|
+
const width = element.offsetWidth // Forces reflow
|
|
28
|
+
element.style.height = '200px'
|
|
29
|
+
const height = element.offsetHeight // Forces another reflow
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Correct (batch writes, then read once):**
|
|
34
|
+
```typescript
|
|
35
|
+
function updateElementStyles(element: HTMLElement) {
|
|
36
|
+
// Batch all writes together
|
|
37
|
+
element.style.width = '100px'
|
|
38
|
+
element.style.height = '200px'
|
|
39
|
+
element.style.backgroundColor = 'blue'
|
|
40
|
+
element.style.border = '1px solid black'
|
|
41
|
+
|
|
42
|
+
// Read after all writes are done (single reflow)
|
|
43
|
+
const { width, height } = element.getBoundingClientRect()
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Correct (batch reads, then writes):**
|
|
48
|
+
```typescript
|
|
49
|
+
function avoidThrashing(element: HTMLElement) {
|
|
50
|
+
// Read phase - all layout queries first
|
|
51
|
+
const rect1 = element.getBoundingClientRect()
|
|
52
|
+
const offsetWidth = element.offsetWidth
|
|
53
|
+
const offsetHeight = element.offsetHeight
|
|
54
|
+
|
|
55
|
+
// Write phase - all style changes after
|
|
56
|
+
element.style.width = '100px'
|
|
57
|
+
element.style.height = '200px'
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Better: use CSS classes**
|
|
62
|
+
```css
|
|
63
|
+
.highlighted-box {
|
|
64
|
+
width: 100px;
|
|
65
|
+
height: 200px;
|
|
66
|
+
background-color: blue;
|
|
67
|
+
border: 1px solid black;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
```typescript
|
|
71
|
+
function updateElementStyles(element: HTMLElement) {
|
|
72
|
+
element.classList.add('highlighted-box')
|
|
73
|
+
|
|
74
|
+
const { width, height } = element.getBoundingClientRect()
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**React example:**
|
|
79
|
+
```tsx
|
|
80
|
+
// Incorrect: interleaving style changes with layout queries
|
|
81
|
+
function Box({ isHighlighted }: { isHighlighted: boolean }) {
|
|
82
|
+
const ref = useRef<HTMLDivElement>(null)
|
|
83
|
+
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (ref.current && isHighlighted) {
|
|
86
|
+
ref.current.style.width = '100px'
|
|
87
|
+
const width = ref.current.offsetWidth // Forces layout
|
|
88
|
+
ref.current.style.height = '200px'
|
|
89
|
+
}
|
|
90
|
+
}, [isHighlighted])
|
|
91
|
+
|
|
92
|
+
return <div ref={ref}>Content</div>
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Correct: toggle class
|
|
96
|
+
function Box({ isHighlighted }: { isHighlighted: boolean }) {
|
|
97
|
+
return (
|
|
98
|
+
<div className={isHighlighted ? 'highlighted-box' : ''}>
|
|
99
|
+
Content
|
|
100
|
+
</div>
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Prefer CSS classes over inline styles when possible. CSS files are cached by the browser, and classes provide better separation of concerns and are easier to maintain.
|
|
106
|
+
|
|
107
|
+
See [this gist](https://gist.github.com/paulirish/5d52fb081b3570c81e3a) and [CSS Triggers](https://csstriggers.com/) for more information on layout-forcing operations.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cache Repeated Function Calls
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: avoid redundant computation
|
|
5
|
+
tags: javascript, cache, memoization, performance
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Cache Repeated Function Calls
|
|
9
|
+
|
|
10
|
+
Use a module-level Map to cache function results when the same function is called repeatedly with the same inputs during render.
|
|
11
|
+
|
|
12
|
+
**Incorrect (redundant computation):**
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
function ProjectList({ projects }: { projects: Project[] }) {
|
|
16
|
+
return (
|
|
17
|
+
<div>
|
|
18
|
+
{projects.map(project => {
|
|
19
|
+
// slugify() called 100+ times for same project names
|
|
20
|
+
const slug = slugify(project.name)
|
|
21
|
+
|
|
22
|
+
return <ProjectCard key={project.id} slug={slug} />
|
|
23
|
+
})}
|
|
24
|
+
</div>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Correct (cached results):**
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// Module-level cache
|
|
33
|
+
const slugifyCache = new Map<string, string>()
|
|
34
|
+
|
|
35
|
+
function cachedSlugify(text: string): string {
|
|
36
|
+
if (slugifyCache.has(text)) {
|
|
37
|
+
return slugifyCache.get(text)!
|
|
38
|
+
}
|
|
39
|
+
const result = slugify(text)
|
|
40
|
+
slugifyCache.set(text, result)
|
|
41
|
+
return result
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function ProjectList({ projects }: { projects: Project[] }) {
|
|
45
|
+
return (
|
|
46
|
+
<div>
|
|
47
|
+
{projects.map(project => {
|
|
48
|
+
// Computed only once per unique project name
|
|
49
|
+
const slug = cachedSlugify(project.name)
|
|
50
|
+
|
|
51
|
+
return <ProjectCard key={project.id} slug={slug} />
|
|
52
|
+
})}
|
|
53
|
+
</div>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Simpler pattern for single-value functions:**
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
let isLoggedInCache: boolean | null = null
|
|
62
|
+
|
|
63
|
+
function isLoggedIn(): boolean {
|
|
64
|
+
if (isLoggedInCache !== null) {
|
|
65
|
+
return isLoggedInCache
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
isLoggedInCache = document.cookie.includes('auth=')
|
|
69
|
+
return isLoggedInCache
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Clear cache when auth changes
|
|
73
|
+
function onAuthChange() {
|
|
74
|
+
isLoggedInCache = null
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Use a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.
|
|
79
|
+
|
|
80
|
+
Reference: [How we made the Vercel Dashboard twice as fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cache Property Access in Loops
|
|
3
|
+
impact: LOW-MEDIUM
|
|
4
|
+
impactDescription: reduces lookups
|
|
5
|
+
tags: javascript, loops, optimization, caching
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Cache Property Access in Loops
|
|
9
|
+
|
|
10
|
+
Cache object property lookups in hot paths.
|
|
11
|
+
|
|
12
|
+
**Incorrect (3 lookups × N iterations):**
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
for (let i = 0; i < arr.length; i++) {
|
|
16
|
+
process(obj.config.settings.value)
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Correct (1 lookup total):**
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
const value = obj.config.settings.value
|
|
24
|
+
const len = arr.length
|
|
25
|
+
for (let i = 0; i < len; i++) {
|
|
26
|
+
process(value)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
⚡ PikaKit v3.9.134
|