@caddis/cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -16
- package/bundles/antigravity-plugin-extras/plugin.json +5 -0
- package/bundles/antigravity-plugin-extras/skills/_registry.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +293 -0
- package/bundles/antigravity-plugin-extras/skills/anchor-review/SKILL.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +367 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +244 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +156 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +321 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +144 -0
- package/bundles/antigravity-plugin-extras/skills/asking-questions/SKILL.md +81 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/cross-service/credential-management.md +450 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/browser/README.md +363 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/code-interpreter/README.md +232 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/README.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deploy-template.sh +117 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deployment-strategies.md +416 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/troubleshooting-guide.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/validate-deployment.sh +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/identity/README.md +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/memory/README.md +253 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/observability/README.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/runtime/README.md +215 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +279 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/references/cdk-patterns.md +431 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/scripts/validate-stack.sh +240 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +318 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/cloudwatch-alarms.md +567 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/operations-patterns.md +394 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +758 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/deployment-best-practices.md +830 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/eda-patterns.md +1002 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/observability-best-practices.md +770 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/performance-optimization.md +671 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/security-best-practices.md +625 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/serverless-patterns.md +838 -0
- package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +139 -0
- package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +298 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +93 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +392 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/agent-patterns.md +461 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/examples.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/state-patterns.md +360 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/troubleshooting.md +362 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +266 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/examples.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +317 -0
- package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +385 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +294 -0
- package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +310 -0
- package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +539 -0
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-analysis/SKILL.md +111 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/README.md +248 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +203 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/adapter.py.template +44 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/api-router.py.template +43 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/contract-test.py.template +384 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/display-dto.py.template +39 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-service.ts.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-types.ts.template +38 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/ingestion-model.py.template +42 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/mapping-doc.md.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/normalizer.py.template +48 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_requirements.md +36 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_ui_demand.md +35 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/reconcile_mapping.md +66 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/query-catalog.md.template +62 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/consumer-driven-contracts.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/drift-check-catalog.md +305 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/layer-responsibilities.md +333 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_connections.py +170 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_sources.py +161 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/drift_check.py +171 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/extract_schema.py +1363 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_gap_report.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_mapping_doc.py +294 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/ts_dto_compare.py +214 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/validate_lineage.py +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +753 -0
- package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +220 -0
- package/bundles/antigravity-plugin-extras/skills/db-testing/SKILL.md +117 -0
- package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +259 -0
- package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +167 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +240 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/references/DESIGN-SYSTEM-TEMPLATE.md +577 -0
- package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +323 -0
- package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +378 -0
- package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +78 -0
- package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/SKILL.md +193 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/element-types.md +497 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/excalidraw-schema.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/reliable-diagrams.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/README.md +60 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-arrow.py +354 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-icon-to-diagram.py +412 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/split-excalidraw-library.py +183 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/business-flow-swimlane-template.excalidraw +334 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/class-diagram-template.excalidraw +558 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/data-flow-diagram-template.excalidraw +279 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/er-diagram-template.excalidraw +662 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/flowchart-template.excalidraw +179 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/mindmap-template.excalidraw +244 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/relationship-template.excalidraw +145 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/reliable-flowchart.excalidraw +1 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/sequence-diagram-template.excalidraw +509 -0
- package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +434 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/README.md +221 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/SKILL.md +359 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/references/templates.md +90 -0
- package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +194 -0
- package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/intent-writer/SKILL.md +201 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +124 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/3p-updates.md +47 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/faq-answers.md +30 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/general-comms.md +16 -0
- package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +447 -0
- package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +182 -0
- package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +200 -0
- package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +217 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/evaluation.md +602 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/mcp_best_practices.md +915 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/node_mcp_server.md +916 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/python_mcp_server.md +752 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/connections.py +151 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +328 -0
- package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +267 -0
- package/bundles/antigravity-plugin-extras/skills/naming-analyzer/SKILL.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +271 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +270 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +309 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +256 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +358 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +255 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +107 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +44 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +410 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +102 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +204 -0
- package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +371 -0
- package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +208 -0
- package/bundles/antigravity-plugin-extras/skills/plantuml/SKILL.md +228 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +142 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/linear.app.md +196 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/stripe.md +214 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/vercel.md +218 -0
- package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +159 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/README.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +53 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/alternatives.md +258 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/anti-patterns.md +290 -0
- package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +246 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +146 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +350 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/pwa-checklist.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/touch-and-interaction.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/transformation-catalogue.md +326 -0
- package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +275 -0
- package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +330 -0
- package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +104 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +646 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +230 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +357 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +264 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +4 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +331 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +293 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +127 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +269 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/bundles/antigravity-plugin-extras/skills/slides/SKILL.md +38 -0
- package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +268 -0
- package/bundles/antigravity-plugin-extras/skills/svg-create/SKILL.md +251 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +59 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/theme-showcase.pdf +0 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/desert-rose.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/golden-hour.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/ui-testing/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/_sync_all.py +414 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/app-interface.csv +31 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/charts.csv +26 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/colors.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/design.csv +1776 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/draft.csv +1779 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/google-fonts.csv +1924 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/icons.csv +106 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/landing.csv +35 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/products.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/react-performance.csv +45 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/styles.csv +85 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/typography.csv +74 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ui-reasoning.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ux-guidelines.csv +100 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/core.py +247 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/design_system.py +1067 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/search.py +114 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +140 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/commands.md +252 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/graph-schema.md +116 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/pipeline.md +331 -0
- package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/verification-loop/SKILL.md +209 -0
- package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +107 -0
- package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +288 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +339 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/agents/agent-interface.md +175 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/html.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/nlp-keywords.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/palettes.md +149 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/python.md +249 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/react.md +427 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/shapes.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/stopwords.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +416 -0
- package/bundles/manifest.json +2 -1
- package/dist/cli.js +166 -37
- package/package.json +1 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: raffle-winner-picker
|
|
3
|
+
description: Picks random winners from lists, spreadsheets, or Google Sheets for giveaways, raffles, and contests. Ensures fair, unbiased selection with transparency.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Raffle Winner Picker
|
|
7
|
+
|
|
8
|
+
This skill randomly selects winners from lists, spreadsheets, or Google Sheets for giveaways and contests.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Running social media giveaways
|
|
13
|
+
- Picking raffle winners at events
|
|
14
|
+
- Randomly selecting participants for surveys or tests
|
|
15
|
+
- Choosing winners from contest submissions
|
|
16
|
+
- Fair distribution of limited spots or resources
|
|
17
|
+
- Random team assignments
|
|
18
|
+
|
|
19
|
+
## What This Skill Does
|
|
20
|
+
|
|
21
|
+
1. **Random Selection**: Uses cryptographically random selection
|
|
22
|
+
2. **Multiple Sources**: Works with CSV, Excel, Google Sheets, or plain lists
|
|
23
|
+
3. **Multiple Winners**: Can pick one or multiple winners
|
|
24
|
+
4. **Duplicate Prevention**: Ensures the same person can't win twice
|
|
25
|
+
5. **Transparent Results**: Shows the selection process clearly
|
|
26
|
+
6. **Winner Details**: Displays all relevant information about winners
|
|
27
|
+
|
|
28
|
+
## How to Use
|
|
29
|
+
|
|
30
|
+
### From Google Sheets
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Pick a random row from this Google Sheet to select a winner
|
|
34
|
+
for a giveaway: [Sheet URL]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### From Local File
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Pick 3 random winners from entries.csv
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### From List
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Pick a random winner from this list:
|
|
47
|
+
- Alice (alice@email.com)
|
|
48
|
+
- Bob (bob@email.com)
|
|
49
|
+
- Carol (carol@email.com)
|
|
50
|
+
...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Multiple Winners
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Pick 5 random winners from contest-entries.xlsx,
|
|
57
|
+
make sure no duplicates
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Example
|
|
61
|
+
|
|
62
|
+
**User**: "Pick a random row from this Google Sheet to select a winner for a giveaway."
|
|
63
|
+
|
|
64
|
+
**Output**:
|
|
65
|
+
```
|
|
66
|
+
Accessing Google Sheet...
|
|
67
|
+
Total entries found: 247
|
|
68
|
+
|
|
69
|
+
Randomly selecting winner...
|
|
70
|
+
|
|
71
|
+
🎉 WINNER SELECTED! 🎉
|
|
72
|
+
|
|
73
|
+
Row #142
|
|
74
|
+
Name: Sarah Johnson
|
|
75
|
+
Email: sarah.j@email.com
|
|
76
|
+
Entry Date: March 10, 2024
|
|
77
|
+
Comment: "Love your newsletter!"
|
|
78
|
+
|
|
79
|
+
Selection method: Cryptographically random
|
|
80
|
+
Timestamp: 2024-03-15 14:32:18 UTC
|
|
81
|
+
|
|
82
|
+
Would you like to:
|
|
83
|
+
- Pick another winner (excluding Sarah)?
|
|
84
|
+
- Export winner details?
|
|
85
|
+
- Pick runner-ups?
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Inspired by:** Lenny's use case - picking a Sora 2 giveaway winner from his subscriber Slack community
|
|
89
|
+
|
|
90
|
+
## Features
|
|
91
|
+
|
|
92
|
+
### Fair Selection
|
|
93
|
+
- Uses secure random number generation
|
|
94
|
+
- No bias or patterns
|
|
95
|
+
- Transparent process
|
|
96
|
+
- Repeatable with seed (for verification)
|
|
97
|
+
|
|
98
|
+
### Exclusions
|
|
99
|
+
```
|
|
100
|
+
Pick a random winner excluding previous winners:
|
|
101
|
+
Alice, Bob, Carol
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Weighted Selection
|
|
105
|
+
```
|
|
106
|
+
Pick a winner with weighted probability based on
|
|
107
|
+
the "entries" column (1 entry = 1 ticket)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Runner-ups
|
|
111
|
+
```
|
|
112
|
+
Pick 1 winner and 3 runner-ups from the list
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Example Workflows
|
|
116
|
+
|
|
117
|
+
### Social Media Giveaway
|
|
118
|
+
1. Export entries from Google Form to Sheets
|
|
119
|
+
2. "Pick a random winner from [Sheet URL]"
|
|
120
|
+
3. Verify winner details
|
|
121
|
+
4. Announce publicly with timestamp
|
|
122
|
+
|
|
123
|
+
### Event Raffle
|
|
124
|
+
1. Create CSV of attendee names and emails
|
|
125
|
+
2. "Pick 10 random winners from attendees.csv"
|
|
126
|
+
3. Export winner list
|
|
127
|
+
4. Email winners directly
|
|
128
|
+
|
|
129
|
+
### Team Assignment
|
|
130
|
+
1. Have list of participants
|
|
131
|
+
2. "Randomly split this list into 4 equal teams"
|
|
132
|
+
3. Review assignments
|
|
133
|
+
4. Share team rosters
|
|
134
|
+
|
|
135
|
+
## Tips
|
|
136
|
+
|
|
137
|
+
- **Document the process**: Save the timestamp and method
|
|
138
|
+
- **Public announcement**: Share selection details for transparency
|
|
139
|
+
- **Check eligibility**: Verify winner meets contest rules
|
|
140
|
+
- **Have backups**: Pick runner-ups in case winner is ineligible
|
|
141
|
+
- **Export results**: Save winner list for records
|
|
142
|
+
|
|
143
|
+
## Privacy & Fairness
|
|
144
|
+
|
|
145
|
+
✓ Uses cryptographically secure randomness
|
|
146
|
+
✓ No manipulation possible
|
|
147
|
+
✓ Timestamp recorded for verification
|
|
148
|
+
✓ Can provide seed for third-party verification
|
|
149
|
+
✓ Respects data privacy
|
|
150
|
+
|
|
151
|
+
## Common Use Cases
|
|
152
|
+
|
|
153
|
+
- Newsletter subscriber giveaways
|
|
154
|
+
- Product launch raffles
|
|
155
|
+
- Conference ticket drawings
|
|
156
|
+
- Beta tester selection
|
|
157
|
+
- Focus group participant selection
|
|
158
|
+
- Random prize distribution at events
|
|
159
|
+
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# React useEffect Best Practices
|
|
2
|
+
|
|
3
|
+
A comprehensive guide teaching when to use `useEffect` in React, and more importantly, when NOT to use it. This skill is based on official React documentation and provides practical alternatives to common useEffect anti-patterns.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Effects are an **escape hatch** from React's reactive paradigm. They let you synchronize with external systems like browser APIs, third-party widgets, or network requests. However, many developers overuse Effects for tasks that React handles better through other means.
|
|
8
|
+
|
|
9
|
+
This skill helps you:
|
|
10
|
+
- Identify when you truly need an Effect vs. when you don't
|
|
11
|
+
- Recognize common anti-patterns and their fixes
|
|
12
|
+
- Apply better alternatives like `useMemo`, `key` prop, and event handlers
|
|
13
|
+
- Write Effects that are clean, maintainable, and free from race conditions
|
|
14
|
+
|
|
15
|
+
## When to Use This Skill
|
|
16
|
+
|
|
17
|
+
Use this skill when you're:
|
|
18
|
+
- Writing or reviewing `useEffect` code
|
|
19
|
+
- Using `useState` to store derived values
|
|
20
|
+
- Implementing data fetching or subscriptions
|
|
21
|
+
- Synchronizing state between components
|
|
22
|
+
- Facing bugs with stale data or race conditions
|
|
23
|
+
- Wondering if your Effect is necessary
|
|
24
|
+
|
|
25
|
+
**Trigger phrases:**
|
|
26
|
+
- "Should I use useEffect for this?"
|
|
27
|
+
- "How do I fix this useEffect?"
|
|
28
|
+
- "My Effect is causing too many re-renders"
|
|
29
|
+
- "Data fetching with useEffect"
|
|
30
|
+
- "Reset state when props change"
|
|
31
|
+
- "Derived state from props"
|
|
32
|
+
|
|
33
|
+
## How It Works
|
|
34
|
+
|
|
35
|
+
This skill provides guidance through three key resources:
|
|
36
|
+
|
|
37
|
+
1. **Quick Reference Table** - Fast lookup for common scenarios with DO/DON'T patterns
|
|
38
|
+
2. **Decision Tree** - Visual flowchart to determine the right approach
|
|
39
|
+
3. **Detailed Anti-Patterns** - 9 common mistakes with explanations and fixes
|
|
40
|
+
4. **Better Alternatives** - 8 proven patterns to replace unnecessary Effects
|
|
41
|
+
|
|
42
|
+
The skill teaches you to ask the right questions:
|
|
43
|
+
- Is there an external system involved?
|
|
44
|
+
- Am I responding to a user event or component appearance?
|
|
45
|
+
- Can this value be calculated during render?
|
|
46
|
+
- Do I need to reset state when a prop changes?
|
|
47
|
+
|
|
48
|
+
## Key Features
|
|
49
|
+
|
|
50
|
+
### 1. Quick Reference Guide
|
|
51
|
+
|
|
52
|
+
Visual table showing the DO/DON'T for common scenarios:
|
|
53
|
+
- Derived state from props/state
|
|
54
|
+
- Expensive calculations
|
|
55
|
+
- Resetting state on prop change
|
|
56
|
+
- User event responses
|
|
57
|
+
- Notifying parent components
|
|
58
|
+
- Data fetching
|
|
59
|
+
|
|
60
|
+
### 2. Decision Tree
|
|
61
|
+
|
|
62
|
+
Clear flowchart that guides you from "Need to respond to something?" to the correct solution:
|
|
63
|
+
- User interaction → Event handler
|
|
64
|
+
- Component appeared → Effect (for external sync/analytics)
|
|
65
|
+
- Derived value needed → Calculate during render (+ useMemo if expensive)
|
|
66
|
+
- Reset state on prop change → Key prop
|
|
67
|
+
|
|
68
|
+
### 3. Anti-Pattern Recognition
|
|
69
|
+
|
|
70
|
+
Detailed examples of 9 common mistakes:
|
|
71
|
+
1. Redundant state for derived values
|
|
72
|
+
2. Filtering/transforming data in Effect
|
|
73
|
+
3. Resetting state on prop change
|
|
74
|
+
4. Event-specific logic in Effect
|
|
75
|
+
5. Chains of Effects
|
|
76
|
+
6. Notifying parent via Effect
|
|
77
|
+
7. Passing data up to parent
|
|
78
|
+
8. Fetching without cleanup (race conditions)
|
|
79
|
+
9. App initialization in Effect
|
|
80
|
+
|
|
81
|
+
Each anti-pattern includes:
|
|
82
|
+
- Bad example with explanation
|
|
83
|
+
- Good example with fix
|
|
84
|
+
- Why the anti-pattern is problematic
|
|
85
|
+
|
|
86
|
+
### 4. Better Alternatives
|
|
87
|
+
|
|
88
|
+
8 proven patterns to replace unnecessary Effects:
|
|
89
|
+
1. Calculate during render for derived state
|
|
90
|
+
2. `useMemo` for expensive calculations
|
|
91
|
+
3. `key` prop to reset state
|
|
92
|
+
4. Store ID instead of object for stable references
|
|
93
|
+
5. Event handlers for user actions
|
|
94
|
+
6. `useSyncExternalStore` for external stores
|
|
95
|
+
7. Lifting state up for shared state
|
|
96
|
+
8. Custom hooks for data fetching with cleanup
|
|
97
|
+
|
|
98
|
+
## Usage Examples
|
|
99
|
+
|
|
100
|
+
### Example 1: Derived State
|
|
101
|
+
|
|
102
|
+
**Bad - Unnecessary Effect:**
|
|
103
|
+
```tsx
|
|
104
|
+
function Form() {
|
|
105
|
+
const [firstName, setFirstName] = useState('Taylor');
|
|
106
|
+
const [lastName, setLastName] = useState('Swift');
|
|
107
|
+
const [fullName, setFullName] = useState('');
|
|
108
|
+
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
setFullName(firstName + ' ' + lastName);
|
|
111
|
+
}, [firstName, lastName]);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Good - Calculate during render:**
|
|
116
|
+
```tsx
|
|
117
|
+
function Form() {
|
|
118
|
+
const [firstName, setFirstName] = useState('Taylor');
|
|
119
|
+
const [lastName, setLastName] = useState('Swift');
|
|
120
|
+
const fullName = firstName + ' ' + lastName; // Just compute it
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Example 2: Resetting State
|
|
125
|
+
|
|
126
|
+
**Bad - Effect to reset:**
|
|
127
|
+
```tsx
|
|
128
|
+
function ProfilePage({ userId }) {
|
|
129
|
+
const [comment, setComment] = useState('');
|
|
130
|
+
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
setComment('');
|
|
133
|
+
}, [userId]);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Good - Key prop:**
|
|
138
|
+
```tsx
|
|
139
|
+
function ProfilePage({ userId }) {
|
|
140
|
+
return <Profile userId={userId} key={userId} />;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function Profile({ userId }) {
|
|
144
|
+
const [comment, setComment] = useState(''); // Resets automatically
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Example 3: Data Fetching with Cleanup
|
|
149
|
+
|
|
150
|
+
**Bad - Race condition:**
|
|
151
|
+
```tsx
|
|
152
|
+
function SearchResults({ query }) {
|
|
153
|
+
const [results, setResults] = useState([]);
|
|
154
|
+
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
fetchResults(query).then(json => {
|
|
157
|
+
setResults(json); // "hello" response may arrive after "hell"
|
|
158
|
+
});
|
|
159
|
+
}, [query]);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Good - Cleanup flag:**
|
|
164
|
+
```tsx
|
|
165
|
+
function SearchResults({ query }) {
|
|
166
|
+
const [results, setResults] = useState([]);
|
|
167
|
+
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
let ignore = false;
|
|
170
|
+
|
|
171
|
+
fetchResults(query).then(json => {
|
|
172
|
+
if (!ignore) setResults(json);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
return () => { ignore = true; };
|
|
176
|
+
}, [query]);
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Example 4: Event Handler Instead of Effect
|
|
181
|
+
|
|
182
|
+
**Bad - Effect watching state:**
|
|
183
|
+
```tsx
|
|
184
|
+
function ProductPage({ product, addToCart }) {
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
if (product.isInCart) {
|
|
187
|
+
showNotification(`Added ${product.name}!`);
|
|
188
|
+
}
|
|
189
|
+
}, [product]);
|
|
190
|
+
|
|
191
|
+
function handleBuyClick() {
|
|
192
|
+
addToCart(product);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Good - Handle in event:**
|
|
198
|
+
```tsx
|
|
199
|
+
function ProductPage({ product, addToCart }) {
|
|
200
|
+
function handleBuyClick() {
|
|
201
|
+
addToCart(product);
|
|
202
|
+
showNotification(`Added ${product.name}!`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## When You DO Need Effects
|
|
208
|
+
|
|
209
|
+
Effects are appropriate for:
|
|
210
|
+
|
|
211
|
+
- **Synchronizing with external systems** - Browser APIs, third-party widgets, non-React code
|
|
212
|
+
- **Subscriptions** - WebSocket connections, global event listeners (prefer `useSyncExternalStore`)
|
|
213
|
+
- **Analytics/logging** - Code that needs to run because the component displayed
|
|
214
|
+
- **Data fetching** - With proper cleanup (or use your framework's built-in mechanism)
|
|
215
|
+
|
|
216
|
+
## When You DON'T Need Effects
|
|
217
|
+
|
|
218
|
+
Avoid Effects for:
|
|
219
|
+
|
|
220
|
+
1. **Transforming data for rendering** - Calculate at the top level instead
|
|
221
|
+
2. **Handling user events** - Use event handlers where you know exactly what happened
|
|
222
|
+
3. **Deriving state** - Just compute it: `const fullName = firstName + ' ' + lastName`
|
|
223
|
+
4. **Chaining state updates** - Calculate all next state in the event handler
|
|
224
|
+
5. **Notifying parent components** - Call the callback in the same event handler
|
|
225
|
+
6. **Resetting state** - Use the `key` prop to create a fresh component instance
|
|
226
|
+
|
|
227
|
+
## Best Practices
|
|
228
|
+
|
|
229
|
+
### 1. Start Without an Effect
|
|
230
|
+
|
|
231
|
+
Before adding an Effect, ask: "Is there an external system involved?" If no, you probably don't need an Effect.
|
|
232
|
+
|
|
233
|
+
### 2. Prefer Derived State
|
|
234
|
+
|
|
235
|
+
If you can calculate a value from props or state, don't store it in state with an Effect updating it.
|
|
236
|
+
|
|
237
|
+
### 3. Use the Right Tool
|
|
238
|
+
|
|
239
|
+
- Expensive calculation → `useMemo`
|
|
240
|
+
- User interaction → Event handler
|
|
241
|
+
- Reset on prop change → `key` prop
|
|
242
|
+
- External subscription → `useSyncExternalStore`
|
|
243
|
+
- Shared state → Lift state up
|
|
244
|
+
|
|
245
|
+
### 4. Always Clean Up
|
|
246
|
+
|
|
247
|
+
If your Effect subscribes, fetches, or sets timers, return a cleanup function to prevent memory leaks and race conditions.
|
|
248
|
+
|
|
249
|
+
### 5. Avoid Effect Chains
|
|
250
|
+
|
|
251
|
+
Multiple Effects triggering each other causes unnecessary re-renders and makes code hard to follow. Calculate everything in one place (usually an event handler).
|
|
252
|
+
|
|
253
|
+
### 6. Test in Strict Mode
|
|
254
|
+
|
|
255
|
+
React 18+ Strict Mode mounts components twice in development to expose missing cleanup. If your Effect breaks, you need cleanup.
|
|
256
|
+
|
|
257
|
+
### 7. Consider Framework Solutions
|
|
258
|
+
|
|
259
|
+
For data fetching, prefer your framework's built-in solution (Next.js, Remix) or libraries (React Query, SWR) over manual Effects.
|
|
260
|
+
|
|
261
|
+
## Reference Files
|
|
262
|
+
|
|
263
|
+
This skill includes three detailed reference documents:
|
|
264
|
+
|
|
265
|
+
1. **SKILL.md** - Quick reference table and decision tree
|
|
266
|
+
2. **anti-patterns.md** - 9 common mistakes with detailed explanations
|
|
267
|
+
3. **alternatives.md** - 8 better alternatives with code examples
|
|
268
|
+
|
|
269
|
+
## Common Pitfalls
|
|
270
|
+
|
|
271
|
+
### Multiple Re-renders
|
|
272
|
+
|
|
273
|
+
**Symptom:** Component re-renders many times in quick succession.
|
|
274
|
+
|
|
275
|
+
**Cause:** Effect that sets state based on state it depends on, creating a loop.
|
|
276
|
+
|
|
277
|
+
**Fix:** Calculate the final value in an event handler or during render.
|
|
278
|
+
|
|
279
|
+
### Stale Data
|
|
280
|
+
|
|
281
|
+
**Symptom:** UI shows outdated values briefly before updating.
|
|
282
|
+
|
|
283
|
+
**Cause:** Using Effect to update derived state causes an extra render pass.
|
|
284
|
+
|
|
285
|
+
**Fix:** Calculate derived values during render instead of in state.
|
|
286
|
+
|
|
287
|
+
### Race Conditions
|
|
288
|
+
|
|
289
|
+
**Symptom:** Fast typing shows results for old queries after new ones.
|
|
290
|
+
|
|
291
|
+
**Cause:** Missing cleanup in data fetching Effect.
|
|
292
|
+
|
|
293
|
+
**Fix:** Use cleanup flag (`ignore` variable) or AbortController.
|
|
294
|
+
|
|
295
|
+
### Runs Twice in Development
|
|
296
|
+
|
|
297
|
+
**Symptom:** Effect runs twice on component mount in development.
|
|
298
|
+
|
|
299
|
+
**Cause:** React 18 Strict Mode intentionally mounts components twice to expose bugs.
|
|
300
|
+
|
|
301
|
+
**Fix:** Add proper cleanup. If it's app initialization that shouldn't run twice, use a module-level guard.
|
|
302
|
+
|
|
303
|
+
## Resources
|
|
304
|
+
|
|
305
|
+
This skill is based on:
|
|
306
|
+
- [React Official Docs: You Might Not Need an Effect](https://react.dev/learn/you-might-not-need-an-effect)
|
|
307
|
+
- [React Official Docs: Synchronizing with Effects](https://react.dev/learn/synchronizing-with-effects)
|
|
308
|
+
- [React Official Docs: Lifecycle of Reactive Effects](https://react.dev/learn/lifecycle-of-reactive-effects)
|
|
309
|
+
|
|
310
|
+
## Summary
|
|
311
|
+
|
|
312
|
+
The golden rule: **Effects are an escape hatch from React.** If you're not synchronizing with an external system, you probably don't need an Effect.
|
|
313
|
+
|
|
314
|
+
Before writing `useEffect`, ask yourself:
|
|
315
|
+
1. Is this responding to a user interaction? → Use event handler
|
|
316
|
+
2. Is this a value I can calculate from props/state? → Calculate during render
|
|
317
|
+
3. Is this resetting state when a prop changes? → Use key prop
|
|
318
|
+
4. Is this synchronizing with an external system? → Use Effect with cleanup
|
|
319
|
+
|
|
320
|
+
Follow these patterns, and your React code will be more maintainable, performant, and bug-free.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: react-useeffect
|
|
3
|
+
description: React useEffect best practices from official docs. Use when writing/reviewing useEffect, useState for derived values, data fetching, or state synchronization. Teaches when NOT to use Effect and better alternatives.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# You Might Not Need an Effect
|
|
7
|
+
|
|
8
|
+
Effects are an **escape hatch** from React. They let you synchronize with external systems. If there is no external system involved, you shouldn't need an Effect.
|
|
9
|
+
|
|
10
|
+
## Quick Reference
|
|
11
|
+
|
|
12
|
+
| Situation | DON'T | DO |
|
|
13
|
+
|-----------|-------|-----|
|
|
14
|
+
| Derived state from props/state | `useState` + `useEffect` | Calculate during render |
|
|
15
|
+
| Expensive calculations | `useEffect` to cache | `useMemo` |
|
|
16
|
+
| Reset state on prop change | `useEffect` with `setState` | `key` prop |
|
|
17
|
+
| User event responses | `useEffect` watching state | Event handler directly |
|
|
18
|
+
| Notify parent of changes | `useEffect` calling `onChange` | Call in event handler |
|
|
19
|
+
| Fetch data | `useEffect` without cleanup | `useEffect` with cleanup OR framework |
|
|
20
|
+
|
|
21
|
+
## When You DO Need Effects
|
|
22
|
+
|
|
23
|
+
- Synchronizing with **external systems** (non-React widgets, browser APIs)
|
|
24
|
+
- **Subscriptions** to external stores (use `useSyncExternalStore` when possible)
|
|
25
|
+
- **Analytics/logging** that runs because component displayed
|
|
26
|
+
- **Data fetching** with proper cleanup (or use framework's built-in mechanism)
|
|
27
|
+
|
|
28
|
+
## When You DON'T Need Effects
|
|
29
|
+
|
|
30
|
+
1. **Transforming data for rendering** - Calculate at top level, re-runs automatically
|
|
31
|
+
2. **Handling user events** - Use event handlers, you know exactly what happened
|
|
32
|
+
3. **Deriving state** - Just compute it: `const fullName = firstName + ' ' + lastName`
|
|
33
|
+
4. **Chaining state updates** - Calculate all next state in the event handler
|
|
34
|
+
|
|
35
|
+
## Decision Tree
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Need to respond to something?
|
|
39
|
+
├── User interaction (click, submit, drag)?
|
|
40
|
+
│ └── Use EVENT HANDLER
|
|
41
|
+
├── Component appeared on screen?
|
|
42
|
+
│ └── Use EFFECT (external sync, analytics)
|
|
43
|
+
├── Props/state changed and need derived value?
|
|
44
|
+
│ └── CALCULATE DURING RENDER
|
|
45
|
+
│ └── Expensive? Use useMemo
|
|
46
|
+
└── Need to reset state when prop changes?
|
|
47
|
+
└── Use KEY PROP on component
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Detailed Guidance
|
|
51
|
+
|
|
52
|
+
- [Anti-Patterns](./anti-patterns.md) - Common mistakes with fixes
|
|
53
|
+
- [Better Alternatives](./alternatives.md) - useMemo, key prop, lifting state, useSyncExternalStore
|