aigroup-workflow 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +5 -5
- package/package.json +40 -39
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +195 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,384 +1,384 @@
|
|
|
1
|
-
# React Server Components
|
|
2
|
-
|
|
3
|
-
## Server Components (Default)
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
// app/page.tsx - Server Component by default
|
|
7
|
-
import { db } from '@/lib/db'
|
|
8
|
-
|
|
9
|
-
export default async function Page() {
|
|
10
|
-
// Data fetching in Server Component
|
|
11
|
-
const users = await db.user.findMany()
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<div>
|
|
15
|
-
<h1>Users</h1>
|
|
16
|
-
<ul>
|
|
17
|
-
{users.map(user => (
|
|
18
|
-
<li key={user.id}>{user.name}</li>
|
|
19
|
-
))}
|
|
20
|
-
</ul>
|
|
21
|
-
</div>
|
|
22
|
-
)
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Benefits of Server Components
|
|
27
|
-
|
|
28
|
-
- **Zero bundle size** - Server Components don't add JavaScript to client bundle
|
|
29
|
-
- **Direct backend access** - Query databases, read files, use secrets
|
|
30
|
-
- **Automatic code splitting** - Only Client Components add to bundle
|
|
31
|
-
- **Streaming** - Send UI progressively as data loads
|
|
32
|
-
- **No client-side waterfalls** - Fetch all data in parallel on server
|
|
33
|
-
|
|
34
|
-
## Client Components
|
|
35
|
-
|
|
36
|
-
```tsx
|
|
37
|
-
// components/counter.tsx
|
|
38
|
-
'use client' // Required directive
|
|
39
|
-
|
|
40
|
-
import { useState } from 'react'
|
|
41
|
-
|
|
42
|
-
export function Counter() {
|
|
43
|
-
const [count, setCount] = useState(0)
|
|
44
|
-
|
|
45
|
-
return (
|
|
46
|
-
<button onClick={() => setCount(count + 1)}>
|
|
47
|
-
Count: {count}
|
|
48
|
-
</button>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## When to Use Client Components
|
|
54
|
-
|
|
55
|
-
Use `'use client'` when you need:
|
|
56
|
-
- **Interactivity** - onClick, onChange, event handlers
|
|
57
|
-
- **State** - useState, useReducer
|
|
58
|
-
- **Effects** - useEffect, useLayoutEffect
|
|
59
|
-
- **Browser APIs** - localStorage, window, document
|
|
60
|
-
- **Custom hooks** - Any hook using client-only features
|
|
61
|
-
- **Class components** - Component lifecycle methods
|
|
62
|
-
|
|
63
|
-
## Composition Pattern
|
|
64
|
-
|
|
65
|
-
```tsx
|
|
66
|
-
// app/page.tsx - Server Component
|
|
67
|
-
import { ClientWrapper } from './client-wrapper'
|
|
68
|
-
import { db } from '@/lib/db'
|
|
69
|
-
|
|
70
|
-
export default async function Page() {
|
|
71
|
-
const data = await db.query()
|
|
72
|
-
|
|
73
|
-
return (
|
|
74
|
-
<div>
|
|
75
|
-
{/* Server Component content */}
|
|
76
|
-
<h1>Server Content</h1>
|
|
77
|
-
|
|
78
|
-
{/* Pass data to Client Component */}
|
|
79
|
-
<ClientWrapper initialData={data}>
|
|
80
|
-
{/* Server Component as children */}
|
|
81
|
-
<ServerSidebar />
|
|
82
|
-
</ClientWrapper>
|
|
83
|
-
</div>
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// components/client-wrapper.tsx
|
|
88
|
-
'use client'
|
|
89
|
-
|
|
90
|
-
export function ClientWrapper({
|
|
91
|
-
children,
|
|
92
|
-
initialData,
|
|
93
|
-
}: {
|
|
94
|
-
children: React.ReactNode
|
|
95
|
-
initialData: Data
|
|
96
|
-
}) {
|
|
97
|
-
const [data, setData] = useState(initialData)
|
|
98
|
-
|
|
99
|
-
return (
|
|
100
|
-
<div>
|
|
101
|
-
{/* Client Component UI */}
|
|
102
|
-
<button onClick={() => refresh()}>Refresh</button>
|
|
103
|
-
{/* Server Component children */}
|
|
104
|
-
{children}
|
|
105
|
-
</div>
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Streaming with Suspense
|
|
111
|
-
|
|
112
|
-
```tsx
|
|
113
|
-
// app/page.tsx
|
|
114
|
-
import { Suspense } from 'react'
|
|
115
|
-
import { SlowComponent } from './slow-component'
|
|
116
|
-
import { FastComponent } from './fast-component'
|
|
117
|
-
|
|
118
|
-
export default function Page() {
|
|
119
|
-
return (
|
|
120
|
-
<div>
|
|
121
|
-
{/* Renders immediately */}
|
|
122
|
-
<FastComponent />
|
|
123
|
-
|
|
124
|
-
{/* Shows fallback while loading */}
|
|
125
|
-
<Suspense fallback={<div>Loading...</div>}>
|
|
126
|
-
<SlowComponent />
|
|
127
|
-
</Suspense>
|
|
128
|
-
</div>
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// components/slow-component.tsx
|
|
133
|
-
async function getData() {
|
|
134
|
-
await new Promise(resolve => setTimeout(resolve, 3000))
|
|
135
|
-
return { data: 'Loaded!' }
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export async function SlowComponent() {
|
|
139
|
-
const data = await getData()
|
|
140
|
-
return <div>{data.data}</div>
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Parallel Data Fetching
|
|
145
|
-
|
|
146
|
-
```tsx
|
|
147
|
-
// app/dashboard/page.tsx
|
|
148
|
-
async function getUser() {
|
|
149
|
-
return fetch('https://api.example.com/user')
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
async function getPosts() {
|
|
153
|
-
return fetch('https://api.example.com/posts')
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export default async function Dashboard() {
|
|
157
|
-
// Fetch in parallel
|
|
158
|
-
const [user, posts] = await Promise.all([
|
|
159
|
-
getUser(),
|
|
160
|
-
getPosts(),
|
|
161
|
-
])
|
|
162
|
-
|
|
163
|
-
return (
|
|
164
|
-
<div>
|
|
165
|
-
<UserProfile user={user} />
|
|
166
|
-
<PostsList posts={posts} />
|
|
167
|
-
</div>
|
|
168
|
-
)
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Sequential Data Fetching
|
|
173
|
-
|
|
174
|
-
```tsx
|
|
175
|
-
// app/artist/[id]/page.tsx
|
|
176
|
-
async function getArtist(id: string) {
|
|
177
|
-
return fetch(`https://api.example.com/artists/${id}`)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async function getAlbums(artistId: string) {
|
|
181
|
-
return fetch(`https://api.example.com/artists/${artistId}/albums`)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export default async function ArtistPage({ params }: { params: { id: string } }) {
|
|
185
|
-
// Sequential: albums depends on artist
|
|
186
|
-
const artist = await getArtist(params.id)
|
|
187
|
-
const albums = await getAlbums(artist.id)
|
|
188
|
-
|
|
189
|
-
return (
|
|
190
|
-
<div>
|
|
191
|
-
<h1>{artist.name}</h1>
|
|
192
|
-
<Albums albums={albums} />
|
|
193
|
-
</div>
|
|
194
|
-
)
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Preloading Data
|
|
199
|
-
|
|
200
|
-
```tsx
|
|
201
|
-
// lib/data.ts
|
|
202
|
-
import { cache } from 'react'
|
|
203
|
-
|
|
204
|
-
export const getUser = cache(async (id: string) => {
|
|
205
|
-
return db.user.findUnique({ where: { id } })
|
|
206
|
-
})
|
|
207
|
-
|
|
208
|
-
// components/user-profile.tsx
|
|
209
|
-
export async function UserProfile({ userId }: { userId: string }) {
|
|
210
|
-
const user = await getUser(userId)
|
|
211
|
-
return <div>{user.name}</div>
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// app/page.tsx
|
|
215
|
-
import { getUser } from '@/lib/data'
|
|
216
|
-
import { UserProfile } from '@/components/user-profile'
|
|
217
|
-
|
|
218
|
-
export default async function Page() {
|
|
219
|
-
// Preload
|
|
220
|
-
getUser('123')
|
|
221
|
-
|
|
222
|
-
return (
|
|
223
|
-
<div>
|
|
224
|
-
{/* This will use cached result */}
|
|
225
|
-
<UserProfile userId="123" />
|
|
226
|
-
</div>
|
|
227
|
-
)
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
## Server Component Patterns
|
|
232
|
-
|
|
233
|
-
### Pattern: Layout with Data Fetching
|
|
234
|
-
|
|
235
|
-
```tsx
|
|
236
|
-
// app/dashboard/layout.tsx
|
|
237
|
-
import { auth } from '@/lib/auth'
|
|
238
|
-
import { db } from '@/lib/db'
|
|
239
|
-
|
|
240
|
-
export default async function DashboardLayout({
|
|
241
|
-
children,
|
|
242
|
-
}: {
|
|
243
|
-
children: React.ReactNode
|
|
244
|
-
}) {
|
|
245
|
-
const session = await auth()
|
|
246
|
-
const user = await db.user.findUnique({ where: { id: session.userId } })
|
|
247
|
-
|
|
248
|
-
return (
|
|
249
|
-
<div>
|
|
250
|
-
<Sidebar user={user} />
|
|
251
|
-
<main>{children}</main>
|
|
252
|
-
</div>
|
|
253
|
-
)
|
|
254
|
-
}
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
### Pattern: Conditional Client Components
|
|
258
|
-
|
|
259
|
-
```tsx
|
|
260
|
-
// app/page.tsx
|
|
261
|
-
import { ClientComponent } from './client-component'
|
|
262
|
-
|
|
263
|
-
export default async function Page() {
|
|
264
|
-
const data = await fetchData()
|
|
265
|
-
|
|
266
|
-
// Only render Client Component when needed
|
|
267
|
-
if (data.requiresInteractivity) {
|
|
268
|
-
return <ClientComponent data={data} />
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
return <div>{data.content}</div>
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Pattern: Server Component with Client Island
|
|
276
|
-
|
|
277
|
-
```tsx
|
|
278
|
-
// app/blog/[slug]/page.tsx
|
|
279
|
-
import { LikeButton } from './like-button'
|
|
280
|
-
|
|
281
|
-
export default async function BlogPost({ params }: { params: { slug: string } }) {
|
|
282
|
-
const post = await getPost(params.slug)
|
|
283
|
-
|
|
284
|
-
return (
|
|
285
|
-
<article>
|
|
286
|
-
{/* Server-rendered content */}
|
|
287
|
-
<h1>{post.title}</h1>
|
|
288
|
-
<div dangerouslySetInnerHTML={{ __html: post.content }} />
|
|
289
|
-
|
|
290
|
-
{/* Client island for interactivity */}
|
|
291
|
-
<LikeButton postId={post.id} initialLikes={post.likes} />
|
|
292
|
-
</article>
|
|
293
|
-
)
|
|
294
|
-
}
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
## Context in Server/Client Components
|
|
298
|
-
|
|
299
|
-
```tsx
|
|
300
|
-
// app/providers.tsx
|
|
301
|
-
'use client'
|
|
302
|
-
|
|
303
|
-
import { ThemeProvider } from 'next-themes'
|
|
304
|
-
|
|
305
|
-
export function Providers({ children }: { children: React.ReactNode }) {
|
|
306
|
-
return <ThemeProvider>{children}</ThemeProvider>
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// app/layout.tsx
|
|
310
|
-
import { Providers } from './providers'
|
|
311
|
-
|
|
312
|
-
export default function RootLayout({
|
|
313
|
-
children,
|
|
314
|
-
}: {
|
|
315
|
-
children: React.ReactNode
|
|
316
|
-
}) {
|
|
317
|
-
return (
|
|
318
|
-
<html>
|
|
319
|
-
<body>
|
|
320
|
-
<Providers>{children}</Providers>
|
|
321
|
-
</body>
|
|
322
|
-
</html>
|
|
323
|
-
)
|
|
324
|
-
}
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Third-Party Components
|
|
328
|
-
|
|
329
|
-
```tsx
|
|
330
|
-
// components/carousel-wrapper.tsx
|
|
331
|
-
'use client'
|
|
332
|
-
|
|
333
|
-
import { Carousel } from 'third-party-carousel'
|
|
334
|
-
|
|
335
|
-
export function CarouselWrapper({ items }: { items: Item[] }) {
|
|
336
|
-
return <Carousel items={items} />
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// app/page.tsx
|
|
340
|
-
import { CarouselWrapper } from '@/components/carousel-wrapper'
|
|
341
|
-
|
|
342
|
-
export default async function Page() {
|
|
343
|
-
const items = await fetchItems()
|
|
344
|
-
return <CarouselWrapper items={items} />
|
|
345
|
-
}
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
## Edge Runtime
|
|
349
|
-
|
|
350
|
-
```tsx
|
|
351
|
-
// app/api/route.ts
|
|
352
|
-
export const runtime = 'edge'
|
|
353
|
-
|
|
354
|
-
export async function GET() {
|
|
355
|
-
return new Response('Hello from Edge!')
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// app/page.tsx
|
|
359
|
-
export const runtime = 'edge'
|
|
360
|
-
|
|
361
|
-
export default async function Page() {
|
|
362
|
-
return <div>Edge-rendered page</div>
|
|
363
|
-
}
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
## Quick Reference
|
|
367
|
-
|
|
368
|
-
| Capability | Server Component | Client Component |
|
|
369
|
-
|------------|------------------|------------------|
|
|
370
|
-
| Data fetching | ✅ Yes | ⚠️ Use SWR/React Query |
|
|
371
|
-
| Backend access | ✅ Yes (DB, files) | ❌ No |
|
|
372
|
-
| Event handlers | ❌ No | ✅ Yes |
|
|
373
|
-
| State/Effects | ❌ No | ✅ Yes |
|
|
374
|
-
| Browser APIs | ❌ No | ✅ Yes |
|
|
375
|
-
| Bundle size | 0 KB | Adds to bundle |
|
|
376
|
-
| Streaming | ✅ Yes | ❌ No |
|
|
377
|
-
|
|
378
|
-
## Best Practices
|
|
379
|
-
|
|
380
|
-
1. **Default to Server Components** - Only use 'use client' when needed
|
|
381
|
-
2. **Move Client Components down** - Push them to leaves of component tree
|
|
382
|
-
3. **Pass data down** - Fetch in Server Components, pass to Client Components
|
|
383
|
-
4. **Use composition** - Nest Server Components inside Client Components via children
|
|
384
|
-
5. **Cache expensive operations** - Use React cache() for deduplication
|
|
1
|
+
# React Server Components
|
|
2
|
+
|
|
3
|
+
## Server Components (Default)
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
// app/page.tsx - Server Component by default
|
|
7
|
+
import { db } from '@/lib/db'
|
|
8
|
+
|
|
9
|
+
export default async function Page() {
|
|
10
|
+
// Data fetching in Server Component
|
|
11
|
+
const users = await db.user.findMany()
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<div>
|
|
15
|
+
<h1>Users</h1>
|
|
16
|
+
<ul>
|
|
17
|
+
{users.map(user => (
|
|
18
|
+
<li key={user.id}>{user.name}</li>
|
|
19
|
+
))}
|
|
20
|
+
</ul>
|
|
21
|
+
</div>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Benefits of Server Components
|
|
27
|
+
|
|
28
|
+
- **Zero bundle size** - Server Components don't add JavaScript to client bundle
|
|
29
|
+
- **Direct backend access** - Query databases, read files, use secrets
|
|
30
|
+
- **Automatic code splitting** - Only Client Components add to bundle
|
|
31
|
+
- **Streaming** - Send UI progressively as data loads
|
|
32
|
+
- **No client-side waterfalls** - Fetch all data in parallel on server
|
|
33
|
+
|
|
34
|
+
## Client Components
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
// components/counter.tsx
|
|
38
|
+
'use client' // Required directive
|
|
39
|
+
|
|
40
|
+
import { useState } from 'react'
|
|
41
|
+
|
|
42
|
+
export function Counter() {
|
|
43
|
+
const [count, setCount] = useState(0)
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<button onClick={() => setCount(count + 1)}>
|
|
47
|
+
Count: {count}
|
|
48
|
+
</button>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## When to Use Client Components
|
|
54
|
+
|
|
55
|
+
Use `'use client'` when you need:
|
|
56
|
+
- **Interactivity** - onClick, onChange, event handlers
|
|
57
|
+
- **State** - useState, useReducer
|
|
58
|
+
- **Effects** - useEffect, useLayoutEffect
|
|
59
|
+
- **Browser APIs** - localStorage, window, document
|
|
60
|
+
- **Custom hooks** - Any hook using client-only features
|
|
61
|
+
- **Class components** - Component lifecycle methods
|
|
62
|
+
|
|
63
|
+
## Composition Pattern
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
// app/page.tsx - Server Component
|
|
67
|
+
import { ClientWrapper } from './client-wrapper'
|
|
68
|
+
import { db } from '@/lib/db'
|
|
69
|
+
|
|
70
|
+
export default async function Page() {
|
|
71
|
+
const data = await db.query()
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<div>
|
|
75
|
+
{/* Server Component content */}
|
|
76
|
+
<h1>Server Content</h1>
|
|
77
|
+
|
|
78
|
+
{/* Pass data to Client Component */}
|
|
79
|
+
<ClientWrapper initialData={data}>
|
|
80
|
+
{/* Server Component as children */}
|
|
81
|
+
<ServerSidebar />
|
|
82
|
+
</ClientWrapper>
|
|
83
|
+
</div>
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// components/client-wrapper.tsx
|
|
88
|
+
'use client'
|
|
89
|
+
|
|
90
|
+
export function ClientWrapper({
|
|
91
|
+
children,
|
|
92
|
+
initialData,
|
|
93
|
+
}: {
|
|
94
|
+
children: React.ReactNode
|
|
95
|
+
initialData: Data
|
|
96
|
+
}) {
|
|
97
|
+
const [data, setData] = useState(initialData)
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<div>
|
|
101
|
+
{/* Client Component UI */}
|
|
102
|
+
<button onClick={() => refresh()}>Refresh</button>
|
|
103
|
+
{/* Server Component children */}
|
|
104
|
+
{children}
|
|
105
|
+
</div>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Streaming with Suspense
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
// app/page.tsx
|
|
114
|
+
import { Suspense } from 'react'
|
|
115
|
+
import { SlowComponent } from './slow-component'
|
|
116
|
+
import { FastComponent } from './fast-component'
|
|
117
|
+
|
|
118
|
+
export default function Page() {
|
|
119
|
+
return (
|
|
120
|
+
<div>
|
|
121
|
+
{/* Renders immediately */}
|
|
122
|
+
<FastComponent />
|
|
123
|
+
|
|
124
|
+
{/* Shows fallback while loading */}
|
|
125
|
+
<Suspense fallback={<div>Loading...</div>}>
|
|
126
|
+
<SlowComponent />
|
|
127
|
+
</Suspense>
|
|
128
|
+
</div>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// components/slow-component.tsx
|
|
133
|
+
async function getData() {
|
|
134
|
+
await new Promise(resolve => setTimeout(resolve, 3000))
|
|
135
|
+
return { data: 'Loaded!' }
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export async function SlowComponent() {
|
|
139
|
+
const data = await getData()
|
|
140
|
+
return <div>{data.data}</div>
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Parallel Data Fetching
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
// app/dashboard/page.tsx
|
|
148
|
+
async function getUser() {
|
|
149
|
+
return fetch('https://api.example.com/user')
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function getPosts() {
|
|
153
|
+
return fetch('https://api.example.com/posts')
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export default async function Dashboard() {
|
|
157
|
+
// Fetch in parallel
|
|
158
|
+
const [user, posts] = await Promise.all([
|
|
159
|
+
getUser(),
|
|
160
|
+
getPosts(),
|
|
161
|
+
])
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<div>
|
|
165
|
+
<UserProfile user={user} />
|
|
166
|
+
<PostsList posts={posts} />
|
|
167
|
+
</div>
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Sequential Data Fetching
|
|
173
|
+
|
|
174
|
+
```tsx
|
|
175
|
+
// app/artist/[id]/page.tsx
|
|
176
|
+
async function getArtist(id: string) {
|
|
177
|
+
return fetch(`https://api.example.com/artists/${id}`)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async function getAlbums(artistId: string) {
|
|
181
|
+
return fetch(`https://api.example.com/artists/${artistId}/albums`)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export default async function ArtistPage({ params }: { params: { id: string } }) {
|
|
185
|
+
// Sequential: albums depends on artist
|
|
186
|
+
const artist = await getArtist(params.id)
|
|
187
|
+
const albums = await getAlbums(artist.id)
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<div>
|
|
191
|
+
<h1>{artist.name}</h1>
|
|
192
|
+
<Albums albums={albums} />
|
|
193
|
+
</div>
|
|
194
|
+
)
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Preloading Data
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
// lib/data.ts
|
|
202
|
+
import { cache } from 'react'
|
|
203
|
+
|
|
204
|
+
export const getUser = cache(async (id: string) => {
|
|
205
|
+
return db.user.findUnique({ where: { id } })
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
// components/user-profile.tsx
|
|
209
|
+
export async function UserProfile({ userId }: { userId: string }) {
|
|
210
|
+
const user = await getUser(userId)
|
|
211
|
+
return <div>{user.name}</div>
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// app/page.tsx
|
|
215
|
+
import { getUser } from '@/lib/data'
|
|
216
|
+
import { UserProfile } from '@/components/user-profile'
|
|
217
|
+
|
|
218
|
+
export default async function Page() {
|
|
219
|
+
// Preload
|
|
220
|
+
getUser('123')
|
|
221
|
+
|
|
222
|
+
return (
|
|
223
|
+
<div>
|
|
224
|
+
{/* This will use cached result */}
|
|
225
|
+
<UserProfile userId="123" />
|
|
226
|
+
</div>
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Server Component Patterns
|
|
232
|
+
|
|
233
|
+
### Pattern: Layout with Data Fetching
|
|
234
|
+
|
|
235
|
+
```tsx
|
|
236
|
+
// app/dashboard/layout.tsx
|
|
237
|
+
import { auth } from '@/lib/auth'
|
|
238
|
+
import { db } from '@/lib/db'
|
|
239
|
+
|
|
240
|
+
export default async function DashboardLayout({
|
|
241
|
+
children,
|
|
242
|
+
}: {
|
|
243
|
+
children: React.ReactNode
|
|
244
|
+
}) {
|
|
245
|
+
const session = await auth()
|
|
246
|
+
const user = await db.user.findUnique({ where: { id: session.userId } })
|
|
247
|
+
|
|
248
|
+
return (
|
|
249
|
+
<div>
|
|
250
|
+
<Sidebar user={user} />
|
|
251
|
+
<main>{children}</main>
|
|
252
|
+
</div>
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Pattern: Conditional Client Components
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
// app/page.tsx
|
|
261
|
+
import { ClientComponent } from './client-component'
|
|
262
|
+
|
|
263
|
+
export default async function Page() {
|
|
264
|
+
const data = await fetchData()
|
|
265
|
+
|
|
266
|
+
// Only render Client Component when needed
|
|
267
|
+
if (data.requiresInteractivity) {
|
|
268
|
+
return <ClientComponent data={data} />
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return <div>{data.content}</div>
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Pattern: Server Component with Client Island
|
|
276
|
+
|
|
277
|
+
```tsx
|
|
278
|
+
// app/blog/[slug]/page.tsx
|
|
279
|
+
import { LikeButton } from './like-button'
|
|
280
|
+
|
|
281
|
+
export default async function BlogPost({ params }: { params: { slug: string } }) {
|
|
282
|
+
const post = await getPost(params.slug)
|
|
283
|
+
|
|
284
|
+
return (
|
|
285
|
+
<article>
|
|
286
|
+
{/* Server-rendered content */}
|
|
287
|
+
<h1>{post.title}</h1>
|
|
288
|
+
<div dangerouslySetInnerHTML={{ __html: post.content }} />
|
|
289
|
+
|
|
290
|
+
{/* Client island for interactivity */}
|
|
291
|
+
<LikeButton postId={post.id} initialLikes={post.likes} />
|
|
292
|
+
</article>
|
|
293
|
+
)
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Context in Server/Client Components
|
|
298
|
+
|
|
299
|
+
```tsx
|
|
300
|
+
// app/providers.tsx
|
|
301
|
+
'use client'
|
|
302
|
+
|
|
303
|
+
import { ThemeProvider } from 'next-themes'
|
|
304
|
+
|
|
305
|
+
export function Providers({ children }: { children: React.ReactNode }) {
|
|
306
|
+
return <ThemeProvider>{children}</ThemeProvider>
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// app/layout.tsx
|
|
310
|
+
import { Providers } from './providers'
|
|
311
|
+
|
|
312
|
+
export default function RootLayout({
|
|
313
|
+
children,
|
|
314
|
+
}: {
|
|
315
|
+
children: React.ReactNode
|
|
316
|
+
}) {
|
|
317
|
+
return (
|
|
318
|
+
<html>
|
|
319
|
+
<body>
|
|
320
|
+
<Providers>{children}</Providers>
|
|
321
|
+
</body>
|
|
322
|
+
</html>
|
|
323
|
+
)
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Third-Party Components
|
|
328
|
+
|
|
329
|
+
```tsx
|
|
330
|
+
// components/carousel-wrapper.tsx
|
|
331
|
+
'use client'
|
|
332
|
+
|
|
333
|
+
import { Carousel } from 'third-party-carousel'
|
|
334
|
+
|
|
335
|
+
export function CarouselWrapper({ items }: { items: Item[] }) {
|
|
336
|
+
return <Carousel items={items} />
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// app/page.tsx
|
|
340
|
+
import { CarouselWrapper } from '@/components/carousel-wrapper'
|
|
341
|
+
|
|
342
|
+
export default async function Page() {
|
|
343
|
+
const items = await fetchItems()
|
|
344
|
+
return <CarouselWrapper items={items} />
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Edge Runtime
|
|
349
|
+
|
|
350
|
+
```tsx
|
|
351
|
+
// app/api/route.ts
|
|
352
|
+
export const runtime = 'edge'
|
|
353
|
+
|
|
354
|
+
export async function GET() {
|
|
355
|
+
return new Response('Hello from Edge!')
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// app/page.tsx
|
|
359
|
+
export const runtime = 'edge'
|
|
360
|
+
|
|
361
|
+
export default async function Page() {
|
|
362
|
+
return <div>Edge-rendered page</div>
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Quick Reference
|
|
367
|
+
|
|
368
|
+
| Capability | Server Component | Client Component |
|
|
369
|
+
|------------|------------------|------------------|
|
|
370
|
+
| Data fetching | ✅ Yes | ⚠️ Use SWR/React Query |
|
|
371
|
+
| Backend access | ✅ Yes (DB, files) | ❌ No |
|
|
372
|
+
| Event handlers | ❌ No | ✅ Yes |
|
|
373
|
+
| State/Effects | ❌ No | ✅ Yes |
|
|
374
|
+
| Browser APIs | ❌ No | ✅ Yes |
|
|
375
|
+
| Bundle size | 0 KB | Adds to bundle |
|
|
376
|
+
| Streaming | ✅ Yes | ❌ No |
|
|
377
|
+
|
|
378
|
+
## Best Practices
|
|
379
|
+
|
|
380
|
+
1. **Default to Server Components** - Only use 'use client' when needed
|
|
381
|
+
2. **Move Client Components down** - Push them to leaves of component tree
|
|
382
|
+
3. **Pass data down** - Fetch in Server Components, pass to Client Components
|
|
383
|
+
4. **Use composition** - Nest Server Components inside Client Components via children
|
|
384
|
+
5. **Cache expensive operations** - Use React cache() for deduplication
|