@caddis/cli 0.3.0 → 0.4.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/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
- package/bundles/antigravity-plugin/caddis_statusline.py +25 -3
- package/bundles/antigravity-plugin/guard_agy.py +41 -9
- package/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_inventory.py +73 -3
- package/bundles/antigravity-plugin/scripts/caddis_statusline.py +25 -3
- package/bundles/antigravity-plugin/scripts/claudster_config.py +0 -5
- package/bundles/antigravity-plugin/scripts/hook_log.py +1 -1
- package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
- package/bundles/antigravity-plugin/scripts/oss_ask.py +1 -1
- package/bundles/antigravity-plugin/scripts/oss_model.py +10 -2
- package/bundles/antigravity-plugin/scripts/oss_review.py +1 -1
- package/bundles/antigravity-plugin/scripts/setup_project_ai.py +9 -6
- package/bundles/antigravity-plugin/session_end_agy.py +31 -6
- package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
- package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
- package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
- package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
- package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
- package/bundles/antigravity-plugin/warm_start_agy.py +96 -9
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/codex/.codex/config.toml.example +36 -0
- package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
- package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
- package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
- package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
- package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
- package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
- package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
- package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
- package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
- package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
- package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
- package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
- package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
- package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
- package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
- package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
- package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
- package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
- package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
- package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
- package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
- package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
- package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
- package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
- package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
- package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
- package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
- package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
- package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
- package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
- package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
- package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
- package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
- package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
- package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
- package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
- package/bundles/codex/AGENTS.md +146 -0
- package/bundles/manifest.json +4 -3
- package/dist/claude-deepseek.js +2 -2
- package/dist/claude-glm.js +2 -2
- package/dist/claude-oss.js +2 -2
- package/dist/cli.js +187 -56
- package/package.json +1 -1
- package/bundles/antigravity-plugin/scripts/dream_capture.py +0 -249
- package/bundles/antigravity-plugin/scripts/dream_memory.py +0 -438
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -94
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- 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 +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics while strictly adhering to the user's technical standards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frontend Design Skill
|
|
7
|
+
|
|
8
|
+
This skill guides the creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
|
|
9
|
+
|
|
10
|
+
## 1. Core Principle: Avoid "AI Slop"
|
|
11
|
+
- **Typography:** Avoid system fonts (Inter, Arial, Roboto). Pair a distinctive display font (e.g., *Cormorant Garamond*, *Playfair Display*, *Space Mono*) with a refined, readable body font. Use dramatic scale jumps ($h1 > 5rem$ vs metadata $< 0.75rem$).
|
|
12
|
+
- **Color & Theme:** Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
|
|
13
|
+
- **Visuals:** Create atmosphere and depth using textures (grain, noise), glassmorphism, or complex gradients rather than defaulting to solid flat colors.
|
|
14
|
+
|
|
15
|
+
## 2. Technical Implementation Standards
|
|
16
|
+
**CRITICAL:** You must ignore generic React patterns. Instead, you represent the specific technical architecture defined in the user's stack.
|
|
17
|
+
|
|
18
|
+
**Mandatory Reference:**
|
|
19
|
+
Before writing any component logic, state management, or hooks, you must cross-reference and apply the patterns found in:
|
|
20
|
+
`./references/my-tech-stack.md`
|
|
21
|
+
|
|
22
|
+
Specifically, you must:
|
|
23
|
+
1. **Use Composition:** Build flexible UIs using the *Composition Over Inheritance* and *Compound Component* patterns defined in the reference file.
|
|
24
|
+
2. **Use Custom Hooks:** Do not write ad-hoc logic for debouncing or toggling; use `useDebounce` and `useToggle` from the reference.
|
|
25
|
+
3. **Optimize Performance:** Apply `useMemo` and `useCallback` strictly according to the "Memoization Rules" in the reference.
|
|
26
|
+
4. **Ensure Stability:** Wrap complex or risky components in the `ErrorBoundary` pattern provided.
|
|
27
|
+
5. **Enforce Accessibility:** Follow the keyboard navigation and focus management patterns exactly as specified.
|
|
28
|
+
|
|
29
|
+
## 3. Design Thinking Process
|
|
30
|
+
Before coding, understand the context and commit to a BOLD aesthetic direction:
|
|
31
|
+
- **Tone:** Pick an extreme (Brutalist, Luxury, Retro-futuristic, Editorial, Industrial).
|
|
32
|
+
- **Motion:** Use animations for effects and micro-interactions. Focus on high-impact moments (staggered page loads) rather than scattered micro-interactions.
|
|
33
|
+
- **Differentiation:** What makes this UNFORGETTABLE? What's the one thing someone will remember?
|
|
34
|
+
|
|
35
|
+
## 4. Output Requirements
|
|
36
|
+
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
|
|
37
|
+
- **Production-grade:** Functional, responsive, and accessible.
|
|
38
|
+
- **Visually striking:** Memorable and cohesive with a clear point-of-view.
|
|
39
|
+
- **Technically compliant:** Strictly follows the architecture in `my-tech-stack.md`.
|
|
40
|
+
|
|
41
|
+
## 5. Transition Integrity (No Stale UI)
|
|
42
|
+
|
|
43
|
+
For data-heavy views that switch entities (profile A → profile B), enforce deterministic transitions:
|
|
44
|
+
|
|
45
|
+
- Use a **single render region** (e.g., Streamlit's `st.empty()`) that replaces its entire content on each render pass.
|
|
46
|
+
- **NEVER use dynamic keys** (nonce, entity ID) on containers inside `st.empty()` — dynamic keys cause the framework to create *new* DOM nodes instead of replacing existing ones, leaving ghost/shadow copies visible for 1-2 seconds until frontend reconciliation catches up.
|
|
47
|
+
- Use **stable keys** on inner containers. The render region handles content replacement; inner containers just need stable identity for in-place DOM updates.
|
|
48
|
+
- Temporarily hide high-salience identity panels/tabs during loading to avoid ghosted prior-state flashes.
|
|
49
|
+
- Execute state transitions outside container context managers to avoid interrupted cleanup.
|
|
50
|
+
|
|
51
|
+
Acceptance rule: users must only perceive `old state → loader → new state`, with no stale intermediate artifacts.
|
|
52
|
+
|
|
53
|
+
## 6. Dial System — Design Variance Controls
|
|
54
|
+
|
|
55
|
+
Calibrate these three dials per project before writing any component. Declare them in a comment at the top of the main design file.
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
// DESIGN_VARIANCE: 7 // 1 (safe/corporate) → 10 (experimental/editorial)
|
|
59
|
+
// MOTION_INTENSITY: 5 // 1 (static) → 10 (cinematic)
|
|
60
|
+
// VISUAL_DENSITY: 4 // 1 (minimal/lots of space) → 10 (data-dense/information-heavy)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
| Dial | 1–3 | 4–6 | 7–10 |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `DESIGN_VARIANCE` | Standard grid, safe palette | Distinctive but accessible | Experimental layout, bold choices |
|
|
66
|
+
| `MOTION_INTENSITY` | Opacity fade only | Entrance animations, hover states | Parallax, stagger, spring physics |
|
|
67
|
+
| `VISUAL_DENSITY` | Hero + CTA, generous whitespace | Cards with secondary info | Dashboard-style, compact rows |
|
|
68
|
+
|
|
69
|
+
**Rule**: Do not override the user's declared dials. If undeclared, infer from context and state your assumption.
|
|
70
|
+
|
|
71
|
+
## 7. AI Tells — Forbidden Patterns
|
|
72
|
+
|
|
73
|
+
These are signals of generic AI output. Every instance must be eliminated:
|
|
74
|
+
|
|
75
|
+
### Generic Names
|
|
76
|
+
- ❌ `Company Name`, `Your Brand`, `Hello, World!`, `Example Corp`
|
|
77
|
+
- ✅ Invent plausible, domain-specific content: `Meridian Analytics`, `Kaspar & Voss`, `Orin Health`
|
|
78
|
+
|
|
79
|
+
### Fake Placeholder Numbers
|
|
80
|
+
- ❌ `$1,234.56`, `1,234 users`, `99.9% uptime`, `42 orders`
|
|
81
|
+
- ✅ Domain-plausible numbers with realistic variance: `$14,820`, `3,241 customers`, `99.4% uptime`, `127 orders`
|
|
82
|
+
|
|
83
|
+
### AI Copywriting Clichés
|
|
84
|
+
- ❌ "Empowering your workflow", "Seamlessly integrated", "Next-generation solution", "Unlock the power of..."
|
|
85
|
+
- ✅ Specific, functional copy: "Track invoice aging in real time", "Filter by region, team, or date"
|
|
86
|
+
|
|
87
|
+
### Oversaturated Accents
|
|
88
|
+
- ❌ `#FF6B6B` coral-pink, `#6C63FF` purple-blue gradient (the two default AI accent colors)
|
|
89
|
+
- ✅ Chosen from the brief or brand guide; if absent, pick something unexpected: amber, forest green, slate
|
|
90
|
+
|
|
91
|
+
### Generic Iconography
|
|
92
|
+
- ❌ Rocket ship for launching, lightbulb for ideas, three horizontal bars for "menu" on desktop nav
|
|
93
|
+
- ✅ Icons that match the actual function; text labels as fallback if icon meaning is ambiguous
|
|
94
|
+
|
|
95
|
+
## 8. Typography Discipline
|
|
96
|
+
|
|
97
|
+
- **Maximum 2 font families** — one display (headings), one text (body + UI). Loading 3+ is a performance and taste failure.
|
|
98
|
+
- **Optical sizing**: Headings at `6rem+` need `letter-spacing: -0.03em`. Text under `0.875rem` needs `letter-spacing: 0.01em`.
|
|
99
|
+
- **Vertical rhythm**: `line-height: 1.6` for body, `1.1–1.2` for large headings, `1.4` for UI labels.
|
|
100
|
+
- **Scale**: Use a modular scale (1.25× or 1.333×), not arbitrary sizes. Common scale: `0.75 / 0.875 / 1 / 1.125 / 1.5 / 2 / 3 / 4.5rem`.
|
|
101
|
+
- **Weight contrast**: Body at 400, labels at 500, headings at 700–800. Avoid using 4 or more weights.
|
|
102
|
+
|
|
103
|
+
```css
|
|
104
|
+
/* Correct optical sizing */
|
|
105
|
+
.hero-heading {
|
|
106
|
+
font-size: clamp(3rem, 6vw + 1rem, 6rem);
|
|
107
|
+
line-height: 1.05;
|
|
108
|
+
letter-spacing: -0.04em;
|
|
109
|
+
}
|
|
110
|
+
.body-text {
|
|
111
|
+
font-size: 1rem;
|
|
112
|
+
line-height: 1.625;
|
|
113
|
+
letter-spacing: 0;
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 9. Color Calibration
|
|
118
|
+
|
|
119
|
+
- **Maximum 1 accent color** — two accents compete; zero creates bland work.
|
|
120
|
+
- **Palette minimum**: Background, Surface (+1 level of elevation), Text, Muted text, Border, Accent, Destructive.
|
|
121
|
+
- **Forbidden**: Purple/blue AI gradient cliché (`from-purple-500 to-blue-600` or equivalent). Use if and only if the brand explicitly requires it.
|
|
122
|
+
- **Dark mode**: Shift background to `hsl(220 15% 8%)` range, not pure black (`#000`). Pure black with white text fails contrast for long reading.
|
|
123
|
+
- **Accent contrast**: Accent on background must pass WCAG AA (4.5:1 for normal text, 3:1 for large text / UI components).
|
|
124
|
+
|
|
125
|
+
```css
|
|
126
|
+
/* ✅ Correct token setup */
|
|
127
|
+
:root {
|
|
128
|
+
--bg: hsl(220 15% 97%);
|
|
129
|
+
--surface: hsl(220 15% 100%);
|
|
130
|
+
--text: hsl(220 25% 12%);
|
|
131
|
+
--muted: hsl(220 10% 50%);
|
|
132
|
+
--border: hsl(220 15% 88%);
|
|
133
|
+
--accent: hsl(38 92% 50%); /* Amber — unexpected, not AI-default */
|
|
134
|
+
--destructive: hsl(0 72% 51%);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 10. Layout Diversification
|
|
139
|
+
|
|
140
|
+
When `DESIGN_VARIANCE` > 4, **ban the centered-hero-with-CTA default** layout. Use instead:
|
|
141
|
+
|
|
142
|
+
| Layout Pattern | When to Use |
|
|
143
|
+
|---|---|
|
|
144
|
+
| **Editorial split** — large text left, visual right (or reversed) | Brand/marketing pages |
|
|
145
|
+
| **Bento grid** — asymmetric tiles of varying sizes | Dashboards, feature showcases |
|
|
146
|
+
| **Fullbleed scroll narrative** — content revealed on scroll sections | Storytelling, case studies |
|
|
147
|
+
| **Sidebar dock + content** — persistent nav or filter rail | Application interfaces |
|
|
148
|
+
| **Masonry** — uneven column heights | Media, portfolio grids |
|
|
149
|
+
| **Timeline / sequence** — vertical progression with connectors | Onboarding, process flows |
|
|
150
|
+
|
|
151
|
+
**Never** stack all sections centered on a 1200px `max-width` container unless `DESIGN_VARIANCE` ≤ 3.
|
|
152
|
+
|
|
153
|
+
## 11. Interactive State Completeness
|
|
154
|
+
|
|
155
|
+
Every interactive element must implement all four states before the component is done:
|
|
156
|
+
|
|
157
|
+
| State | What to Implement |
|
|
158
|
+
|---|---|
|
|
159
|
+
| **Loading** | Skeleton, spinner, or disabled appearance while data fetches |
|
|
160
|
+
| **Empty** | Non-generic empty state with context-specific message + action |
|
|
161
|
+
| **Error** | Specific error message, retry action, not just "Something went wrong" |
|
|
162
|
+
| **Tactile** | Hover + active (pressed) visual feedback — scale, shadow, or color shift |
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
// ✅ Complete interactive state example
|
|
166
|
+
function DataCard({ id }: { id: string }) {
|
|
167
|
+
const { data, error, status } = useQuery(...)
|
|
168
|
+
|
|
169
|
+
if (status === 'pending') return <CardSkeleton />
|
|
170
|
+
if (status === 'error') return <ErrorCard message={error.message} onRetry={refetch} />
|
|
171
|
+
if (!data.items.length) return <EmptyCard title="No records yet" action={<CreateButton />} />
|
|
172
|
+
|
|
173
|
+
return (
|
|
174
|
+
<div className="group transition-all hover:shadow-md hover:-translate-y-0.5 active:scale-[0.99]">
|
|
175
|
+
{/* content */}
|
|
176
|
+
</div>
|
|
177
|
+
)
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## 12. Data Realism
|
|
182
|
+
|
|
183
|
+
Never use placeholder data that signals the interface is unfinished:
|
|
184
|
+
|
|
185
|
+
| ❌ Avoid | ✅ Use Instead |
|
|
186
|
+
|---|---|
|
|
187
|
+
| "Lorem ipsum dolor sit amet" | Domain-appropriate text: "Q3 revenue shows 14% growth vs prior quarter" |
|
|
188
|
+
| User: "John Doe" | Plausible name + avatar initial: "Margot Belleview" |
|
|
189
|
+
| Date: "January 1, 2024" | Recent plausible date: "Feb 12, 2026" |
|
|
190
|
+
| Metric: "1,234" | Realistic variance: "3,817" (not round numbers with too many digits) |
|
|
191
|
+
| Chart data: constant line | Realistic noise with trend: slight growth with variance |
|
|
192
|
+
|
|
193
|
+
**Rule**: Each piece of sample data should make a reviewer believe it could be real production data, not a template. If the user provides real data patterns, use them precisely.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# My Technical Standards & Architecture Patterns
|
|
2
|
+
|
|
3
|
+
This document serves as the technical reference for all frontend implementation. When building components or pages, follow these structural patterns to ensure performance, stability, and clean code.
|
|
4
|
+
|
|
5
|
+
## 1. Component Patterns
|
|
6
|
+
|
|
7
|
+
### Composition Over Inheritance
|
|
8
|
+
Build flexible UIs by composing small, focused components rather than deep inheritance chains.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
export function Card({ children, variant = 'default' }) {
|
|
12
|
+
return <div className={`card card-${variant}`}>{children}</div>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function CardHeader({ children }) {
|
|
16
|
+
return <div className="card-header">{children}</div>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Usage: <Card><CardHeader>Title</CardHeader></Card>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Compound Components
|
|
23
|
+
Share implicit state between related components via context to keep logic encapsulated.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
const TabsContext = createContext(undefined)
|
|
27
|
+
|
|
28
|
+
export function Tabs({ children, defaultTab }) {
|
|
29
|
+
const [activeTab, setActiveTab] = useState(defaultTab)
|
|
30
|
+
return (
|
|
31
|
+
<TabsContext.Provider value={{ activeTab, setActiveTab }}>
|
|
32
|
+
{children}
|
|
33
|
+
</TabsContext.Provider>
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function Tab({ id, children }) {
|
|
38
|
+
const ctx = useContext(TabsContext)
|
|
39
|
+
if (!ctx) throw new Error('Tab must be used within Tabs')
|
|
40
|
+
return (
|
|
41
|
+
<button
|
|
42
|
+
className={ctx.activeTab === id ? 'active' : ''}
|
|
43
|
+
onClick={() => ctx.setActiveTab(id)}
|
|
44
|
+
>
|
|
45
|
+
{children}
|
|
46
|
+
</button>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 2. Custom Utility Hooks
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
// Debounce hook for search/expensive inputs
|
|
55
|
+
export function useDebounce(value, delay) {
|
|
56
|
+
const [debounced, setDebounced] = useState(value)
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const handler = setTimeout(() => setDebounced(value), delay)
|
|
59
|
+
return () => clearTimeout(handler)
|
|
60
|
+
}, [value, delay])
|
|
61
|
+
return debounced
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Simplified toggle hook
|
|
65
|
+
export function useToggle(initial = false) {
|
|
66
|
+
const [value, setValue] = useState(initial)
|
|
67
|
+
const toggle = useCallback(() => setValue(v => !v), [])
|
|
68
|
+
return [value, toggle]
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 3. Performance Optimization
|
|
73
|
+
|
|
74
|
+
### Memoization Rules
|
|
75
|
+
- Use `useMemo` for any data transformation or sorting of lists.
|
|
76
|
+
- Use `useCallback` for event handlers passed to components wrapped in `React.memo`.
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
// useMemo for expensive computations
|
|
80
|
+
const sorted = useMemo(() => items.sort((a, b) => b.score - a.score), [items])
|
|
81
|
+
|
|
82
|
+
// React.memo for pure leaf components
|
|
83
|
+
export const ItemCard = React.memo(({ item }) => (
|
|
84
|
+
<div className="item-card"><h3>{item.name}</h3></div>
|
|
85
|
+
))
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 4. Accessibility Patterns
|
|
89
|
+
|
|
90
|
+
### Keyboard Navigation
|
|
91
|
+
Always handle key events for custom interactive widgets to ensure screen-reader and keyboard compatibility.
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
const handleKeyDown = (e) => {
|
|
95
|
+
switch (e.key) {
|
|
96
|
+
case 'ArrowDown': e.preventDefault(); setIndex(i => Math.min(i + 1, max)); break
|
|
97
|
+
case 'ArrowUp': e.preventDefault(); setIndex(i => Math.max(i - 1, 0)); break
|
|
98
|
+
case 'Enter': e.preventDefault(); onSelect(options[index]); break
|
|
99
|
+
case 'Escape': onClose(); break
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 5. Error Boundary Pattern
|
|
105
|
+
Wrap complex sections (like third-party widgets) in a safety net to prevent app crashes.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
export class ErrorBoundary extends React.Component {
|
|
109
|
+
state = { hasError: false, error: null }
|
|
110
|
+
|
|
111
|
+
static getDerivedStateFromError(error) {
|
|
112
|
+
return { hasError: true, error }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
render() {
|
|
116
|
+
if (this.state.hasError) {
|
|
117
|
+
return (
|
|
118
|
+
<div className="error-fallback">
|
|
119
|
+
<h2>Something went wrong</h2>
|
|
120
|
+
<button onClick={() => this.setState({ hasError: false })}>Try again</button>
|
|
121
|
+
</div>
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
return this.props.children
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mockup
|
|
3
|
+
description: Create framework-aware UI mockups with feasibility checks. Prevents wasted effort by validating that proposed designs work within the target framework's constraints.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mockup Skill
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Create visual mockups (HTML/SVG) for UI features with **mandatory framework feasibility validation**. This skill exists because of a real incident: a beautiful HTML mockup was created for a Streamlit app using `position: fixed` — which doesn't work in Streamlit's DOM. 24 hours were wasted discovering this.
|
|
11
|
+
|
|
12
|
+
**This skill prevents that class of failure for ANY framework.**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- Creating a UI mockup for a proposed feature
|
|
19
|
+
- Visualizing a design before implementation
|
|
20
|
+
- Producing a reference artifact for implementing agents
|
|
21
|
+
- When `@ux-designer` routes mockup creation here
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
### Step 1: Read Project Context
|
|
28
|
+
|
|
29
|
+
1. Read `project-config.md` → identify:
|
|
30
|
+
- **Frontend framework** (Streamlit, React, Vue, Angular, Next.js, etc.)
|
|
31
|
+
- **Brand colors** (from profile or placeholder values)
|
|
32
|
+
- **CSS conventions** (scoping method, custom properties, etc.)
|
|
33
|
+
2. Read `copilot-instructions.md` → identify:
|
|
34
|
+
- Existing component patterns
|
|
35
|
+
- Framework-specific conventions already documented
|
|
36
|
+
3. If a `chain_id` is provided, read the Intent Document from `agent-docs/intents/`
|
|
37
|
+
|
|
38
|
+
### Step 2: Framework Feasibility Check (MANDATORY)
|
|
39
|
+
|
|
40
|
+
**Before creating ANY mockup, validate that the proposed design is feasible in the target framework.**
|
|
41
|
+
|
|
42
|
+
Run through this checklist:
|
|
43
|
+
|
|
44
|
+
| Check | Question | If NO |
|
|
45
|
+
|-------|----------|-------|
|
|
46
|
+
| **DOM Control** | Does the framework give you full control over the DOM? | Identify which HTML/CSS features are restricted |
|
|
47
|
+
| **Positioning** | Does `position: fixed/absolute` work as expected? | Document the limitation and alternative approach |
|
|
48
|
+
| **Custom HTML** | Can you inject arbitrary HTML/JS? | Identify the framework's component/extension API |
|
|
49
|
+
| **Event Handling** | Can you attach custom JS event listeners? | Document how events work in this framework |
|
|
50
|
+
| **Styling** | Can you use global CSS freely? | Document CSS scoping constraints |
|
|
51
|
+
| **Third-party Libraries** | Can you load external JS/CSS? | Check if air-gapped deployment restricts this |
|
|
52
|
+
|
|
53
|
+
#### Known Framework Constraints
|
|
54
|
+
|
|
55
|
+
| Framework | Key Constraints |
|
|
56
|
+
|-----------|----------------|
|
|
57
|
+
| **Streamlit** | No `position: fixed/absolute` (DOM wrapping breaks it). No arbitrary HTML injection without `components.html()` or `declare_component()`. CSS is scoped — use `st.container(key=)` + `.st-key-` selectors. No external CDN in air-gapped environments. |
|
|
58
|
+
| **React** | JSX required. CSS-in-JS or CSS Modules typical. Virtual DOM diffing may interfere with manual DOM manipulation. |
|
|
59
|
+
| **Vue** | Template syntax. Scoped styles by default. `v-html` for raw HTML but XSS risk. |
|
|
60
|
+
| **Gradio** | Similar DOM constraints to Streamlit. Limited CSS control. Use `gr.HTML()` for custom elements. |
|
|
61
|
+
| **Next.js** | SSR considerations. `useEffect` needed for client-only code. CSS Modules or Tailwind typical. |
|
|
62
|
+
|
|
63
|
+
> **If ANY constraint would prevent the proposed design from working:**
|
|
64
|
+
> 1. **STOP** — do not create a mockup that can't be implemented
|
|
65
|
+
> 2. **WARN** the user with specific details about what won't work and why
|
|
66
|
+
> 3. **PROPOSE ALTERNATIVES** that work within the framework's constraints
|
|
67
|
+
> 4. **Get confirmation** before proceeding with an alternative approach
|
|
68
|
+
|
|
69
|
+
### Step 3: Create the Mockup
|
|
70
|
+
|
|
71
|
+
**Output format**: HTML file (preferred for interactive mockups) or SVG (for static layouts)
|
|
72
|
+
|
|
73
|
+
**Requirements:**
|
|
74
|
+
- Use brand colors from `project-config.md` (never hardcode colors — use CSS custom properties)
|
|
75
|
+
- Include responsive behavior if applicable
|
|
76
|
+
- Add comments explaining key layout decisions
|
|
77
|
+
- If the mockup uses workarounds for framework constraints, document them clearly in comments
|
|
78
|
+
|
|
79
|
+
**HTML mockup template:**
|
|
80
|
+
```html
|
|
81
|
+
<!DOCTYPE html>
|
|
82
|
+
<html lang="en">
|
|
83
|
+
<head>
|
|
84
|
+
<meta charset="UTF-8">
|
|
85
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
86
|
+
<title>{Feature Name} — Mockup</title>
|
|
87
|
+
<style>
|
|
88
|
+
/* Brand colors from project-config.md */
|
|
89
|
+
:root {
|
|
90
|
+
--brand-primary: {<BRAND_PRIMARY>};
|
|
91
|
+
--brand-dark: {<BRAND_DARK>};
|
|
92
|
+
--brand-light: {<BRAND_LIGHT>};
|
|
93
|
+
/* Additional colors from profile */
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Mockup styles */
|
|
97
|
+
/* ... */
|
|
98
|
+
</style>
|
|
99
|
+
</head>
|
|
100
|
+
<body>
|
|
101
|
+
<!-- MOCKUP: {Feature description} -->
|
|
102
|
+
<!-- FRAMEWORK: {Target framework} -->
|
|
103
|
+
<!-- CONSTRAINTS: {Any framework constraints that shaped this design} -->
|
|
104
|
+
<!-- ALTERNATIVES: {If using a workaround, what was the original approach and why it wouldn't work} -->
|
|
105
|
+
|
|
106
|
+
<!-- Mockup content -->
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Step 3b: Implementation-Annotated Mockup (MANDATORY for handoff to implementing agents)
|
|
112
|
+
|
|
113
|
+
When the mockup will be handed off to `@implement`, `@frontend-developer`, or `@streamlit-developer`, embed **implementation annotations** throughout the HTML so the implementing agent knows exactly what to build without guessing.
|
|
114
|
+
|
|
115
|
+
#### Annotation Types
|
|
116
|
+
|
|
117
|
+
Use these four comment patterns consistently:
|
|
118
|
+
|
|
119
|
+
**1. Component annotations** — Which framework component implements this visual element:
|
|
120
|
+
```html
|
|
121
|
+
<!-- React: <KpiFlipCard product="broadband" data={surveys.broadband}
|
|
122
|
+
trendData={trend.historicalNPS.byProduct.broadband} /> -->
|
|
123
|
+
<!-- React: <ResponsiveContainer width="100%" height={260}>
|
|
124
|
+
<AreaChart data={trendData}><Area type="monotone" dataKey="nps" ... /></AreaChart>
|
|
125
|
+
</ResponsiveContainer> -->
|
|
126
|
+
<!-- React: import { ScoreChip, DeltaBadge, SparkBar, TrendDot } from '@/components/table-cells' -->
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**2. Data source annotations** — Which JSON key / API response field provides the data:
|
|
130
|
+
```html
|
|
131
|
+
<!-- DATA-SOURCE: surveys.broadband.nps, surveys.broadband.responses -->
|
|
132
|
+
<!-- DATA-SOURCE: trend.historicalNPS.byProduct.broadband (array of monthly values) -->
|
|
133
|
+
<!-- DATA-SOURCE: ceoInsight.headline, ceoInsight.keyFindings[] (objects with title, detail) -->
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**3. Implementation notes** — Broader guidance for the implementing agent:
|
|
137
|
+
```html
|
|
138
|
+
<!-- IMPLEMENTATION NOTE [DATA-SOURCE]: This section uses hardcoded mock values for
|
|
139
|
+
layout reference. React implementation must fetch period-filtered data from the
|
|
140
|
+
/api/nps/overview endpoint and compute all KPIs dynamically. -->
|
|
141
|
+
<!-- IMPLEMENTATION NOTE [CHART]: Use Recharts AreaChart with gradient fill.
|
|
142
|
+
Spread CHART_DEFAULTS from chartTheme.ts. No axes/grid for sparkline variant. -->
|
|
143
|
+
<!-- IMPLEMENTATION NOTE [ANIMATION]: Use framer-motion rotateY for card flip.
|
|
144
|
+
duration: 0.52, ease: [0.4, 0.2, 0.2, 1]. backfaceVisibility: "hidden". -->
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**4. Styling annotations** — Which design tokens, CSS vars, or Tailwind classes to use:
|
|
148
|
+
```html
|
|
149
|
+
<!-- STYLE: bg-surface-card (var(--surface-card)), shadow-card, rounded-lg (var(--r-lg)) -->
|
|
150
|
+
<!-- STYLE: Fill color uses var(--status-red) for detractor, var(--status-green) for promoter -->
|
|
151
|
+
<!-- STYLE: Tailwind: text-ink-primary font-heading text-2xl font-bold -->
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### Annotation Placement Rules
|
|
155
|
+
|
|
156
|
+
1. Place **component annotations** directly above or inside the HTML element that the component replaces
|
|
157
|
+
2. Place **data source annotations** on the element that displays the data value
|
|
158
|
+
3. Place **implementation notes** at the top of each major section (tab, panel, card group)
|
|
159
|
+
4. Place **styling annotations** on elements where the visual appearance matters and the token name isn't obvious from the CSS
|
|
160
|
+
5. Every hardcoded value in the mockup (numbers, text, colors) that will be dynamic in production MUST have a data source annotation
|
|
161
|
+
|
|
162
|
+
#### Example: Annotated KPI Card
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<!-- React: <KpiFlipCard product="broadband" data={surveys.broadband}
|
|
166
|
+
trendData={trend.historicalNPS.byProduct.broadband} color={COLORS.broadband} /> -->
|
|
167
|
+
<!-- DATA-SOURCE: surveys.broadband.nps (current score), surveys.broadband.responses (count) -->
|
|
168
|
+
<!-- STYLE: var(--surface-card) bg, var(--shadow-card) shadow, 3px left border using COLORS.broadband -->
|
|
169
|
+
<div class="kpi-card">
|
|
170
|
+
<div class="kpi-score">+32</div> <!-- DATA-SOURCE: surveys.broadband.nps -->
|
|
171
|
+
<div class="kpi-delta">▲ 2.1</div> <!-- DATA-SOURCE: deriveMom(trend.historicalNPS.byProduct.broadband) -->
|
|
172
|
+
<div class="kpi-responses">1,247 responses</div> <!-- DATA-SOURCE: surveys.broadband.responses -->
|
|
173
|
+
<div class="sparkline">
|
|
174
|
+
<!-- React: <Sparkline data={trend.historicalNPS.byProduct.broadband}
|
|
175
|
+
color={COLORS.broadband} height={72} /> -->
|
|
176
|
+
<!-- IMPLEMENTATION NOTE [CHART]: Recharts AreaChart, no axes/grid/tooltip,
|
|
177
|
+
gradient fill from color at opacity 0.3 to opacity 0. -->
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Completeness Check
|
|
183
|
+
|
|
184
|
+
Before saving the mockup, verify:
|
|
185
|
+
- [ ] Every visual section has at least one **component annotation**
|
|
186
|
+
- [ ] Every dynamic value has a **data source annotation** with the exact JSON path
|
|
187
|
+
- [ ] Every chart/graph has an **implementation note** specifying the chart library and config
|
|
188
|
+
- [ ] The implementing agent can build the feature using ONLY the mockup + annotations (no guessing)
|
|
189
|
+
|
|
190
|
+
### Step 4: Write Artifact
|
|
191
|
+
|
|
192
|
+
1. Save the mockup file to `agent-docs/ux/mockups/{feature-slug}.html` (or `.svg`)
|
|
193
|
+
2. Add YAML header to a companion markdown file or embed as HTML comment:
|
|
194
|
+
```yaml
|
|
195
|
+
agent: ux-designer
|
|
196
|
+
created: {date}
|
|
197
|
+
status: current
|
|
198
|
+
chain_id: {chain_id if provided}
|
|
199
|
+
approval: pending
|
|
200
|
+
framework: {target framework}
|
|
201
|
+
feasibility_warnings: {list any constraints encountered}
|
|
202
|
+
```
|
|
203
|
+
3. Update `agent-docs/ARTIFACTS.md` manifest with the new entry
|
|
204
|
+
|
|
205
|
+
### Step 5: Report
|
|
206
|
+
|
|
207
|
+
Provide:
|
|
208
|
+
- Path to the mockup file
|
|
209
|
+
- Framework feasibility summary (what was checked, any warnings)
|
|
210
|
+
- Implementation notes for the agent that will build this (which API/component to use, what CSS approach works)
|
|
211
|
+
- If alternatives were chosen, explain why the original approach wouldn't work
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Framework Feasibility Quick Reference
|
|
216
|
+
|
|
217
|
+
### Streamlit-Specific
|
|
218
|
+
|
|
219
|
+
| Want to do | Don't use | Instead use |
|
|
220
|
+
|-----------|-----------|-------------|
|
|
221
|
+
| Floating element (chat widget, FAB) | `position: fixed/absolute` | `declare_component()` with custom HTML/JS |
|
|
222
|
+
| Custom styled container | Global CSS | `st.container(key="name")` + `.st-key-name` selector |
|
|
223
|
+
| Modal/overlay | `z-index` + absolute positioning | `st.dialog()` (Streamlit 1.33+) or `st.modal()` |
|
|
224
|
+
| Sidebar content | Custom sidebar HTML | `st.sidebar` API |
|
|
225
|
+
| Custom header | Fixed position header | `st.container()` at top + CSS with `st.container(key=)` |
|
|
226
|
+
| External JavaScript | `<script src="cdn...">` | Bundle locally for air-gapped; use `components.html()` |
|
|
227
|
+
|
|
228
|
+
### React-Specific
|
|
229
|
+
|
|
230
|
+
| Want to do | Watch out for | Recommended approach |
|
|
231
|
+
|-----------|---------------|---------------------|
|
|
232
|
+
| Direct DOM manipulation | React re-renders will overwrite | Use refs (`useRef`) or state-driven rendering |
|
|
233
|
+
| Global styles | May conflict with component styles | CSS Modules, styled-components, or Tailwind |
|
|
234
|
+
| Third-party widgets | jQuery plugins fight React | Find React-native alternatives or wrap in `useEffect` |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Important Notes
|
|
239
|
+
|
|
240
|
+
- This skill is designed to be loaded by `@ux-designer` or `@frontend-developer` agents
|
|
241
|
+
- The framework constraint tables should be extended as new frameworks and gotchas are discovered
|
|
242
|
+
- Always check `project-config.md` for the deployment environment — air-gapped deployments restrict external dependencies
|