@vodailoc/kilo-kit-mcp 1.1.0 → 1.2.0
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/.mcp/kilo-kit.codex-windows.toml +5 -0
- package/LICENSE +190 -190
- package/QUICKSTART.md +265 -255
- package/README.md +321 -267
- package/mcp/README.md +64 -12
- package/mcp/dist/formatters.js +142 -1
- package/mcp/dist/orchestration-audit.js +20 -0
- package/mcp/dist/orchestration-memory.js +258 -0
- package/mcp/dist/orchestration-types.js +1 -0
- package/mcp/dist/orchestrator.js +222 -0
- package/mcp/dist/question-templates.js +249 -0
- package/mcp/dist/route-analytics.js +149 -0
- package/mcp/dist/router.js +75 -82
- package/mcp/dist/routing-policy-data.js +241 -0
- package/mcp/dist/routing-policy.js +145 -0
- package/mcp/dist/server.js +93 -4
- package/mcp/dist/smoke-env.js +18 -0
- package/mcp/dist/smoke.js +68 -1
- package/mcp/package.json +1 -2
- package/package.json +3 -2
- package/skills/README.md +647 -647
- package/skills/SKILLS_INDEX.md +139 -139
- package/skills/ai-media/ai-multimodal/.env.example +97 -97
- package/skills/ai-media/ai-multimodal/SKILL.md +357 -357
- package/skills/ai-media/ai-multimodal/references/audio-processing.md +373 -373
- package/skills/ai-media/ai-multimodal/references/image-generation.md +558 -558
- package/skills/ai-media/ai-multimodal/references/video-analysis.md +502 -502
- package/skills/ai-media/ai-multimodal/references/vision-understanding.md +483 -483
- package/skills/ai-media/ai-multimodal/scripts/document_converter.py +395 -395
- package/skills/ai-media/ai-multimodal/scripts/gemini_batch_process.py +480 -480
- package/skills/ai-media/ai-multimodal/scripts/media_optimizer.py +506 -506
- package/skills/ai-media/ai-multimodal/scripts/requirements.txt +26 -26
- package/skills/ai-media/ai-multimodal/scripts/tests/requirements.txt +20 -20
- package/skills/ai-media/ai-multimodal/scripts/tests/test_document_converter.py +299 -299
- package/skills/ai-media/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -362
- package/skills/ai-media/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -373
- package/skills/ai-media/media-processing/SKILL.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-encoding.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-filters.md +503 -503
- package/skills/ai-media/media-processing/references/ffmpeg-streaming.md +403 -403
- package/skills/ai-media/media-processing/references/format-compatibility.md +375 -375
- package/skills/ai-media/media-processing/references/imagemagick-batch.md +612 -612
- package/skills/ai-media/media-processing/references/imagemagick-editing.md +623 -623
- package/skills/ai-media/media-processing/scripts/batch_resize.py +342 -342
- package/skills/ai-media/media-processing/scripts/media_convert.py +311 -311
- package/skills/ai-media/media-processing/scripts/requirements.txt +24 -24
- package/skills/ai-media/media-processing/scripts/tests/requirements.txt +2 -2
- package/skills/ai-media/media-processing/scripts/tests/test_batch_resize.py +372 -372
- package/skills/ai-media/media-processing/scripts/tests/test_media_convert.py +259 -259
- package/skills/ai-media/media-processing/scripts/tests/test_video_optimize.py +397 -397
- package/skills/ai-media/media-processing/scripts/video_optimize.py +414 -414
- package/skills/ai-media/screenshot/LICENSE.txt +201 -201
- package/skills/ai-media/screenshot/SKILL.md +267 -267
- package/skills/ai-media/screenshot/agents/openai.yaml +6 -6
- package/skills/ai-media/screenshot/assets/screenshot-small.svg +5 -5
- package/skills/ai-media/screenshot/scripts/ensure_macos_permissions.sh +54 -54
- package/skills/ai-media/screenshot/scripts/macos_display_info.swift +22 -22
- package/skills/ai-media/screenshot/scripts/macos_permissions.swift +40 -40
- package/skills/ai-media/screenshot/scripts/macos_window_info.swift +126 -126
- package/skills/ai-media/screenshot/scripts/take_screenshot.ps1 +163 -163
- package/skills/ai-media/screenshot/scripts/take_screenshot.py +585 -585
- package/skills/ai-media/sora/LICENSE.txt +201 -201
- package/skills/ai-media/sora/SKILL.md +153 -153
- package/skills/ai-media/sora/agents/openai.yaml +6 -6
- package/skills/ai-media/sora/assets/sora-small.svg +4 -4
- package/skills/ai-media/sora/references/cinematic-shots.md +53 -53
- package/skills/ai-media/sora/references/cli.md +248 -248
- package/skills/ai-media/sora/references/codex-network.md +28 -28
- package/skills/ai-media/sora/references/prompting.md +137 -137
- package/skills/ai-media/sora/references/sample-prompts.md +95 -95
- package/skills/ai-media/sora/references/social-ads.md +42 -42
- package/skills/ai-media/sora/references/troubleshooting.md +58 -58
- package/skills/ai-media/sora/references/video-api.md +45 -45
- package/skills/ai-media/sora/scripts/sora.py +970 -970
- package/skills/design/aesthetic/SKILL.md +121 -121
- package/skills/design/aesthetic/assets/design-guideline-template.md +163 -163
- package/skills/design/aesthetic/assets/design-story-template.md +135 -135
- package/skills/design/aesthetic/references/design-principles.md +62 -62
- package/skills/design/aesthetic/references/design-resources.md +75 -75
- package/skills/design/aesthetic/references/micro-interactions.md +53 -53
- package/skills/design/aesthetic/references/storytelling-design.md +50 -50
- package/skills/design/figma/LICENSE.txt +202 -202
- package/skills/design/figma/SKILL.md +42 -42
- package/skills/design/figma/agents/openai.yaml +14 -14
- package/skills/design/figma/assets/figma-small.svg +3 -3
- package/skills/design/figma/assets/icon.svg +28 -28
- package/skills/design/figma/references/figma-mcp-config.md +35 -35
- package/skills/design/figma/references/figma-tools-and-prompts.md +34 -34
- package/skills/design/figma-implement-design/LICENSE.txt +202 -202
- package/skills/design/figma-implement-design/SKILL.md +264 -264
- package/skills/design/figma-implement-design/agents/openai.yaml +14 -14
- package/skills/design/figma-implement-design/assets/figma-small.svg +3 -3
- package/skills/design/figma-implement-design/assets/icon.svg +28 -28
- package/skills/design/frontend-design/SKILL.md +41 -41
- package/skills/design/frontend-design/references/animejs.md +395 -395
- package/skills/design/ui-styling/LICENSE.txt +201 -201
- package/skills/design/ui-styling/SKILL.md +321 -321
- package/skills/design/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/design/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/design/ui-styling/references/canvas-design-system.md +320 -320
- package/skills/design/ui-styling/references/shadcn-accessibility.md +471 -471
- package/skills/design/ui-styling/references/shadcn-components.md +424 -424
- package/skills/design/ui-styling/references/shadcn-theming.md +373 -373
- package/skills/design/ui-styling/references/tailwind-customization.md +483 -483
- package/skills/design/ui-styling/references/tailwind-responsive.md +382 -382
- package/skills/design/ui-styling/references/tailwind-utilities.md +455 -455
- package/skills/design/ui-styling/scripts/requirements.txt +17 -17
- package/skills/design/ui-styling/scripts/shadcn_add.py +292 -292
- package/skills/design/ui-styling/scripts/tailwind_config_gen.py +456 -456
- package/skills/design/ui-styling/scripts/tests/requirements.txt +3 -3
- package/skills/design/ui-styling/scripts/tests/test_shadcn_add.py +266 -266
- package/skills/design/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -336
- package/skills/engineering/aspnet-core/LICENSE.txt +201 -201
- package/skills/engineering/aspnet-core/SKILL.md +61 -61
- package/skills/engineering/aspnet-core/agents/openai.yaml +5 -5
- package/skills/engineering/aspnet-core/references/_sections.md +40 -40
- package/skills/engineering/aspnet-core/references/apis-minimal-and-controllers.md +81 -81
- package/skills/engineering/aspnet-core/references/data-state-and-services.md +69 -69
- package/skills/engineering/aspnet-core/references/program-and-pipeline.md +103 -103
- package/skills/engineering/aspnet-core/references/realtime-grpc-and-background-work.md +58 -58
- package/skills/engineering/aspnet-core/references/security-and-identity.md +75 -75
- package/skills/engineering/aspnet-core/references/source-map.md +43 -43
- package/skills/engineering/aspnet-core/references/stack-selection.md +63 -63
- package/skills/engineering/aspnet-core/references/testing-performance-and-operations.md +92 -92
- package/skills/engineering/aspnet-core/references/ui-blazor.md +53 -53
- package/skills/engineering/aspnet-core/references/ui-mvc.md +56 -56
- package/skills/engineering/aspnet-core/references/ui-razor-pages.md +55 -55
- package/skills/engineering/aspnet-core/references/versioning-and-upgrades.md +51 -51
- package/skills/engineering/backend-development/SKILL.md +95 -95
- package/skills/engineering/backend-development/references/backend-api-design.md +495 -495
- package/skills/engineering/backend-development/references/backend-architecture.md +454 -454
- package/skills/engineering/backend-development/references/backend-authentication.md +338 -338
- package/skills/engineering/backend-development/references/backend-code-quality.md +659 -659
- package/skills/engineering/backend-development/references/backend-debugging.md +904 -904
- package/skills/engineering/backend-development/references/backend-devops.md +494 -494
- package/skills/engineering/backend-development/references/backend-mindset.md +387 -387
- package/skills/engineering/backend-development/references/backend-performance.md +397 -397
- package/skills/engineering/backend-development/references/backend-security.md +290 -290
- package/skills/engineering/backend-development/references/backend-technologies.md +256 -256
- package/skills/engineering/backend-development/references/backend-testing.md +429 -429
- package/skills/engineering/better-auth/SKILL.md +204 -204
- package/skills/engineering/better-auth/references/advanced-features.md +553 -553
- package/skills/engineering/better-auth/references/database-integration.md +577 -577
- package/skills/engineering/better-auth/references/email-password-auth.md +416 -416
- package/skills/engineering/better-auth/references/oauth-providers.md +430 -430
- package/skills/engineering/better-auth/scripts/better_auth_init.py +521 -521
- package/skills/engineering/better-auth/scripts/requirements.txt +15 -15
- package/skills/engineering/better-auth/scripts/tests/test_better_auth_init.py +421 -421
- package/skills/engineering/code-review/SKILL.md +140 -140
- package/skills/engineering/code-review/references/code-review-reception.md +208 -208
- package/skills/engineering/code-review/references/requesting-code-review.md +104 -104
- package/skills/engineering/code-review/references/verification-before-completion.md +138 -138
- package/skills/engineering/context-engineering/SKILL.md +86 -86
- package/skills/engineering/context-engineering/references/context-compression.md +84 -84
- package/skills/engineering/context-engineering/references/context-degradation.md +93 -93
- package/skills/engineering/context-engineering/references/context-fundamentals.md +75 -75
- package/skills/engineering/context-engineering/references/context-optimization.md +82 -82
- package/skills/engineering/context-engineering/references/evaluation.md +89 -89
- package/skills/engineering/context-engineering/references/memory-systems.md +88 -88
- package/skills/engineering/context-engineering/references/multi-agent-patterns.md +90 -90
- package/skills/engineering/context-engineering/references/project-development.md +97 -97
- package/skills/engineering/context-engineering/references/tool-design.md +86 -86
- package/skills/engineering/context-engineering/scripts/compression_evaluator.py +329 -329
- package/skills/engineering/context-engineering/scripts/context_analyzer.py +294 -294
- package/skills/engineering/databases/SKILL.md +232 -232
- package/skills/engineering/databases/references/mongodb-aggregation.md +447 -447
- package/skills/engineering/databases/references/mongodb-atlas.md +465 -465
- package/skills/engineering/databases/references/mongodb-crud.md +408 -408
- package/skills/engineering/databases/references/mongodb-indexing.md +442 -442
- package/skills/engineering/databases/references/postgresql-administration.md +594 -594
- package/skills/engineering/databases/references/postgresql-performance.md +527 -527
- package/skills/engineering/databases/references/postgresql-psql-cli.md +467 -467
- package/skills/engineering/databases/references/postgresql-queries.md +475 -475
- package/skills/engineering/databases/scripts/db_backup.py +502 -502
- package/skills/engineering/databases/scripts/db_migrate.py +414 -414
- package/skills/engineering/databases/scripts/db_performance_check.py +444 -444
- package/skills/engineering/databases/scripts/requirements.txt +20 -20
- package/skills/engineering/databases/scripts/tests/requirements.txt +4 -4
- package/skills/engineering/databases/scripts/tests/test_db_backup.py +340 -340
- package/skills/engineering/databases/scripts/tests/test_db_migrate.py +277 -277
- package/skills/engineering/databases/scripts/tests/test_db_performance_check.py +370 -370
- package/skills/engineering/diagnose/SKILL.md +117 -117
- package/skills/engineering/diagnose/scripts/hitl-loop.template.sh +41 -41
- package/skills/engineering/docs-seeker/SKILL.md +207 -207
- package/skills/engineering/docs-seeker/WORKFLOWS.md +505 -505
- package/skills/engineering/docs-seeker/references/best-practices.md +632 -632
- package/skills/engineering/docs-seeker/references/documentation-sources.md +461 -461
- package/skills/engineering/docs-seeker/references/error-handling.md +621 -621
- package/skills/engineering/docs-seeker/references/limitations.md +821 -821
- package/skills/engineering/docs-seeker/references/performance.md +574 -574
- package/skills/engineering/docs-seeker/references/tool-selection.md +262 -262
- package/skills/engineering/frontend-development/SKILL.md +398 -398
- package/skills/engineering/frontend-development/resources/common-patterns.md +330 -330
- package/skills/engineering/frontend-development/resources/complete-examples.md +871 -871
- package/skills/engineering/frontend-development/resources/component-patterns.md +501 -501
- package/skills/engineering/frontend-development/resources/data-fetching.md +766 -766
- package/skills/engineering/frontend-development/resources/file-organization.md +501 -501
- package/skills/engineering/frontend-development/resources/loading-and-error-states.md +500 -500
- package/skills/engineering/frontend-development/resources/performance.md +405 -405
- package/skills/engineering/frontend-development/resources/routing-guide.md +363 -363
- package/skills/engineering/frontend-development/resources/styling-guide.md +427 -427
- package/skills/engineering/frontend-development/resources/typescript-standards.md +417 -417
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +37 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +53 -53
- package/skills/engineering/improve-codebase-architecture/SKILL.md +71 -71
- package/skills/engineering/openai-docs/LICENSE.txt +201 -201
- package/skills/engineering/openai-docs/SKILL.md +69 -69
- package/skills/engineering/openai-docs/agents/openai.yaml +14 -14
- package/skills/engineering/openai-docs/assets/openai-small.svg +3 -3
- package/skills/engineering/openai-docs/references/gpt-5p4-prompting-guide.md +433 -433
- package/skills/engineering/openai-docs/references/latest-model.md +35 -35
- package/skills/engineering/openai-docs/references/upgrading-to-gpt-5p4.md +164 -164
- package/skills/engineering/playwright/LICENSE.txt +201 -201
- package/skills/engineering/playwright/NOTICE.txt +14 -14
- package/skills/engineering/playwright/SKILL.md +147 -147
- package/skills/engineering/playwright/agents/openai.yaml +6 -6
- package/skills/engineering/playwright/assets/playwright-small.svg +3 -3
- package/skills/engineering/playwright/references/cli.md +116 -116
- package/skills/engineering/playwright/references/workflows.md +95 -95
- package/skills/engineering/playwright/scripts/playwright_cli.sh +25 -25
- package/skills/engineering/playwright-interactive/LICENSE.txt +201 -201
- package/skills/engineering/playwright-interactive/NOTICE.txt +13 -13
- package/skills/engineering/playwright-interactive/SKILL.md +689 -689
- package/skills/engineering/playwright-interactive/agents/openai.yaml +6 -6
- package/skills/engineering/playwright-interactive/assets/playwright-small.svg +3 -3
- package/skills/engineering/render-deploy/LICENSE.txt +201 -201
- package/skills/engineering/render-deploy/SKILL.md +479 -479
- package/skills/engineering/render-deploy/agents/openai.yaml +14 -14
- package/skills/engineering/render-deploy/assets/docker.yaml +62 -62
- package/skills/engineering/render-deploy/assets/go-api.yaml +35 -35
- package/skills/engineering/render-deploy/assets/nextjs-postgres.yaml +35 -35
- package/skills/engineering/render-deploy/assets/node-express.yaml +25 -25
- package/skills/engineering/render-deploy/assets/python-django.yaml +89 -89
- package/skills/engineering/render-deploy/assets/render-small.svg +3 -3
- package/skills/engineering/render-deploy/assets/static-site.yaml +54 -54
- package/skills/engineering/render-deploy/references/blueprint-spec.md +718 -718
- package/skills/engineering/render-deploy/references/codebase-analysis.md +49 -49
- package/skills/engineering/render-deploy/references/configuration-guide.md +603 -603
- package/skills/engineering/render-deploy/references/deployment-details.md +224 -224
- package/skills/engineering/render-deploy/references/direct-creation.md +113 -113
- package/skills/engineering/render-deploy/references/error-patterns.md +13 -13
- package/skills/engineering/render-deploy/references/post-deploy-checks.md +36 -36
- package/skills/engineering/render-deploy/references/runtimes.md +473 -473
- package/skills/engineering/render-deploy/references/service-types.md +450 -450
- package/skills/engineering/render-deploy/references/troubleshooting-basics.md +36 -36
- package/skills/engineering/repomix/SKILL.md +215 -215
- package/skills/engineering/repomix/references/configuration.md +211 -211
- package/skills/engineering/repomix/references/usage-patterns.md +232 -232
- package/skills/engineering/repomix/scripts/README.md +179 -179
- package/skills/engineering/repomix/scripts/repomix_batch.py +455 -455
- package/skills/engineering/repomix/scripts/repos.example.json +15 -15
- package/skills/engineering/repomix/scripts/requirements.txt +15 -15
- package/skills/engineering/repomix/scripts/tests/test_repomix_batch.py +531 -531
- package/skills/engineering/setup-matt-pocock-skills/SKILL.md +121 -121
- package/skills/engineering/setup-matt-pocock-skills/domain.md +51 -51
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +22 -22
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -23
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +19 -19
- package/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -15
- package/skills/engineering/shopify/README.md +66 -66
- package/skills/engineering/shopify/SKILL.md +319 -319
- package/skills/engineering/shopify/references/app-development.md +470 -470
- package/skills/engineering/shopify/references/extensions.md +493 -493
- package/skills/engineering/shopify/references/themes.md +498 -498
- package/skills/engineering/shopify/scripts/requirements.txt +19 -19
- package/skills/engineering/shopify/scripts/shopify_init.py +423 -423
- package/skills/engineering/shopify/scripts/tests/test_shopify_init.py +385 -385
- package/skills/engineering/tdd/SKILL.md +109 -109
- package/skills/engineering/tdd/deep-modules.md +33 -33
- package/skills/engineering/tdd/interface-design.md +31 -31
- package/skills/engineering/tdd/mocking.md +59 -59
- package/skills/engineering/tdd/refactoring.md +10 -10
- package/skills/engineering/tdd/tests.md +61 -61
- package/skills/engineering/to-issues/SKILL.md +81 -81
- package/skills/engineering/to-prd/SKILL.md +74 -74
- package/skills/engineering/triage/AGENT-BRIEF.md +168 -168
- package/skills/engineering/triage/OUT-OF-SCOPE.md +101 -101
- package/skills/engineering/triage/SKILL.md +103 -103
- package/skills/engineering/web-frameworks/SKILL.md +324 -324
- package/skills/engineering/web-frameworks/references/nextjs-app-router.md +465 -465
- package/skills/engineering/web-frameworks/references/nextjs-data-fetching.md +459 -459
- package/skills/engineering/web-frameworks/references/nextjs-optimization.md +511 -511
- package/skills/engineering/web-frameworks/references/nextjs-server-components.md +495 -495
- package/skills/engineering/web-frameworks/references/remix-icon-integration.md +603 -603
- package/skills/engineering/web-frameworks/references/turborepo-caching.md +551 -551
- package/skills/engineering/web-frameworks/references/turborepo-pipelines.md +517 -517
- package/skills/engineering/web-frameworks/references/turborepo-setup.md +542 -542
- package/skills/engineering/web-frameworks/scripts/nextjs_init.py +547 -547
- package/skills/engineering/web-frameworks/scripts/requirements.txt +16 -16
- package/skills/engineering/web-frameworks/scripts/tests/requirements.txt +3 -3
- package/skills/engineering/web-frameworks/scripts/tests/test_nextjs_init.py +319 -319
- package/skills/engineering/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -374
- package/skills/engineering/web-frameworks/scripts/turborepo_migrate.py +394 -394
- package/skills/engineering/write-a-skill/SKILL.md +117 -117
- package/skills/kilo-kit/SKILL.md +346 -346
- package/skills/kilo-kit/_template/SKILL.md +185 -185
- package/skills/kilo-kit/debugging/root-cause/SKILL.md +360 -360
- package/skills/kilo-kit/debugging/systematic/SKILL.md +339 -339
- package/skills/kilo-kit/debugging/verification/SKILL.md +424 -424
- package/skills/kilo-kit/development/backend/SKILL.md +540 -540
- package/skills/kilo-kit/development/security/SKILL.md +529 -529
- package/skills/kilo-kit/quality/code-review/SKILL.md +297 -297
- package/skills/kilo-kit/quality/testing/SKILL.md +540 -540
- package/skills/kilo-kit/references/output-formats.md +204 -204
- package/skills/kilo-kit/references/patterns.md +156 -156
- package/skills/kilo-kit/references/performance-benchmarks.md +90 -90
- package/skills/operations/chrome-devtools/SKILL.md +392 -392
- package/skills/operations/chrome-devtools/references/cdp-domains.md +694 -694
- package/skills/operations/chrome-devtools/references/performance-guide.md +940 -940
- package/skills/operations/chrome-devtools/references/puppeteer-reference.md +953 -953
- package/skills/operations/chrome-devtools/scripts/PERSISTENT-BROWSER.md +107 -107
- package/skills/operations/chrome-devtools/scripts/README.md +213 -213
- package/skills/operations/chrome-devtools/scripts/__tests__/selector.test.js +210 -210
- package/skills/operations/chrome-devtools/scripts/click.js +79 -79
- package/skills/operations/chrome-devtools/scripts/close-persistent.js +36 -36
- package/skills/operations/chrome-devtools/scripts/console.js +75 -75
- package/skills/operations/chrome-devtools/scripts/evaluate.js +49 -49
- package/skills/operations/chrome-devtools/scripts/fill.js +72 -72
- package/skills/operations/chrome-devtools/scripts/install-deps.sh +181 -181
- package/skills/operations/chrome-devtools/scripts/install.sh +83 -83
- package/skills/operations/chrome-devtools/scripts/launch-persistent.js +71 -71
- package/skills/operations/chrome-devtools/scripts/lib/browser.js +144 -144
- package/skills/operations/chrome-devtools/scripts/lib/selector.js +178 -178
- package/skills/operations/chrome-devtools/scripts/navigate.js +46 -46
- package/skills/operations/chrome-devtools/scripts/network.js +102 -102
- package/skills/operations/chrome-devtools/scripts/package-lock.json +1206 -1206
- package/skills/operations/chrome-devtools/scripts/package.json +15 -15
- package/skills/operations/chrome-devtools/scripts/performance.js +145 -145
- package/skills/operations/chrome-devtools/scripts/screenshot.js +180 -180
- package/skills/operations/chrome-devtools/scripts/snapshot.js +131 -131
- package/skills/operations/devops/.env.example +76 -76
- package/skills/operations/devops/SKILL.md +285 -285
- package/skills/operations/devops/references/browser-rendering.md +305 -305
- package/skills/operations/devops/references/cloudflare-d1-kv.md +123 -123
- package/skills/operations/devops/references/cloudflare-platform.md +271 -271
- package/skills/operations/devops/references/cloudflare-r2-storage.md +280 -280
- package/skills/operations/devops/references/cloudflare-workers-advanced.md +312 -312
- package/skills/operations/devops/references/cloudflare-workers-apis.md +309 -309
- package/skills/operations/devops/references/cloudflare-workers-basics.md +418 -418
- package/skills/operations/devops/references/docker-basics.md +297 -297
- package/skills/operations/devops/references/docker-compose.md +292 -292
- package/skills/operations/devops/references/gcloud-platform.md +297 -297
- package/skills/operations/devops/references/gcloud-services.md +304 -304
- package/skills/operations/devops/scripts/cloudflare_deploy.py +269 -269
- package/skills/operations/devops/scripts/docker_optimize.py +320 -320
- package/skills/operations/devops/scripts/requirements.txt +20 -20
- package/skills/operations/devops/scripts/tests/requirements.txt +3 -3
- package/skills/operations/devops/scripts/tests/test_cloudflare_deploy.py +285 -285
- package/skills/operations/devops/scripts/tests/test_docker_optimize.py +436 -436
- package/skills/operations/mcp-builder/LICENSE.txt +201 -201
- package/skills/operations/mcp-builder/SKILL.md +328 -328
- package/skills/operations/mcp-builder/reference/evaluation.md +601 -601
- package/skills/operations/mcp-builder/reference/mcp_best_practices.md +915 -915
- package/skills/operations/mcp-builder/reference/node_mcp_server.md +915 -915
- package/skills/operations/mcp-builder/reference/python_mcp_server.md +751 -751
- package/skills/operations/mcp-builder/scripts/connections.py +151 -151
- package/skills/operations/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/operations/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/operations/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/operations/mcp-management/README.md +219 -219
- package/skills/operations/mcp-management/SKILL.md +175 -175
- package/skills/operations/mcp-management/assets/tools.json +3043 -3043
- package/skills/operations/mcp-management/references/configuration.md +114 -114
- package/skills/operations/mcp-management/references/gemini-cli-integration.md +201 -201
- package/skills/operations/mcp-management/references/mcp-protocol.md +116 -116
- package/skills/operations/mcp-management/scripts/.env.example +10 -10
- package/skills/operations/mcp-management/scripts/cli.ts +155 -155
- package/skills/operations/mcp-management/scripts/dist/analyze-tools.js +70 -70
- package/skills/operations/mcp-management/scripts/dist/cli.js +131 -131
- package/skills/operations/mcp-management/scripts/dist/mcp-client.js +115 -115
- package/skills/operations/mcp-management/scripts/mcp-client.ts +163 -163
- package/skills/operations/mcp-management/scripts/package.json +18 -18
- package/skills/operations/mcp-management/scripts/tsconfig.json +15 -15
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -62
- package/skills/problem-solving/defense-in-depth/SKILL.md +130 -130
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -58
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -54
- package/skills/problem-solving/root-cause-tracing/SKILL.md +177 -177
- package/skills/problem-solving/root-cause-tracing/find-polluter.sh +63 -63
- package/skills/problem-solving/scale-game/SKILL.md +63 -63
- package/skills/problem-solving/sequential-thinking/README.md +118 -118
- package/skills/problem-solving/sequential-thinking/SKILL.md +93 -93
- package/skills/problem-solving/sequential-thinking/references/advanced.md +122 -122
- package/skills/problem-solving/sequential-thinking/references/examples.md +274 -274
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -76
- package/skills/problem-solving/when-stuck/SKILL.md +88 -88
- package/skills/productivity/caveman/SKILL.md +49 -49
- package/skills/productivity/grill-me/SKILL.md +10 -10
- package/skills/productivity/grill-with-docs/ADR-FORMAT.md +47 -47
- package/skills/productivity/grill-with-docs/CONTEXT-FORMAT.md +77 -77
- package/skills/productivity/grill-with-docs/SKILL.md +88 -88
- package/skills/productivity/writing-skills/graphviz-conventions.dot +171 -171
- package/skills/productivity/zoom-out/SKILL.md +7 -7
- package/skills/writing-docs/doc/LICENSE.txt +201 -201
- package/skills/writing-docs/doc/SKILL.md +80 -80
- package/skills/writing-docs/doc/agents/openai.yaml +6 -6
- package/skills/writing-docs/doc/assets/doc-small.svg +3 -3
- package/skills/writing-docs/doc/scripts/render_docx.py +296 -296
- package/skills/writing-docs/docx/LICENSE.txt +30 -30
- package/skills/writing-docs/docx/SKILL.md +196 -196
- package/skills/writing-docs/docx/docx-js.md +349 -349
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/docx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/docx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/docx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/docx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/docx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/docx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/docx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/docx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/docx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/docx/ooxml.md +609 -609
- package/skills/writing-docs/docx/scripts/__init__.py +1 -1
- package/skills/writing-docs/docx/scripts/document.py +1276 -1276
- package/skills/writing-docs/docx/scripts/templates/comments.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtended.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtensible.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsIds.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/people.xml +2 -2
- package/skills/writing-docs/docx/scripts/utilities.py +374 -374
- package/skills/writing-docs/mermaidjs-v11/SKILL.md +115 -115
- package/skills/writing-docs/mermaidjs-v11/references/cli-usage.md +228 -228
- package/skills/writing-docs/mermaidjs-v11/references/configuration.md +232 -232
- package/skills/writing-docs/mermaidjs-v11/references/diagram-types.md +315 -315
- package/skills/writing-docs/mermaidjs-v11/references/examples.md +344 -344
- package/skills/writing-docs/mermaidjs-v11/references/integration.md +310 -310
- package/skills/writing-docs/pdf/LICENSE.txt +30 -30
- package/skills/writing-docs/pdf/SKILL.md +294 -294
- package/skills/writing-docs/pdf/forms.md +205 -205
- package/skills/writing-docs/pdf/reference.md +611 -611
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes.py +70 -70
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes_test.py +226 -226
- package/skills/writing-docs/pdf/scripts/check_fillable_fields.py +12 -12
- package/skills/writing-docs/pdf/scripts/convert_pdf_to_images.py +35 -35
- package/skills/writing-docs/pdf/scripts/create_validation_image.py +41 -41
- package/skills/writing-docs/pdf/scripts/extract_form_field_info.py +152 -152
- package/skills/writing-docs/pdf/scripts/fill_fillable_fields.py +114 -114
- package/skills/writing-docs/pdf/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/skills/writing-docs/pptx/LICENSE.txt +30 -30
- package/skills/writing-docs/pptx/SKILL.md +483 -483
- package/skills/writing-docs/pptx/html2pptx.md +624 -624
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/pptx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/pptx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/pptx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/pptx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/pptx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/pptx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/pptx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/pptx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/pptx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/pptx/ooxml.md +426 -426
- package/skills/writing-docs/pptx/scripts/html2pptx.js +978 -978
- package/skills/writing-docs/pptx/scripts/inventory.py +1020 -1020
- package/skills/writing-docs/pptx/scripts/rearrange.py +231 -231
- package/skills/writing-docs/pptx/scripts/replace.py +385 -385
- package/skills/writing-docs/pptx/scripts/thumbnail.py +450 -450
- package/skills/writing-docs/slides/LICENSE.txt +201 -201
- package/skills/writing-docs/slides/SKILL.md +71 -71
- package/skills/writing-docs/slides/agents/openai.yaml +6 -6
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/code.js +104 -104
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/image.js +333 -333
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/index.js +33 -33
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/latex.js +51 -51
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout.js +643 -643
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -358
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/svg.js +36 -36
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/text.js +789 -789
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/util.js +24 -24
- package/skills/writing-docs/slides/assets/slides-small.svg +3 -3
- package/skills/writing-docs/slides/references/pptxgenjs-helpers.md +61 -61
- package/skills/writing-docs/slides/scripts/create_montage.py +300 -300
- package/skills/writing-docs/slides/scripts/detect_font.py +873 -873
- package/skills/writing-docs/slides/scripts/ensure_raster_image.py +202 -202
- package/skills/writing-docs/slides/scripts/render_slides.py +273 -273
- package/skills/writing-docs/slides/scripts/slides_test.py +201 -201
- package/skills/writing-docs/template-skill/SKILL.md +26 -26
- package/skills/writing-docs/xlsx/LICENSE.txt +30 -30
- package/skills/writing-docs/xlsx/SKILL.md +288 -288
- package/skills/writing-docs/xlsx/recalc.py +177 -177
- package/src/core/KILO_MASTER.md +448 -448
- package/src/tools/validate-skill.js +421 -421
|
@@ -1,511 +1,511 @@
|
|
|
1
|
-
# Next.js Optimization
|
|
2
|
-
|
|
3
|
-
Performance optimization techniques for images, fonts, scripts, and bundles.
|
|
4
|
-
|
|
5
|
-
## Image Optimization
|
|
6
|
-
|
|
7
|
-
### Next.js Image Component
|
|
8
|
-
|
|
9
|
-
Automatic optimization with modern formats (WebP, AVIF):
|
|
10
|
-
|
|
11
|
-
```tsx
|
|
12
|
-
import Image from 'next/image'
|
|
13
|
-
|
|
14
|
-
export default function Page() {
|
|
15
|
-
return (
|
|
16
|
-
<>
|
|
17
|
-
{/* Local image */}
|
|
18
|
-
<Image
|
|
19
|
-
src="/hero.jpg"
|
|
20
|
-
alt="Hero image"
|
|
21
|
-
width={1200}
|
|
22
|
-
height={600}
|
|
23
|
-
priority // Load immediately, no lazy loading
|
|
24
|
-
/>
|
|
25
|
-
|
|
26
|
-
{/* Remote image */}
|
|
27
|
-
<Image
|
|
28
|
-
src="https://example.com/photo.jpg"
|
|
29
|
-
alt="Photo"
|
|
30
|
-
width={800}
|
|
31
|
-
height={600}
|
|
32
|
-
quality={90} // 1-100, default 75
|
|
33
|
-
/>
|
|
34
|
-
|
|
35
|
-
{/* Responsive fill */}
|
|
36
|
-
<div style={{ position: 'relative', width: '100%', height: '400px' }}>
|
|
37
|
-
<Image
|
|
38
|
-
src="/background.jpg"
|
|
39
|
-
alt="Background"
|
|
40
|
-
fill
|
|
41
|
-
style={{ objectFit: 'cover' }}
|
|
42
|
-
sizes="100vw"
|
|
43
|
-
/>
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
{/* With blur placeholder */}
|
|
47
|
-
<Image
|
|
48
|
-
src="/profile.jpg"
|
|
49
|
-
alt="Profile"
|
|
50
|
-
width={200}
|
|
51
|
-
height={200}
|
|
52
|
-
placeholder="blur"
|
|
53
|
-
blurDataURL="data:image/jpeg;base64,..." // Or use static import
|
|
54
|
-
/>
|
|
55
|
-
</>
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Image Props Reference
|
|
61
|
-
|
|
62
|
-
**Required:**
|
|
63
|
-
- `src` - Image path (string or static import)
|
|
64
|
-
- `alt` - Alt text for accessibility
|
|
65
|
-
- `width`, `height` - Dimensions (required unless using `fill`)
|
|
66
|
-
|
|
67
|
-
**Optional:**
|
|
68
|
-
- `fill` - Fill parent container (makes width/height optional)
|
|
69
|
-
- `sizes` - Responsive sizes hint for srcset
|
|
70
|
-
- `quality` - 1-100 (default 75)
|
|
71
|
-
- `priority` - Disable lazy loading, preload image
|
|
72
|
-
- `placeholder` - 'blur' | 'empty' (default 'empty')
|
|
73
|
-
- `blurDataURL` - Data URL for blur placeholder
|
|
74
|
-
- `loading` - 'lazy' | 'eager' (default 'lazy')
|
|
75
|
-
- `style` - CSS styles
|
|
76
|
-
- `className` - CSS class
|
|
77
|
-
- `onLoad` - Callback when loaded
|
|
78
|
-
|
|
79
|
-
### Responsive Images with Sizes
|
|
80
|
-
|
|
81
|
-
```tsx
|
|
82
|
-
<Image
|
|
83
|
-
src="/hero.jpg"
|
|
84
|
-
alt="Hero"
|
|
85
|
-
fill
|
|
86
|
-
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
|
|
87
|
-
/>
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
This tells browser:
|
|
91
|
-
- Mobile (<768px): Use 100% viewport width
|
|
92
|
-
- Tablet (768-1200px): Use 50% viewport width
|
|
93
|
-
- Desktop (>1200px): Use 33% viewport width
|
|
94
|
-
|
|
95
|
-
### Static Import for Local Images
|
|
96
|
-
|
|
97
|
-
```tsx
|
|
98
|
-
import heroImage from '@/public/hero.jpg'
|
|
99
|
-
|
|
100
|
-
<Image
|
|
101
|
-
src={heroImage}
|
|
102
|
-
alt="Hero"
|
|
103
|
-
placeholder="blur" // Automatically generated
|
|
104
|
-
// No width/height needed - inferred from import
|
|
105
|
-
/>
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Remote Image Configuration
|
|
109
|
-
|
|
110
|
-
```js
|
|
111
|
-
// next.config.js
|
|
112
|
-
module.exports = {
|
|
113
|
-
images: {
|
|
114
|
-
remotePatterns: [
|
|
115
|
-
{
|
|
116
|
-
protocol: 'https',
|
|
117
|
-
hostname: 'example.com',
|
|
118
|
-
pathname: '/images/**',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
protocol: 'https',
|
|
122
|
-
hostname: 'cdn.example.com',
|
|
123
|
-
}
|
|
124
|
-
],
|
|
125
|
-
// Device sizes for srcset
|
|
126
|
-
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
|
127
|
-
// Image sizes for srcset
|
|
128
|
-
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
|
|
129
|
-
// Supported formats
|
|
130
|
-
formats: ['image/webp'],
|
|
131
|
-
// Cache optimization images for 60 days
|
|
132
|
-
minimumCacheTTL: 60 * 60 * 24 * 60,
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Font Optimization
|
|
138
|
-
|
|
139
|
-
### Google Fonts
|
|
140
|
-
|
|
141
|
-
Automatic optimization with zero layout shift:
|
|
142
|
-
|
|
143
|
-
```tsx
|
|
144
|
-
// app/layout.tsx
|
|
145
|
-
import { Inter, Roboto_Mono, Playfair_Display } from 'next/font/google'
|
|
146
|
-
|
|
147
|
-
const inter = Inter({
|
|
148
|
-
subsets: ['latin'],
|
|
149
|
-
display: 'swap',
|
|
150
|
-
variable: '--font-inter',
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
const robotoMono = Roboto_Mono({
|
|
154
|
-
subsets: ['latin'],
|
|
155
|
-
display: 'swap',
|
|
156
|
-
weight: ['400', '700'],
|
|
157
|
-
variable: '--font-roboto-mono',
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
const playfair = Playfair_Display({
|
|
161
|
-
subsets: ['latin'],
|
|
162
|
-
display: 'swap',
|
|
163
|
-
weight: ['400', '700', '900'],
|
|
164
|
-
style: ['normal', 'italic'],
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
export default function RootLayout({ children }) {
|
|
168
|
-
return (
|
|
169
|
-
<html lang="en" className={`${inter.variable} ${robotoMono.variable}`}>
|
|
170
|
-
<body className={inter.className}>{children}</body>
|
|
171
|
-
</html>
|
|
172
|
-
)
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Use CSS variables:
|
|
177
|
-
```css
|
|
178
|
-
.code {
|
|
179
|
-
font-family: var(--font-roboto-mono);
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### Local Fonts
|
|
184
|
-
|
|
185
|
-
```tsx
|
|
186
|
-
import localFont from 'next/font/local'
|
|
187
|
-
|
|
188
|
-
const myFont = localFont({
|
|
189
|
-
src: [
|
|
190
|
-
{
|
|
191
|
-
path: './fonts/my-font-regular.woff2',
|
|
192
|
-
weight: '400',
|
|
193
|
-
style: 'normal',
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
path: './fonts/my-font-bold.woff2',
|
|
197
|
-
weight: '700',
|
|
198
|
-
style: 'normal',
|
|
199
|
-
}
|
|
200
|
-
],
|
|
201
|
-
variable: '--font-my-font',
|
|
202
|
-
display: 'swap',
|
|
203
|
-
})
|
|
204
|
-
|
|
205
|
-
export default function RootLayout({ children }) {
|
|
206
|
-
return (
|
|
207
|
-
<html lang="en" className={myFont.variable}>
|
|
208
|
-
<body>{children}</body>
|
|
209
|
-
</html>
|
|
210
|
-
)
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Font Display Strategies
|
|
215
|
-
|
|
216
|
-
```tsx
|
|
217
|
-
const font = Inter({
|
|
218
|
-
display: 'swap', // Show fallback immediately, swap when loaded (recommended)
|
|
219
|
-
// display: 'optional', // Only use font if available immediately
|
|
220
|
-
// display: 'block', // Hide text until font loads (max 3s)
|
|
221
|
-
// display: 'fallback', // Show fallback briefly, swap if loaded quickly
|
|
222
|
-
// display: 'auto', // Browser default
|
|
223
|
-
})
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Script Optimization
|
|
227
|
-
|
|
228
|
-
### Script Component
|
|
229
|
-
|
|
230
|
-
Control loading behavior:
|
|
231
|
-
|
|
232
|
-
```tsx
|
|
233
|
-
import Script from 'next/script'
|
|
234
|
-
|
|
235
|
-
export default function Page() {
|
|
236
|
-
return (
|
|
237
|
-
<>
|
|
238
|
-
{/* Load after page is interactive (recommended for analytics) */}
|
|
239
|
-
<Script
|
|
240
|
-
src="https://www.googletagmanager.com/gtag/js"
|
|
241
|
-
strategy="afterInteractive"
|
|
242
|
-
/>
|
|
243
|
-
|
|
244
|
-
{/* Load while page is idle (lowest priority) */}
|
|
245
|
-
<Script
|
|
246
|
-
src="https://connect.facebook.net/en_US/sdk.js"
|
|
247
|
-
strategy="lazyOnload"
|
|
248
|
-
/>
|
|
249
|
-
|
|
250
|
-
{/* Load before page is interactive (use sparingly) */}
|
|
251
|
-
<Script
|
|
252
|
-
src="https://maps.googleapis.com/maps/api/js"
|
|
253
|
-
strategy="beforeInteractive"
|
|
254
|
-
/>
|
|
255
|
-
|
|
256
|
-
{/* Inline script with strategy */}
|
|
257
|
-
<Script id="analytics" strategy="afterInteractive">
|
|
258
|
-
{`
|
|
259
|
-
window.dataLayer = window.dataLayer || [];
|
|
260
|
-
function gtag(){dataLayer.push(arguments);}
|
|
261
|
-
gtag('js', new Date());
|
|
262
|
-
`}
|
|
263
|
-
</Script>
|
|
264
|
-
|
|
265
|
-
{/* With onLoad callback */}
|
|
266
|
-
<Script
|
|
267
|
-
src="https://example.com/sdk.js"
|
|
268
|
-
onLoad={() => console.log('Script loaded')}
|
|
269
|
-
onError={(e) => console.error('Script failed', e)}
|
|
270
|
-
/>
|
|
271
|
-
</>
|
|
272
|
-
)
|
|
273
|
-
}
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
**Strategy options:**
|
|
277
|
-
- `beforeInteractive` - Load before page interactive (blocking)
|
|
278
|
-
- `afterInteractive` - Load after page interactive (default)
|
|
279
|
-
- `lazyOnload` - Load during idle time
|
|
280
|
-
- `worker` - Load in web worker (experimental)
|
|
281
|
-
|
|
282
|
-
## Bundle Optimization
|
|
283
|
-
|
|
284
|
-
### Analyzing Bundle Size
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
# Install bundle analyzer
|
|
288
|
-
npm install @next/bundle-analyzer
|
|
289
|
-
|
|
290
|
-
# Create next.config.js wrapper
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
```js
|
|
294
|
-
// next.config.js
|
|
295
|
-
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
|
296
|
-
enabled: process.env.ANALYZE === 'true',
|
|
297
|
-
})
|
|
298
|
-
|
|
299
|
-
module.exports = withBundleAnalyzer({
|
|
300
|
-
// Your Next.js config
|
|
301
|
-
})
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
# Run analysis
|
|
306
|
-
ANALYZE=true npm run build
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Dynamic Import (Code Splitting)
|
|
310
|
-
|
|
311
|
-
Split code and load on-demand:
|
|
312
|
-
|
|
313
|
-
```tsx
|
|
314
|
-
import dynamic from 'next/dynamic'
|
|
315
|
-
|
|
316
|
-
// Dynamic import with loading state
|
|
317
|
-
const DynamicChart = dynamic(() => import('@/components/chart'), {
|
|
318
|
-
loading: () => <div>Loading chart...</div>,
|
|
319
|
-
ssr: false, // Disable SSR for this component
|
|
320
|
-
})
|
|
321
|
-
|
|
322
|
-
export default function Dashboard() {
|
|
323
|
-
return (
|
|
324
|
-
<div>
|
|
325
|
-
<h1>Dashboard</h1>
|
|
326
|
-
<DynamicChart />
|
|
327
|
-
</div>
|
|
328
|
-
)
|
|
329
|
-
}
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Named exports:
|
|
333
|
-
```tsx
|
|
334
|
-
const DynamicComponent = dynamic(
|
|
335
|
-
() => import('@/components/hello').then(mod => mod.Hello)
|
|
336
|
-
)
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
Multiple components:
|
|
340
|
-
```tsx
|
|
341
|
-
const DynamicHeader = dynamic(() => import('@/components/header'))
|
|
342
|
-
const DynamicFooter = dynamic(() => import('@/components/footer'))
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Tree Shaking
|
|
346
|
-
|
|
347
|
-
Import only what you need:
|
|
348
|
-
|
|
349
|
-
```tsx
|
|
350
|
-
// ❌ Bad - imports entire library
|
|
351
|
-
import _ from 'lodash'
|
|
352
|
-
const result = _.debounce(fn, 300)
|
|
353
|
-
|
|
354
|
-
// ✅ Good - imports only debounce
|
|
355
|
-
import debounce from 'lodash/debounce'
|
|
356
|
-
const result = debounce(fn, 300)
|
|
357
|
-
|
|
358
|
-
// ❌ Bad
|
|
359
|
-
import * as Icons from 'react-icons/fa'
|
|
360
|
-
<Icons.FaHome />
|
|
361
|
-
|
|
362
|
-
// ✅ Good
|
|
363
|
-
import { FaHome } from 'react-icons/fa'
|
|
364
|
-
<FaHome />
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## Partial Prerendering (PPR)
|
|
368
|
-
|
|
369
|
-
Experimental: Combine static and dynamic rendering in same route.
|
|
370
|
-
|
|
371
|
-
```js
|
|
372
|
-
// next.config.js
|
|
373
|
-
module.exports = {
|
|
374
|
-
experimental: {
|
|
375
|
-
ppr: true,
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
```tsx
|
|
381
|
-
// app/page.tsx
|
|
382
|
-
import { Suspense } from 'react'
|
|
383
|
-
|
|
384
|
-
// Static shell
|
|
385
|
-
export default function Page() {
|
|
386
|
-
return (
|
|
387
|
-
<div>
|
|
388
|
-
<header>Static Header</header>
|
|
389
|
-
|
|
390
|
-
{/* Dynamic content with Suspense boundary */}
|
|
391
|
-
<Suspense fallback={<div>Loading...</div>}>
|
|
392
|
-
<DynamicContent />
|
|
393
|
-
</Suspense>
|
|
394
|
-
|
|
395
|
-
<footer>Static Footer</footer>
|
|
396
|
-
</div>
|
|
397
|
-
)
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// Dynamic component
|
|
401
|
-
async function DynamicContent() {
|
|
402
|
-
const data = await fetch('https://api.example.com/data', {
|
|
403
|
-
cache: 'no-store'
|
|
404
|
-
}).then(r => r.json())
|
|
405
|
-
|
|
406
|
-
return <div>{data.content}</div>
|
|
407
|
-
}
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
Static shell loads instantly, dynamic content streams in.
|
|
411
|
-
|
|
412
|
-
## Metadata Optimization
|
|
413
|
-
|
|
414
|
-
### Static Metadata
|
|
415
|
-
|
|
416
|
-
```tsx
|
|
417
|
-
// app/page.tsx
|
|
418
|
-
import { Metadata } from 'next'
|
|
419
|
-
|
|
420
|
-
export const metadata: Metadata = {
|
|
421
|
-
title: 'My Page',
|
|
422
|
-
description: 'Page description',
|
|
423
|
-
keywords: ['next.js', 'react', 'javascript'],
|
|
424
|
-
openGraph: {
|
|
425
|
-
title: 'My Page',
|
|
426
|
-
description: 'Page description',
|
|
427
|
-
images: ['/og-image.jpg'],
|
|
428
|
-
},
|
|
429
|
-
twitter: {
|
|
430
|
-
card: 'summary_large_image',
|
|
431
|
-
title: 'My Page',
|
|
432
|
-
description: 'Page description',
|
|
433
|
-
images: ['/twitter-image.jpg'],
|
|
434
|
-
},
|
|
435
|
-
alternates: {
|
|
436
|
-
canonical: 'https://example.com/page',
|
|
437
|
-
},
|
|
438
|
-
robots: {
|
|
439
|
-
index: true,
|
|
440
|
-
follow: true,
|
|
441
|
-
},
|
|
442
|
-
}
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
### Dynamic Metadata
|
|
446
|
-
|
|
447
|
-
```tsx
|
|
448
|
-
// app/blog/[slug]/page.tsx
|
|
449
|
-
export async function generateMetadata({ params }): Promise<Metadata> {
|
|
450
|
-
const post = await getPost(params.slug)
|
|
451
|
-
|
|
452
|
-
return {
|
|
453
|
-
title: post.title,
|
|
454
|
-
description: post.excerpt,
|
|
455
|
-
openGraph: {
|
|
456
|
-
title: post.title,
|
|
457
|
-
description: post.excerpt,
|
|
458
|
-
images: [post.coverImage],
|
|
459
|
-
type: 'article',
|
|
460
|
-
publishedTime: post.publishedAt,
|
|
461
|
-
authors: [post.author.name],
|
|
462
|
-
},
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### Metadata Files
|
|
468
|
-
|
|
469
|
-
Create these files in `app/` directory:
|
|
470
|
-
|
|
471
|
-
- `favicon.ico` - Favicon
|
|
472
|
-
- `icon.png` / `icon.jpg` - App icon
|
|
473
|
-
- `apple-icon.png` - Apple touch icon
|
|
474
|
-
- `opengraph-image.png` - Open Graph image
|
|
475
|
-
- `twitter-image.png` - Twitter card image
|
|
476
|
-
- `robots.txt` - Robots file
|
|
477
|
-
- `sitemap.xml` - Sitemap
|
|
478
|
-
|
|
479
|
-
Or generate dynamically:
|
|
480
|
-
```tsx
|
|
481
|
-
// app/sitemap.ts
|
|
482
|
-
export default async function sitemap() {
|
|
483
|
-
const posts = await getPosts()
|
|
484
|
-
|
|
485
|
-
return [
|
|
486
|
-
{
|
|
487
|
-
url: 'https://example.com',
|
|
488
|
-
lastModified: new Date(),
|
|
489
|
-
},
|
|
490
|
-
...posts.map(post => ({
|
|
491
|
-
url: `https://example.com/blog/${post.slug}`,
|
|
492
|
-
lastModified: post.updatedAt,
|
|
493
|
-
}))
|
|
494
|
-
]
|
|
495
|
-
}
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
## Performance Best Practices
|
|
499
|
-
|
|
500
|
-
1. **Use Image component** - Automatic optimization, lazy loading, modern formats
|
|
501
|
-
2. **Optimize fonts** - Use next/font to eliminate layout shift
|
|
502
|
-
3. **Dynamic imports** - Code split large components and third-party libraries
|
|
503
|
-
4. **Analyze bundle** - Identify and eliminate large dependencies
|
|
504
|
-
5. **Proper caching** - Use ISR for semi-static content
|
|
505
|
-
6. **Streaming with Suspense** - Load fast content first, stream slow content
|
|
506
|
-
7. **Minimize JavaScript** - Default to Server Components
|
|
507
|
-
8. **Prefetch links** - Next.js prefetches Link components in viewport
|
|
508
|
-
9. **Use Script component** - Control third-party script loading
|
|
509
|
-
10. **Compress assets** - Enable compression in hosting platform
|
|
510
|
-
11. **Use CDN** - Deploy to edge network (Vercel, Cloudflare)
|
|
511
|
-
12. **Monitor metrics** - Track Core Web Vitals (LCP, FID, CLS)
|
|
1
|
+
# Next.js Optimization
|
|
2
|
+
|
|
3
|
+
Performance optimization techniques for images, fonts, scripts, and bundles.
|
|
4
|
+
|
|
5
|
+
## Image Optimization
|
|
6
|
+
|
|
7
|
+
### Next.js Image Component
|
|
8
|
+
|
|
9
|
+
Automatic optimization with modern formats (WebP, AVIF):
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import Image from 'next/image'
|
|
13
|
+
|
|
14
|
+
export default function Page() {
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
{/* Local image */}
|
|
18
|
+
<Image
|
|
19
|
+
src="/hero.jpg"
|
|
20
|
+
alt="Hero image"
|
|
21
|
+
width={1200}
|
|
22
|
+
height={600}
|
|
23
|
+
priority // Load immediately, no lazy loading
|
|
24
|
+
/>
|
|
25
|
+
|
|
26
|
+
{/* Remote image */}
|
|
27
|
+
<Image
|
|
28
|
+
src="https://example.com/photo.jpg"
|
|
29
|
+
alt="Photo"
|
|
30
|
+
width={800}
|
|
31
|
+
height={600}
|
|
32
|
+
quality={90} // 1-100, default 75
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
{/* Responsive fill */}
|
|
36
|
+
<div style={{ position: 'relative', width: '100%', height: '400px' }}>
|
|
37
|
+
<Image
|
|
38
|
+
src="/background.jpg"
|
|
39
|
+
alt="Background"
|
|
40
|
+
fill
|
|
41
|
+
style={{ objectFit: 'cover' }}
|
|
42
|
+
sizes="100vw"
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
{/* With blur placeholder */}
|
|
47
|
+
<Image
|
|
48
|
+
src="/profile.jpg"
|
|
49
|
+
alt="Profile"
|
|
50
|
+
width={200}
|
|
51
|
+
height={200}
|
|
52
|
+
placeholder="blur"
|
|
53
|
+
blurDataURL="data:image/jpeg;base64,..." // Or use static import
|
|
54
|
+
/>
|
|
55
|
+
</>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Image Props Reference
|
|
61
|
+
|
|
62
|
+
**Required:**
|
|
63
|
+
- `src` - Image path (string or static import)
|
|
64
|
+
- `alt` - Alt text for accessibility
|
|
65
|
+
- `width`, `height` - Dimensions (required unless using `fill`)
|
|
66
|
+
|
|
67
|
+
**Optional:**
|
|
68
|
+
- `fill` - Fill parent container (makes width/height optional)
|
|
69
|
+
- `sizes` - Responsive sizes hint for srcset
|
|
70
|
+
- `quality` - 1-100 (default 75)
|
|
71
|
+
- `priority` - Disable lazy loading, preload image
|
|
72
|
+
- `placeholder` - 'blur' | 'empty' (default 'empty')
|
|
73
|
+
- `blurDataURL` - Data URL for blur placeholder
|
|
74
|
+
- `loading` - 'lazy' | 'eager' (default 'lazy')
|
|
75
|
+
- `style` - CSS styles
|
|
76
|
+
- `className` - CSS class
|
|
77
|
+
- `onLoad` - Callback when loaded
|
|
78
|
+
|
|
79
|
+
### Responsive Images with Sizes
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
<Image
|
|
83
|
+
src="/hero.jpg"
|
|
84
|
+
alt="Hero"
|
|
85
|
+
fill
|
|
86
|
+
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
|
|
87
|
+
/>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
This tells browser:
|
|
91
|
+
- Mobile (<768px): Use 100% viewport width
|
|
92
|
+
- Tablet (768-1200px): Use 50% viewport width
|
|
93
|
+
- Desktop (>1200px): Use 33% viewport width
|
|
94
|
+
|
|
95
|
+
### Static Import for Local Images
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import heroImage from '@/public/hero.jpg'
|
|
99
|
+
|
|
100
|
+
<Image
|
|
101
|
+
src={heroImage}
|
|
102
|
+
alt="Hero"
|
|
103
|
+
placeholder="blur" // Automatically generated
|
|
104
|
+
// No width/height needed - inferred from import
|
|
105
|
+
/>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Remote Image Configuration
|
|
109
|
+
|
|
110
|
+
```js
|
|
111
|
+
// next.config.js
|
|
112
|
+
module.exports = {
|
|
113
|
+
images: {
|
|
114
|
+
remotePatterns: [
|
|
115
|
+
{
|
|
116
|
+
protocol: 'https',
|
|
117
|
+
hostname: 'example.com',
|
|
118
|
+
pathname: '/images/**',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
protocol: 'https',
|
|
122
|
+
hostname: 'cdn.example.com',
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
// Device sizes for srcset
|
|
126
|
+
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
|
|
127
|
+
// Image sizes for srcset
|
|
128
|
+
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
|
|
129
|
+
// Supported formats
|
|
130
|
+
formats: ['image/webp'],
|
|
131
|
+
// Cache optimization images for 60 days
|
|
132
|
+
minimumCacheTTL: 60 * 60 * 24 * 60,
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Font Optimization
|
|
138
|
+
|
|
139
|
+
### Google Fonts
|
|
140
|
+
|
|
141
|
+
Automatic optimization with zero layout shift:
|
|
142
|
+
|
|
143
|
+
```tsx
|
|
144
|
+
// app/layout.tsx
|
|
145
|
+
import { Inter, Roboto_Mono, Playfair_Display } from 'next/font/google'
|
|
146
|
+
|
|
147
|
+
const inter = Inter({
|
|
148
|
+
subsets: ['latin'],
|
|
149
|
+
display: 'swap',
|
|
150
|
+
variable: '--font-inter',
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
const robotoMono = Roboto_Mono({
|
|
154
|
+
subsets: ['latin'],
|
|
155
|
+
display: 'swap',
|
|
156
|
+
weight: ['400', '700'],
|
|
157
|
+
variable: '--font-roboto-mono',
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
const playfair = Playfair_Display({
|
|
161
|
+
subsets: ['latin'],
|
|
162
|
+
display: 'swap',
|
|
163
|
+
weight: ['400', '700', '900'],
|
|
164
|
+
style: ['normal', 'italic'],
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
export default function RootLayout({ children }) {
|
|
168
|
+
return (
|
|
169
|
+
<html lang="en" className={`${inter.variable} ${robotoMono.variable}`}>
|
|
170
|
+
<body className={inter.className}>{children}</body>
|
|
171
|
+
</html>
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Use CSS variables:
|
|
177
|
+
```css
|
|
178
|
+
.code {
|
|
179
|
+
font-family: var(--font-roboto-mono);
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Local Fonts
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
import localFont from 'next/font/local'
|
|
187
|
+
|
|
188
|
+
const myFont = localFont({
|
|
189
|
+
src: [
|
|
190
|
+
{
|
|
191
|
+
path: './fonts/my-font-regular.woff2',
|
|
192
|
+
weight: '400',
|
|
193
|
+
style: 'normal',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
path: './fonts/my-font-bold.woff2',
|
|
197
|
+
weight: '700',
|
|
198
|
+
style: 'normal',
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
variable: '--font-my-font',
|
|
202
|
+
display: 'swap',
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
export default function RootLayout({ children }) {
|
|
206
|
+
return (
|
|
207
|
+
<html lang="en" className={myFont.variable}>
|
|
208
|
+
<body>{children}</body>
|
|
209
|
+
</html>
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Font Display Strategies
|
|
215
|
+
|
|
216
|
+
```tsx
|
|
217
|
+
const font = Inter({
|
|
218
|
+
display: 'swap', // Show fallback immediately, swap when loaded (recommended)
|
|
219
|
+
// display: 'optional', // Only use font if available immediately
|
|
220
|
+
// display: 'block', // Hide text until font loads (max 3s)
|
|
221
|
+
// display: 'fallback', // Show fallback briefly, swap if loaded quickly
|
|
222
|
+
// display: 'auto', // Browser default
|
|
223
|
+
})
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Script Optimization
|
|
227
|
+
|
|
228
|
+
### Script Component
|
|
229
|
+
|
|
230
|
+
Control loading behavior:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
import Script from 'next/script'
|
|
234
|
+
|
|
235
|
+
export default function Page() {
|
|
236
|
+
return (
|
|
237
|
+
<>
|
|
238
|
+
{/* Load after page is interactive (recommended for analytics) */}
|
|
239
|
+
<Script
|
|
240
|
+
src="https://www.googletagmanager.com/gtag/js"
|
|
241
|
+
strategy="afterInteractive"
|
|
242
|
+
/>
|
|
243
|
+
|
|
244
|
+
{/* Load while page is idle (lowest priority) */}
|
|
245
|
+
<Script
|
|
246
|
+
src="https://connect.facebook.net/en_US/sdk.js"
|
|
247
|
+
strategy="lazyOnload"
|
|
248
|
+
/>
|
|
249
|
+
|
|
250
|
+
{/* Load before page is interactive (use sparingly) */}
|
|
251
|
+
<Script
|
|
252
|
+
src="https://maps.googleapis.com/maps/api/js"
|
|
253
|
+
strategy="beforeInteractive"
|
|
254
|
+
/>
|
|
255
|
+
|
|
256
|
+
{/* Inline script with strategy */}
|
|
257
|
+
<Script id="analytics" strategy="afterInteractive">
|
|
258
|
+
{`
|
|
259
|
+
window.dataLayer = window.dataLayer || [];
|
|
260
|
+
function gtag(){dataLayer.push(arguments);}
|
|
261
|
+
gtag('js', new Date());
|
|
262
|
+
`}
|
|
263
|
+
</Script>
|
|
264
|
+
|
|
265
|
+
{/* With onLoad callback */}
|
|
266
|
+
<Script
|
|
267
|
+
src="https://example.com/sdk.js"
|
|
268
|
+
onLoad={() => console.log('Script loaded')}
|
|
269
|
+
onError={(e) => console.error('Script failed', e)}
|
|
270
|
+
/>
|
|
271
|
+
</>
|
|
272
|
+
)
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Strategy options:**
|
|
277
|
+
- `beforeInteractive` - Load before page interactive (blocking)
|
|
278
|
+
- `afterInteractive` - Load after page interactive (default)
|
|
279
|
+
- `lazyOnload` - Load during idle time
|
|
280
|
+
- `worker` - Load in web worker (experimental)
|
|
281
|
+
|
|
282
|
+
## Bundle Optimization
|
|
283
|
+
|
|
284
|
+
### Analyzing Bundle Size
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Install bundle analyzer
|
|
288
|
+
npm install @next/bundle-analyzer
|
|
289
|
+
|
|
290
|
+
# Create next.config.js wrapper
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
```js
|
|
294
|
+
// next.config.js
|
|
295
|
+
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
|
296
|
+
enabled: process.env.ANALYZE === 'true',
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
module.exports = withBundleAnalyzer({
|
|
300
|
+
// Your Next.js config
|
|
301
|
+
})
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# Run analysis
|
|
306
|
+
ANALYZE=true npm run build
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Dynamic Import (Code Splitting)
|
|
310
|
+
|
|
311
|
+
Split code and load on-demand:
|
|
312
|
+
|
|
313
|
+
```tsx
|
|
314
|
+
import dynamic from 'next/dynamic'
|
|
315
|
+
|
|
316
|
+
// Dynamic import with loading state
|
|
317
|
+
const DynamicChart = dynamic(() => import('@/components/chart'), {
|
|
318
|
+
loading: () => <div>Loading chart...</div>,
|
|
319
|
+
ssr: false, // Disable SSR for this component
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
export default function Dashboard() {
|
|
323
|
+
return (
|
|
324
|
+
<div>
|
|
325
|
+
<h1>Dashboard</h1>
|
|
326
|
+
<DynamicChart />
|
|
327
|
+
</div>
|
|
328
|
+
)
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Named exports:
|
|
333
|
+
```tsx
|
|
334
|
+
const DynamicComponent = dynamic(
|
|
335
|
+
() => import('@/components/hello').then(mod => mod.Hello)
|
|
336
|
+
)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Multiple components:
|
|
340
|
+
```tsx
|
|
341
|
+
const DynamicHeader = dynamic(() => import('@/components/header'))
|
|
342
|
+
const DynamicFooter = dynamic(() => import('@/components/footer'))
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Tree Shaking
|
|
346
|
+
|
|
347
|
+
Import only what you need:
|
|
348
|
+
|
|
349
|
+
```tsx
|
|
350
|
+
// ❌ Bad - imports entire library
|
|
351
|
+
import _ from 'lodash'
|
|
352
|
+
const result = _.debounce(fn, 300)
|
|
353
|
+
|
|
354
|
+
// ✅ Good - imports only debounce
|
|
355
|
+
import debounce from 'lodash/debounce'
|
|
356
|
+
const result = debounce(fn, 300)
|
|
357
|
+
|
|
358
|
+
// ❌ Bad
|
|
359
|
+
import * as Icons from 'react-icons/fa'
|
|
360
|
+
<Icons.FaHome />
|
|
361
|
+
|
|
362
|
+
// ✅ Good
|
|
363
|
+
import { FaHome } from 'react-icons/fa'
|
|
364
|
+
<FaHome />
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Partial Prerendering (PPR)
|
|
368
|
+
|
|
369
|
+
Experimental: Combine static and dynamic rendering in same route.
|
|
370
|
+
|
|
371
|
+
```js
|
|
372
|
+
// next.config.js
|
|
373
|
+
module.exports = {
|
|
374
|
+
experimental: {
|
|
375
|
+
ppr: true,
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
```tsx
|
|
381
|
+
// app/page.tsx
|
|
382
|
+
import { Suspense } from 'react'
|
|
383
|
+
|
|
384
|
+
// Static shell
|
|
385
|
+
export default function Page() {
|
|
386
|
+
return (
|
|
387
|
+
<div>
|
|
388
|
+
<header>Static Header</header>
|
|
389
|
+
|
|
390
|
+
{/* Dynamic content with Suspense boundary */}
|
|
391
|
+
<Suspense fallback={<div>Loading...</div>}>
|
|
392
|
+
<DynamicContent />
|
|
393
|
+
</Suspense>
|
|
394
|
+
|
|
395
|
+
<footer>Static Footer</footer>
|
|
396
|
+
</div>
|
|
397
|
+
)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// Dynamic component
|
|
401
|
+
async function DynamicContent() {
|
|
402
|
+
const data = await fetch('https://api.example.com/data', {
|
|
403
|
+
cache: 'no-store'
|
|
404
|
+
}).then(r => r.json())
|
|
405
|
+
|
|
406
|
+
return <div>{data.content}</div>
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Static shell loads instantly, dynamic content streams in.
|
|
411
|
+
|
|
412
|
+
## Metadata Optimization
|
|
413
|
+
|
|
414
|
+
### Static Metadata
|
|
415
|
+
|
|
416
|
+
```tsx
|
|
417
|
+
// app/page.tsx
|
|
418
|
+
import { Metadata } from 'next'
|
|
419
|
+
|
|
420
|
+
export const metadata: Metadata = {
|
|
421
|
+
title: 'My Page',
|
|
422
|
+
description: 'Page description',
|
|
423
|
+
keywords: ['next.js', 'react', 'javascript'],
|
|
424
|
+
openGraph: {
|
|
425
|
+
title: 'My Page',
|
|
426
|
+
description: 'Page description',
|
|
427
|
+
images: ['/og-image.jpg'],
|
|
428
|
+
},
|
|
429
|
+
twitter: {
|
|
430
|
+
card: 'summary_large_image',
|
|
431
|
+
title: 'My Page',
|
|
432
|
+
description: 'Page description',
|
|
433
|
+
images: ['/twitter-image.jpg'],
|
|
434
|
+
},
|
|
435
|
+
alternates: {
|
|
436
|
+
canonical: 'https://example.com/page',
|
|
437
|
+
},
|
|
438
|
+
robots: {
|
|
439
|
+
index: true,
|
|
440
|
+
follow: true,
|
|
441
|
+
},
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Dynamic Metadata
|
|
446
|
+
|
|
447
|
+
```tsx
|
|
448
|
+
// app/blog/[slug]/page.tsx
|
|
449
|
+
export async function generateMetadata({ params }): Promise<Metadata> {
|
|
450
|
+
const post = await getPost(params.slug)
|
|
451
|
+
|
|
452
|
+
return {
|
|
453
|
+
title: post.title,
|
|
454
|
+
description: post.excerpt,
|
|
455
|
+
openGraph: {
|
|
456
|
+
title: post.title,
|
|
457
|
+
description: post.excerpt,
|
|
458
|
+
images: [post.coverImage],
|
|
459
|
+
type: 'article',
|
|
460
|
+
publishedTime: post.publishedAt,
|
|
461
|
+
authors: [post.author.name],
|
|
462
|
+
},
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Metadata Files
|
|
468
|
+
|
|
469
|
+
Create these files in `app/` directory:
|
|
470
|
+
|
|
471
|
+
- `favicon.ico` - Favicon
|
|
472
|
+
- `icon.png` / `icon.jpg` - App icon
|
|
473
|
+
- `apple-icon.png` - Apple touch icon
|
|
474
|
+
- `opengraph-image.png` - Open Graph image
|
|
475
|
+
- `twitter-image.png` - Twitter card image
|
|
476
|
+
- `robots.txt` - Robots file
|
|
477
|
+
- `sitemap.xml` - Sitemap
|
|
478
|
+
|
|
479
|
+
Or generate dynamically:
|
|
480
|
+
```tsx
|
|
481
|
+
// app/sitemap.ts
|
|
482
|
+
export default async function sitemap() {
|
|
483
|
+
const posts = await getPosts()
|
|
484
|
+
|
|
485
|
+
return [
|
|
486
|
+
{
|
|
487
|
+
url: 'https://example.com',
|
|
488
|
+
lastModified: new Date(),
|
|
489
|
+
},
|
|
490
|
+
...posts.map(post => ({
|
|
491
|
+
url: `https://example.com/blog/${post.slug}`,
|
|
492
|
+
lastModified: post.updatedAt,
|
|
493
|
+
}))
|
|
494
|
+
]
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
## Performance Best Practices
|
|
499
|
+
|
|
500
|
+
1. **Use Image component** - Automatic optimization, lazy loading, modern formats
|
|
501
|
+
2. **Optimize fonts** - Use next/font to eliminate layout shift
|
|
502
|
+
3. **Dynamic imports** - Code split large components and third-party libraries
|
|
503
|
+
4. **Analyze bundle** - Identify and eliminate large dependencies
|
|
504
|
+
5. **Proper caching** - Use ISR for semi-static content
|
|
505
|
+
6. **Streaming with Suspense** - Load fast content first, stream slow content
|
|
506
|
+
7. **Minimize JavaScript** - Default to Server Components
|
|
507
|
+
8. **Prefetch links** - Next.js prefetches Link components in viewport
|
|
508
|
+
9. **Use Script component** - Control third-party script loading
|
|
509
|
+
10. **Compress assets** - Enable compression in hosting platform
|
|
510
|
+
11. **Use CDN** - Deploy to edge network (Vercel, Cloudflare)
|
|
511
|
+
12. **Monitor metrics** - Track Core Web Vitals (LCP, FID, CLS)
|