@jhm1909/ag-kit 0.1.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/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Observability & Security
|
|
2
|
+
|
|
3
|
+
## Observability (The 3 Pillars)
|
|
4
|
+
|
|
5
|
+
### 1. Logs
|
|
6
|
+
|
|
7
|
+
- **Structured Logging**: JSON over plain text.
|
|
8
|
+
- Bad: `console.log("User login failed for " + user)`
|
|
9
|
+
- Good: `logger.error({ event: "login_failed", user_id: 123 })`
|
|
10
|
+
- **Aggregation**: ELK Stack, Splunk, Datadog Logs.
|
|
11
|
+
|
|
12
|
+
### 2. Metrics
|
|
13
|
+
|
|
14
|
+
- **Golden Signals**:
|
|
15
|
+
- **Latency**: Time it takes to serve a request.
|
|
16
|
+
- **Traffic**: Demand placed on the system.
|
|
17
|
+
- **Errors**: Rate of requests failing.
|
|
18
|
+
- **Saturation**: How "full" the service is.
|
|
19
|
+
- **Tools**: Prometheus (collection) + Grafana (visualization).
|
|
20
|
+
|
|
21
|
+
### 3. Traces
|
|
22
|
+
|
|
23
|
+
- **Distributed Tracing**: Tracking a request across microservices.
|
|
24
|
+
- **Tools**: OpenTelemetry (Standard), Jaeger, Zipkin.
|
|
25
|
+
|
|
26
|
+
## Security (DevSecOps)
|
|
27
|
+
|
|
28
|
+
### Pipeline Integration
|
|
29
|
+
|
|
30
|
+
1. **SAST (Static Application Security Testing)**: Scan source code.
|
|
31
|
+
- _Tools_: SonarQube, CodeQL.
|
|
32
|
+
2. **SCA (Software Composition Analysis)**: Scan dependencies.
|
|
33
|
+
- _Tools_: `npm audit`, Snyk, Dependabot.
|
|
34
|
+
3. **Container Scanning**:
|
|
35
|
+
- _Tools_: Trivy, Clair.
|
|
36
|
+
4. **DAST (Dynamic Application Security Testing)**: Scan running app.
|
|
37
|
+
- _Tools_: OWASP ZAP.
|
|
38
|
+
|
|
39
|
+
### Secret Management
|
|
40
|
+
|
|
41
|
+
- **Vault Strategy**:
|
|
42
|
+
- **Local**: `.env` (gitignored).
|
|
43
|
+
- **CI/CD**: Repo Secrets.
|
|
44
|
+
- **Runtime**: AWS Secrets Manager, HashiCorp Vault.
|
|
45
|
+
- **Scanning**: Use `git-secrets` or TruffleHog to prevent leaks.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Platform: Vercel & Supabase
|
|
2
|
+
|
|
3
|
+
## CI/CD Pipeline (GitHub Actions)
|
|
4
|
+
|
|
5
|
+
1. **Pull Request**:
|
|
6
|
+
- `npm run lint`
|
|
7
|
+
- `npm run typecheck`
|
|
8
|
+
- `npm run test:unit`
|
|
9
|
+
- Vercel Preview Deployment (Automatic)
|
|
10
|
+
|
|
11
|
+
2. **Merge to Main**:
|
|
12
|
+
- Supabase Migration (`supabase migration up`)
|
|
13
|
+
- Vercel Production Deployment
|
|
14
|
+
|
|
15
|
+
## Secrets
|
|
16
|
+
|
|
17
|
+
- **Required**: `NEXT_PUBLIC_SUPABASE_URL`, `SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY` (CI only), `DATABASE_URL`.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-developer
|
|
3
|
+
description: >
|
|
4
|
+
Foundation for all frontend development. Use when implementing UI code,
|
|
5
|
+
optimizing performance, or ensuring accessibility.
|
|
6
|
+
Includes Vercel React performance rules and composition patterns.
|
|
7
|
+
license: MIT
|
|
8
|
+
compatibility: Claude Code, Cursor, Gemini CLI, GitHub Copilot
|
|
9
|
+
metadata:
|
|
10
|
+
author: jhm1909
|
|
11
|
+
version: "4.0.0"
|
|
12
|
+
domain: web
|
|
13
|
+
estimated_tokens: 5000
|
|
14
|
+
sources:
|
|
15
|
+
- vercel-labs/agent-skills (react-best-practices, composition-patterns)
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Frontend Developer
|
|
19
|
+
|
|
20
|
+
Foundation skill for web frontend development. Framework-agnostic patterns for performance, accessibility, and code quality.
|
|
21
|
+
|
|
22
|
+
## Knowledge Graph
|
|
23
|
+
|
|
24
|
+
- **extends**: none (base skill)
|
|
25
|
+
- **requires**: []
|
|
26
|
+
- **suggests**: []
|
|
27
|
+
- **conflicts**: []
|
|
28
|
+
- **enhances**: [[designer]] (implementation of designs)
|
|
29
|
+
- **moc**: [[web-development-moc]]
|
|
30
|
+
|
|
31
|
+
## ?�� THE GOLDEN RULE: "Quote First"
|
|
32
|
+
|
|
33
|
+
**You must NEVER write code without first citing your source.**
|
|
34
|
+
|
|
35
|
+
Before implementing:
|
|
36
|
+
1. **Locate** authoritative documentation
|
|
37
|
+
2. **Quote** the specific section justifying your decision
|
|
38
|
+
3. **Implement** strictly according to that quote
|
|
39
|
+
|
|
40
|
+
_If no source found, PAUSE and `search_web` or ask._
|
|
41
|
+
|
|
42
|
+
## ?�� Core Philosophy
|
|
43
|
+
|
|
44
|
+
1. **Zero-Bundle Budget** ??Every kilobyte justifies existence
|
|
45
|
+
2. **Hydration is Overhead** ??Static when possible
|
|
46
|
+
3. **User Waits for Nothing** ??Optimistic UI, non-blocking main thread
|
|
47
|
+
4. **Accessibility is NOT Optional** ??`<div onClick>` is a bug
|
|
48
|
+
|
|
49
|
+
## Framework Specializations
|
|
50
|
+
|
|
51
|
+
| Framework | Skill | Relationship |
|
|
52
|
+
|-----------|-------|--------------|
|
|
53
|
+
| React / Next.js | `react-nextjs/` | **extends** this skill |
|
|
54
|
+
| Vue / Nuxt | [[vue-developer]] | **extends** this skill |
|
|
55
|
+
| Angular | [[angular-developer]] | **extends** this skill |
|
|
56
|
+
| Svelte / Solid / Qwik | [[modern-signals]] | **extends** this skill |
|
|
57
|
+
|
|
58
|
+
## Capability Add-ons
|
|
59
|
+
|
|
60
|
+
Add these to any frontend specialization:
|
|
61
|
+
|
|
62
|
+
| Capability | Location | Use For |
|
|
63
|
+
|------------|----------|---------|
|
|
64
|
+
| 3D Graphics | `threejs/` | WebGL, 3D product showcases |
|
|
65
|
+
| Video Generation | [[remotion-best-practices]] | Programmatic video |
|
|
66
|
+
| Animations | [[framer-motion]] | Complex UI animations |
|
|
67
|
+
| Styling | [[tailwind-setup]] | Utility-first CSS |
|
|
68
|
+
|
|
69
|
+
## Dynamic Stack Loading
|
|
70
|
+
|
|
71
|
+
Load framework-specific guides as needed:
|
|
72
|
+
|
|
73
|
+
| When User Needs | Load This |
|
|
74
|
+
|:----------------|:----------|
|
|
75
|
+
| Next.js App Router patterns | `react-nextjs/README.md` |
|
|
76
|
+
| 3D graphics, WebGL | `threejs/README.md` |
|
|
77
|
+
| Tailwind CSS setup | `tailwind-setup/README.md` |
|
|
78
|
+
|
|
79
|
+
### Example Workflows
|
|
80
|
+
|
|
81
|
+
**Next.js Project:**
|
|
82
|
+
```
|
|
83
|
+
User: "Build a Next.js app with App Router"
|
|
84
|
+
??Load frontend-developer/react-nextjs/README.md
|
|
85
|
+
??Follow Server Components patterns
|
|
86
|
+
??Implement loading.tsx, error.tsx
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**3D Product Viewer:**
|
|
90
|
+
```
|
|
91
|
+
User: "Add a 3D model viewer to my React app"
|
|
92
|
+
??Load frontend-developer/threejs/README.md
|
|
93
|
+
??Set up React Three Fiber
|
|
94
|
+
??Configure Canvas, lights, controls
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Quick Rules
|
|
98
|
+
|
|
99
|
+
| Aspect | Rule |
|
|
100
|
+
|--------|------|
|
|
101
|
+
| Performance | Check Web Vitals after every change |
|
|
102
|
+
| Accessibility | All images need `alt`, interactive elements need focus |
|
|
103
|
+
| Bundles | Code-split by route, lazy load below fold |
|
|
104
|
+
| Images | Use modern formats (WebP, AVIF), provide fallbacks |
|
|
105
|
+
| React Perf | Eliminate waterfalls, no barrel imports (Vercel rules) |
|
|
106
|
+
| Composition | Compound components over boolean props (Vercel patterns) |
|
|
107
|
+
|
|
108
|
+
## References
|
|
109
|
+
|
|
110
|
+
| Reference | Purpose |
|
|
111
|
+
|:----------|:--------|
|
|
112
|
+
| `react_performance_rules.md` | 65 Vercel React/Next.js perf rules (8 categories) |
|
|
113
|
+
| `composition_patterns.md` | React composition patterns (Vercel) |
|
|
114
|
+
|
|
115
|
+
## Related Skills
|
|
116
|
+
|
|
117
|
+
- [[react-nextjs]] ??React & Next.js specific
|
|
118
|
+
- [[vue-developer]] ??Vue & Nuxt specific
|
|
119
|
+
- [[backend-developer]] ??When building fullstack
|
|
120
|
+
- [[designer]] ??Design system implementation
|
|
121
|
+
- [[qa-tester]] ??E2E testing
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
*Part of [[web-development-moc]] | Base skill for all frontend work*
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# React & Next.js
|
|
2
|
+
|
|
3
|
+
Next.js App Router and React Server Components best practices.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use this guide when:
|
|
8
|
+
- Building with Next.js App Router (app/ directory)
|
|
9
|
+
- Deciding between Server vs Client Components
|
|
10
|
+
- Implementing data fetching, caching, or mutations
|
|
11
|
+
- Handling loading states and errors
|
|
12
|
+
- Working with Server Actions
|
|
13
|
+
|
|
14
|
+
## Core Philosophy
|
|
15
|
+
|
|
16
|
+
1. **Server Components First** — Default to RSC, `'use client'` is the exception
|
|
17
|
+
2. **Colocation** — Keep related code close (components, tests, styles)
|
|
18
|
+
3. **Progressive Enhancement** — Core works without JS
|
|
19
|
+
|
|
20
|
+
## Server vs Client Components
|
|
21
|
+
|
|
22
|
+
| Use Server Component | Use Client Component |
|
|
23
|
+
|:---------------------|:---------------------|
|
|
24
|
+
| Data fetching | Event handlers (`onClick`) |
|
|
25
|
+
| Backend resources (`fs`, DB) | Browser APIs |
|
|
26
|
+
| Sensitive logic (tokens, keys) | `useState`, `useEffect` |
|
|
27
|
+
| Large dependencies | Hooks requiring DOM |
|
|
28
|
+
|
|
29
|
+
## Quick Rules
|
|
30
|
+
|
|
31
|
+
| Context | Implementation |
|
|
32
|
+
|:--------|:---------------|
|
|
33
|
+
| Data fetching | Server Components + `fetch`, or Server Actions |
|
|
34
|
+
| Forms | Server Actions + `useFormStatus` |
|
|
35
|
+
| Images | Always `next/image` |
|
|
36
|
+
| Fonts | Always `next/font` |
|
|
37
|
+
| Routes | File-based in `app/` directory |
|
|
38
|
+
| Metadata | Export `metadata` object |
|
|
39
|
+
|
|
40
|
+
## Common Patterns
|
|
41
|
+
|
|
42
|
+
### Loading States
|
|
43
|
+
```tsx
|
|
44
|
+
// app/posts/loading.tsx — Automatic loading UI
|
|
45
|
+
export default function Loading() {
|
|
46
|
+
return <PostSkeleton />;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Error Boundaries
|
|
51
|
+
```tsx
|
|
52
|
+
// app/posts/error.tsx — Automatic error handling
|
|
53
|
+
'use client';
|
|
54
|
+
export default function Error({ error, reset }) {
|
|
55
|
+
return <ErrorUI error={error} retry={reset} />;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Server Actions
|
|
60
|
+
```tsx
|
|
61
|
+
// Server action in component or separate file
|
|
62
|
+
async function createPost(formData: FormData) {
|
|
63
|
+
'use server';
|
|
64
|
+
// Mutate data, revalidate cache
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Conflicting Patterns
|
|
69
|
+
|
|
70
|
+
| ❌ Avoid | ✅ Use Instead |
|
|
71
|
+
|:---------|:---------------|
|
|
72
|
+
| `useEffect` + `fetch` | Server Component + `fetch` |
|
|
73
|
+
| Manual `<head>` | `metadata` export |
|
|
74
|
+
| `pages/_app.tsx` | `app/layout.tsx` |
|
|
75
|
+
| `getServerSideProps` | Server Component |
|
|
76
|
+
| `getStaticProps` | `fetch` with `cache: 'force-cache'` |
|
|
77
|
+
|
|
78
|
+
## Extensions
|
|
79
|
+
|
|
80
|
+
- **3D/Three.js** → Load `threejs` capability for 3D product viewers
|
|
81
|
+
- **Video** → Load `remotion-best-practices` for programmatic video
|
|
82
|
+
- **Auth** → Use `next-auth` or `clerk`
|
|
83
|
+
- **Database** → Use `prisma` or `drizzle`
|
|
84
|
+
|
|
85
|
+
## Triggers
|
|
86
|
+
|
|
87
|
+
- `next/router|next/navigation|next/headers` pattern detected
|
|
88
|
+
- `app/layout.tsx|app/page.tsx|app/loading.tsx` files present
|
|
89
|
+
- `next.config.(js|ts|mjs)` file exists
|
|
90
|
+
- `next` dependency in package.json
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Modern Angular Architecture
|
|
2
|
+
|
|
3
|
+
**Status**: Definitive Guide
|
|
4
|
+
**Stack**: Angular 17+
|
|
5
|
+
|
|
6
|
+
## 🏗 Architecture: Standalone & Zone-less
|
|
7
|
+
|
|
8
|
+
### 1. Standalone Components
|
|
9
|
+
|
|
10
|
+
- **Ban**: `NgModule` (unless for legacy libs).
|
|
11
|
+
- **Enforce**: `standalone: true` in all components, directives, and pipes.
|
|
12
|
+
- **Why**: Tree-shaking, easier testing, simplified learning curve.
|
|
13
|
+
|
|
14
|
+
### 2. Signals (State Management)
|
|
15
|
+
|
|
16
|
+
- **Signals over Observables**: Use Signals for synchronous state. Use RxJS ONLY for complex asynchronous event streams (debounce, switchMap).
|
|
17
|
+
- **Ban**: `Zone.js` (eventually). Prepare for zoneless by using `ChangeDetectionStrategy.OnPush` everywhere.
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// ✅ GOOD: Signal
|
|
21
|
+
@Component({ ... changeDetection: ChangeDetectionStrategy.OnPush })
|
|
22
|
+
export class Counter {
|
|
23
|
+
count = signal(0);
|
|
24
|
+
double = computed(() => this.count() * 2);
|
|
25
|
+
|
|
26
|
+
increment() {
|
|
27
|
+
this.count.update(c => c + 1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 3. Control Flow Syntax
|
|
33
|
+
|
|
34
|
+
- **Use**: `@if`, `@for`, `@switch`.
|
|
35
|
+
- **Ban**: `*ngIf`, `*ngFor` (legacy structural directives).
|
|
36
|
+
|
|
37
|
+
## ⚡ Performance Patterns
|
|
38
|
+
|
|
39
|
+
### 1. Deferrable Views
|
|
40
|
+
|
|
41
|
+
- Use `@defer` to lazy load components without routing.
|
|
42
|
+
- Criteria: `@defer (on viewport)` for below-the-fold content.
|
|
43
|
+
|
|
44
|
+
### 2. Hydration
|
|
45
|
+
|
|
46
|
+
- Enable Client Hydration in `app.config.ts`.
|
|
47
|
+
- Avoid direct DOM manipulation which breaks hydration.
|
|
48
|
+
|
|
49
|
+
## 🧪 Testing
|
|
50
|
+
|
|
51
|
+
- **Harnesses**: Use Component Harnesses for robust tests.
|
|
52
|
+
- **Signals**: Test signals by verifying computed outputs.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# React Composition Patterns
|
|
2
|
+
|
|
3
|
+
> Source: Vercel Engineering — composition-patterns skill
|
|
4
|
+
|
|
5
|
+
Patterns for building flexible, maintainable React components at scale.
|
|
6
|
+
|
|
7
|
+
## Core Principle
|
|
8
|
+
**Composition over boolean proliferation.** If you're adding a boolean prop, stop — compose instead.
|
|
9
|
+
|
|
10
|
+
## Architecture (HIGH Priority)
|
|
11
|
+
|
|
12
|
+
### Avoid Boolean Props
|
|
13
|
+
❌ `<Modal isFullscreen isDismissible hasOverlay />`
|
|
14
|
+
✅ Compose: `<Modal.Fullscreen> <Modal.Dismissible> <Modal.Overlay>`
|
|
15
|
+
|
|
16
|
+
### Compound Components
|
|
17
|
+
Pattern: Share state via Context, expose sub-components.
|
|
18
|
+
|
|
19
|
+
```jsx
|
|
20
|
+
<Select>
|
|
21
|
+
<Select.Trigger />
|
|
22
|
+
<Select.Options>
|
|
23
|
+
<Select.Option value="a">Option A</Select.Option>
|
|
24
|
+
</Select.Options>
|
|
25
|
+
</Select>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## State Management (MEDIUM)
|
|
29
|
+
|
|
30
|
+
### Decouple Implementation
|
|
31
|
+
Provider is the ONLY place that knows how state is managed:
|
|
32
|
+
```jsx
|
|
33
|
+
// Good: Context provides generic interface
|
|
34
|
+
const CartContext = { items, addItem, removeItem, total }
|
|
35
|
+
// Bad: Components import zustand/redux directly
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Context Interface Pattern
|
|
39
|
+
Define generic interface with `state`, `actions`, `meta`:
|
|
40
|
+
```jsx
|
|
41
|
+
{ state: {}, actions: {}, meta: { isLoading, error } }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Lift State
|
|
45
|
+
Move state into Provider for sibling component access.
|
|
46
|
+
|
|
47
|
+
## Implementation Patterns (MEDIUM)
|
|
48
|
+
|
|
49
|
+
### Explicit Variants
|
|
50
|
+
❌ `<Button isPrimary />` `<Button isDanger />`
|
|
51
|
+
✅ `<PrimaryButton />` `<DangerButton />`
|
|
52
|
+
|
|
53
|
+
### Children Over Render Props
|
|
54
|
+
❌ `renderHeader={(...) => <Header />}`
|
|
55
|
+
✅ `<Card><Card.Header>...</Card.Header></Card>`
|
|
56
|
+
|
|
57
|
+
## React 19 (⚠️ React 19+ only)
|
|
58
|
+
|
|
59
|
+
- Drop `forwardRef` — ref is now a regular prop
|
|
60
|
+
- Use `use()` instead of `useContext()`
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Core Performance & Accessibility Standards
|
|
2
|
+
|
|
3
|
+
**Status**: Mandaory
|
|
4
|
+
**Applies To**: ALL Frameworks (React, Vue, Angular, Svelte, etc.)
|
|
5
|
+
|
|
6
|
+
## 🚀 Performance: The "Zero-Overhead" Standard
|
|
7
|
+
|
|
8
|
+
### 1. Core Web Vitals (The Holy Trinity)
|
|
9
|
+
|
|
10
|
+
You must optimize for these metrics _before_ writing business logic.
|
|
11
|
+
|
|
12
|
+
- **LCP (Largest Contentful Paint)**: < 2.5s
|
|
13
|
+
- **Strategy**: The LCP element (usually Hero Image or H1) must be in the initial HTML.
|
|
14
|
+
- **Ban**: Never lazy-load the LCP image. Never use client-side rendering for the LCP element.
|
|
15
|
+
- **Code**: `<img fetchpriority="high" decoding="sync" ... />`
|
|
16
|
+
|
|
17
|
+
- **INP (Interaction to Next Paint)**: < 200ms
|
|
18
|
+
- **Strategy**: Break up long tasks.
|
|
19
|
+
- **Ban**: `useEffect` or watchers that run heavy computation on input. Yield to main thread (`scheduler.yield()` or `setTimeout(..., 0)`).
|
|
20
|
+
|
|
21
|
+
- **CLS (Cumulative Layout Shift)**: < 0.1
|
|
22
|
+
- **Strategy**: Rigidly defined dimensions for all media and containers.
|
|
23
|
+
- **Ban**: Images without `width/height`. Ad containers without `min-height`.
|
|
24
|
+
|
|
25
|
+
### 2. Bundle Analysis
|
|
26
|
+
|
|
27
|
+
- **Budget**: Initial JS < 50KB (gzip).
|
|
28
|
+
- **Tree-Shaking**: Import specific functions, not whole libraries.
|
|
29
|
+
- ✅ `import { map } from 'lodash-es'`
|
|
30
|
+
- ❌ `import _ from 'lodash'`
|
|
31
|
+
- **Splitting**: Route-level splitting is mandatory. Component-level splitting for heavy interactions (modals, charts).
|
|
32
|
+
|
|
33
|
+
### 3. Image Optimization
|
|
34
|
+
|
|
35
|
+
- **Formats**: AVIF > WebP > JPG/PNG.
|
|
36
|
+
- **Responsive**: Use `srcset` and `sizes`.
|
|
37
|
+
- **Lazy**: `loading="lazy"` for everything below the fold.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## ♿ Accessibility: The "Keyboard First" Standard
|
|
42
|
+
|
|
43
|
+
**Rule**: If you can't use it with `Tab` + `Enter`/`Space`, it is broken.
|
|
44
|
+
|
|
45
|
+
### 1. Semantic HTML
|
|
46
|
+
|
|
47
|
+
- **Buttons**: Use `<button>`, not `<div onClick>`.
|
|
48
|
+
- **Links**: Use `<a>` with `href`, not `<button onClick="go()">`.
|
|
49
|
+
- **Landmarks**: `<main>`, `<nav>`, `<aside>`, `<header>`, `<footer>`.
|
|
50
|
+
|
|
51
|
+
### 2. Focus Management
|
|
52
|
+
|
|
53
|
+
- **Visible Focus**: Never remove `outline` without replacing it with a custom high-contrast focus style.
|
|
54
|
+
- **Trap Focus**: Modals must trap focus inside them.
|
|
55
|
+
|
|
56
|
+
### 3. ARIA (Last Resort)
|
|
57
|
+
|
|
58
|
+
- Use ARIA only when HTML is insufficient.
|
|
59
|
+
- **No ARIA > Bad ARIA**.
|
|
60
|
+
- **Images**: `alt=""` for decorative, descriptive text for informational.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 🔒 Security Basics
|
|
65
|
+
|
|
66
|
+
- **XSS**: Sanitize all `innerHTML`.
|
|
67
|
+
- **Deps**: Audit `npm audit` regularly.
|
|
68
|
+
- **HTTPS**: Enforce HSTS.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Modern Signals & Fine-Grained Reactivity
|
|
2
|
+
|
|
3
|
+
**Stack**: Svelte 5 (Runes), SolidJS, Qwik
|
|
4
|
+
|
|
5
|
+
## 🧠 The Philosophy: "No Virtual DOM"
|
|
6
|
+
|
|
7
|
+
Unlike React/Vue, these frameworks target the DOM directly.
|
|
8
|
+
|
|
9
|
+
- **Fine-Grained**: Only the text node that changes updates. No component re-renders.
|
|
10
|
+
- **Mental Model**: Code runs _once_ (setup), then reactivity takes over.
|
|
11
|
+
|
|
12
|
+
## 🧱 Framework specifics
|
|
13
|
+
|
|
14
|
+
### Svelte 5 (Runes)
|
|
15
|
+
|
|
16
|
+
- **State**: `let count = $state(0)`
|
|
17
|
+
- **Derived**: `let double = $derived(count * 2)`
|
|
18
|
+
- **Side Effects**: `$effect(() => ...)`
|
|
19
|
+
- **Snippets**: Replace slots with `{#snippet}`.
|
|
20
|
+
|
|
21
|
+
### SolidJS
|
|
22
|
+
|
|
23
|
+
- **Read/Write Split**: `const [count, setCount] = createSignal(0)`
|
|
24
|
+
- **DOM Access**: strictly in `onMount`.
|
|
25
|
+
- **Control Flow**: Use `<Show>`, `<For>` (don't use map).
|
|
26
|
+
|
|
27
|
+
### Qwik (Resumability)
|
|
28
|
+
|
|
29
|
+
- **The Golden Rule**: Do not execute JS on the client unless checking an event.
|
|
30
|
+
- **Serialized State**: All state must be serializable (JSON).
|
|
31
|
+
- **$**: The optimizer barrier. `onClick$`, `useSignal$`.
|
|
32
|
+
|
|
33
|
+
## ⚡ Performance Targets
|
|
34
|
+
|
|
35
|
+
1. **Hydration**:
|
|
36
|
+
- **Svelte/Solid**: Fast hydration.
|
|
37
|
+
- **Qwik**: No hydration (Resumability).
|
|
38
|
+
2. **Closures**: Avoid creating closures in render loops (except Qwik where `$` handles it).
|
|
39
|
+
|
|
40
|
+
## 🧪 Testing
|
|
41
|
+
|
|
42
|
+
- **E2E**: Playwright is the gold standard for all three.
|
|
43
|
+
- **Unit**: Vitest.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# React & Next.js Performance Rules
|
|
2
|
+
|
|
3
|
+
> Source: Vercel Engineering — react-best-practices skill (65 rules, 8 categories)
|
|
4
|
+
|
|
5
|
+
## Priority 1: Eliminating Waterfalls (CRITICAL)
|
|
6
|
+
|
|
7
|
+
- **Move await late**: `async-defer-await` — Defer `await` until the branch that uses the result
|
|
8
|
+
- **Parallel promises**: `async-parallel` — `Promise.all()` for independent async operations
|
|
9
|
+
- **Partial deps**: `async-dependencies` — Use `better-all` when Promise B needs result of A but C doesn't
|
|
10
|
+
- **API route promises**: `async-api-routes` — Start promises at function top, `await` at bottom
|
|
11
|
+
- **Suspense streaming**: `async-suspense-boundaries` — Wrap slow components in `<Suspense>` to stream content
|
|
12
|
+
|
|
13
|
+
## Priority 2: Bundle Size Optimization (CRITICAL)
|
|
14
|
+
|
|
15
|
+
- **No barrel files**: `bundle-barrel-imports` — Import directly from source, never barrel `index.ts`
|
|
16
|
+
- **Dynamic imports**: `bundle-dynamic-imports` — `next/dynamic` for heavy components (chart libs, editors)
|
|
17
|
+
- **Defer third-party**: `bundle-defer-third-party` — Load analytics/logging AFTER hydration
|
|
18
|
+
- **Conditional load**: `bundle-conditional` — Load modules only when feature flag is ON
|
|
19
|
+
- **Preload on hover**: `bundle-preload` — Start loading route/chunk on hover/focus for perceived speed
|
|
20
|
+
|
|
21
|
+
## Priority 3: Server-Side Performance (HIGH)
|
|
22
|
+
|
|
23
|
+
- **Auth in actions**: `server-auth-actions` — ALWAYS authenticate server actions (they're public endpoints)
|
|
24
|
+
- **React.cache()**: `server-cache-react` — Per-request deduplication for shared data
|
|
25
|
+
- **LRU cache**: `server-cache-lru` — Cross-request caching for expensive computations
|
|
26
|
+
- **Dedup props**: `server-dedup-props` — Don't pass same data to multiple Client Components
|
|
27
|
+
- **Hoist I/O**: `server-hoist-static-io` — Module-level for fonts, logos, static assets
|
|
28
|
+
- **Minimize serialization**: `server-serialization` — Only pass needed data to client components
|
|
29
|
+
- **Parallel fetching**: `server-parallel-fetching` — Restructure components to parallelize
|
|
30
|
+
- **after()**: `server-after-nonblocking` — Use `after()` for analytics, logging (non-blocking)
|
|
31
|
+
|
|
32
|
+
## Priority 4: Client-Side Data Fetching (MEDIUM-HIGH)
|
|
33
|
+
|
|
34
|
+
- **SWR dedup**: `client-swr-dedup` — Use SWR for automatic deduplication and caching
|
|
35
|
+
- **Dedup listeners**: `client-event-listeners` — One global listener, not per-component
|
|
36
|
+
- **Passive scroll**: `client-passive-event-listeners` — Always `{ passive: true }` for scroll
|
|
37
|
+
- **localStorage**: `client-localstorage-schema` — Version and minimize stored data
|
|
38
|
+
|
|
39
|
+
## Priority 5: Re-render Optimization (MEDIUM)
|
|
40
|
+
|
|
41
|
+
Key rules:
|
|
42
|
+
- **Defer reads**: Don't subscribe to state only used in callbacks
|
|
43
|
+
- **Memoize**: Extract expensive children into `React.memo()` components
|
|
44
|
+
- **Derived state**: Subscribe to derived booleans, not raw objects
|
|
45
|
+
- **No inline components**: NEVER define components inside components
|
|
46
|
+
- **Functional setState**: `setCount(prev => prev + 1)` for stable callbacks
|
|
47
|
+
- **startTransition**: Use for non-urgent state updates
|
|
48
|
+
|
|
49
|
+
## Priority 6-8: Rendering, JS, Advanced (MEDIUM-LOW)
|
|
50
|
+
|
|
51
|
+
- **content-visibility**: `auto` for off-screen long lists
|
|
52
|
+
- **Ternary over &&**: `{x ? <A/> : null}` not `{x && <A/>}`
|
|
53
|
+
- **Set/Map lookups**: O(1) instead of array `.includes()`
|
|
54
|
+
- **flatMap**: Replace `.filter().map()` with single `.flatMap()`
|
|
55
|
+
- **requestIdleCallback**: Defer non-critical work to idle time
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Vue & Nuxt 3 Architecture
|
|
2
|
+
|
|
3
|
+
**Status**: Definitive Guide
|
|
4
|
+
**Stack**: Vue 3 (Composition API), Nuxt 3
|
|
5
|
+
|
|
6
|
+
## 🏗 Architecture: Composition & Modules
|
|
7
|
+
|
|
8
|
+
### 1. Composition API Only
|
|
9
|
+
|
|
10
|
+
- **Ban**: Options API (`data`, `methods`).
|
|
11
|
+
- **Enforce**: `<script setup lang="ts">`.
|
|
12
|
+
- **Why**: Better TypeScript support, logic reuse via composables.
|
|
13
|
+
|
|
14
|
+
### 2. Nuxt Directory Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
server/ # API routes (Nitro)
|
|
18
|
+
components/ # Auto-imported components
|
|
19
|
+
composables/ # Auto-imported logic
|
|
20
|
+
pages/ # File-based routing
|
|
21
|
+
layouts/ # Layouts
|
|
22
|
+
stores/ # Pinia definitions
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## ⚡ Performance Patterns
|
|
26
|
+
|
|
27
|
+
### 1. Data Fetching
|
|
28
|
+
|
|
29
|
+
- **SSR-Friendly**: Use `useFetch` or `useAsyncData`.
|
|
30
|
+
- **Keying**: Always provide a unique key if parameters change.
|
|
31
|
+
- **Lazy**: `lazy: true` to prevent blocking navigation.
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
// ✅ GOOD
|
|
35
|
+
const { data, pending } = await useFetch("/api/posts", {
|
|
36
|
+
lazy: true,
|
|
37
|
+
server: false, // If client-only execution is needed
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. State Management (Pinia)
|
|
42
|
+
|
|
43
|
+
- **Setup Stores**: Use the function syntax (like `setup()`), not the object syntax.
|
|
44
|
+
- **Dedupe**: Don't put everything in store. Use `useState` for simple shared state.
|
|
45
|
+
|
|
46
|
+
### 3. Compute Stability
|
|
47
|
+
|
|
48
|
+
- Use `computed()` for derived state.
|
|
49
|
+
- Use `shallowRef()` for large objects that don't need deep reactivity.
|
|
50
|
+
|
|
51
|
+
## 🧪 Testing
|
|
52
|
+
|
|
53
|
+
- **Unit**: Vitest.
|
|
54
|
+
- **Component**: Vue Test Utils.
|
|
55
|
+
- **E2E**: Nuxt Test Utils (Playwright wrapper).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import sys
|
|
3
|
+
import re
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
def check_file(filepath):
|
|
7
|
+
"""
|
|
8
|
+
Simple heuristic checks for frontend compliance.
|
|
9
|
+
"""
|
|
10
|
+
with open(filepath, 'r') as f:
|
|
11
|
+
content = f.read()
|
|
12
|
+
|
|
13
|
+
errors = []
|
|
14
|
+
|
|
15
|
+
# Check 1: Image Accessibility
|
|
16
|
+
# Matches <img ...> without alt=
|
|
17
|
+
img_tags = re.findall(r'<img[^>]*>', content)
|
|
18
|
+
for tag in img_tags:
|
|
19
|
+
if 'alt=' not in tag:
|
|
20
|
+
errors.append(f"ACCESSIBILITY: Found <img> tag without 'alt' attribute: {tag}")
|
|
21
|
+
|
|
22
|
+
# Check 2: Next.js Image Optimization
|
|
23
|
+
if 'next/image' in content or '<Image' in content:
|
|
24
|
+
# Check for sizes prop if not fill
|
|
25
|
+
if '<Image' in content and 'sizes=' not in content and 'fill' not in content:
|
|
26
|
+
errors.append("PERFORMANCE: Found <Image> component (Next.js) without 'sizes' attribute. Use 'sizes' for responsive hydration.")
|
|
27
|
+
|
|
28
|
+
# Check 3: React Anti-Pattern (Effect Fetching)
|
|
29
|
+
if 'useEffect' in content and 'fetch(' in content:
|
|
30
|
+
errors.append("ARCHITECTURE: Found 'fetch' inside 'useEffect'. Use Server Components, React Query, or SWR instead.")
|
|
31
|
+
|
|
32
|
+
# Check 4: Angular Legacy
|
|
33
|
+
if '*ngIf' in content:
|
|
34
|
+
errors.append("MODERNIZATION: Found '*ngIf'. Use modern Angular control flow '@if'.")
|
|
35
|
+
|
|
36
|
+
return errors
|
|
37
|
+
|
|
38
|
+
def main():
|
|
39
|
+
if len(sys.argv) < 2:
|
|
40
|
+
print("Usage: python validate_compliance.py <file_or_directory>")
|
|
41
|
+
sys.exit(1)
|
|
42
|
+
|
|
43
|
+
target = sys.argv[1]
|
|
44
|
+
all_errors = []
|
|
45
|
+
|
|
46
|
+
if os.path.isfile(target):
|
|
47
|
+
all_errors.extend(check_file(target))
|
|
48
|
+
elif os.path.isdir(target):
|
|
49
|
+
for root, _, files in os.walk(target):
|
|
50
|
+
for file in files:
|
|
51
|
+
if file.endswith(('.tsx', '.jsx', '.vue', '.ts', '.js')):
|
|
52
|
+
path = os.path.join(root, file)
|
|
53
|
+
all_errors.extend(check_file(path))
|
|
54
|
+
|
|
55
|
+
if all_errors:
|
|
56
|
+
print("❌ Compliance Errors Found:")
|
|
57
|
+
for err in all_errors:
|
|
58
|
+
print(f"- {err}")
|
|
59
|
+
sys.exit(1)
|
|
60
|
+
else:
|
|
61
|
+
print("✅ No obvious compliance errors found (Heuristic Check).")
|
|
62
|
+
sys.exit(0)
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
main()
|