wizz-method 1.4.1 → 1.5.1
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 +6 -4
- package/package.json +39 -3
- package/skills-registry.yaml +109 -8
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +2 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +5 -2
- package/src/core-skills/_shared/handoff-protocol.md +61 -0
- package/src/core-skills/wizz-customize/SKILL.md +2 -2
- package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +1 -1
- package/src/core-skills/wizz-party-mode/references/mode-subagent.md +1 -1
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +2 -0
- package/src/modules/wizz/README.md +3 -3
- package/src/modules/wizz/_shared/communication-rules.md +13 -0
- package/src/modules/wizz/_shared/encerramento.md +2 -2
- package/src/modules/wizz/agents/wizz-ads/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +2 -2
- package/src/modules/wizz/agents/wizz-designer/customize.toml +6 -4
- package/src/modules/wizz/agents/wizz-growth/customize.toml +11 -3
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +9 -5
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +5 -7
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +2 -4
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +5 -5
- package/src/modules/wizz/agents/wizz-qa/customize.toml +9 -7
- package/src/modules/wizz/agents/wizz-seo/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-social/customize.toml +9 -8
- package/src/modules/wizz/module.yaml +1 -1
- package/src/modules/wizz/overrides/wizz-agent-analyst.toml +4 -5
- package/src/modules/wizz/overrides/wizz-agent-architect.toml +11 -3
- package/src/modules/wizz/overrides/wizz-agent-dev.toml +6 -4
- package/src/modules/wizz/overrides/wizz-agent-pm.toml +4 -2
- package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +3 -5
- package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +4 -2
- package/src/modules/wizz/scripts/wizz-init.mjs +3 -1
- package/src/scripts/__pycache__/resolve_customization.cpython-314.pyc +0 -0
- package/src/scripts/memlog.py +9 -0
- package/src/scripts/resolve_customization.py +93 -3
- package/src/skills-lib/adversarial-reviewer/SKILL.md +2 -0
- package/src/skills-lib/algorithmic-art/SKILL.md +29 -369
- package/src/skills-lib/algorithmic-art/references/interactive-artifact.md +139 -0
- package/src/skills-lib/algorithmic-art/references/p5js-implementation.md +121 -0
- package/src/skills-lib/algorithmic-art/references/philosophy-creation.md +88 -0
- package/src/skills-lib/canvas-design/SKILL.md +9 -38
- package/src/skills-lib/canvas-design/references/canvas-execution.md +21 -0
- package/src/skills-lib/canvas-design/references/philosophy-examples.md +25 -0
- package/src/skills-lib/cerebro/SKILL.md +8 -273
- package/src/skills-lib/cerebro/references/comandos-pesquisa-e-sync.md +44 -0
- package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +94 -0
- package/src/skills-lib/cerebro/references/comandos-sessao.md +122 -0
- package/src/skills-lib/content-strategy/SKILL.md +12 -316
- package/src/skills-lib/content-strategy/references/content-types.md +52 -0
- package/src/skills-lib/content-strategy/references/ideation-sources.md +78 -0
- package/src/skills-lib/content-strategy/references/pillars-and-keywords.md +78 -0
- package/src/skills-lib/content-strategy/references/prioritization-and-output.md +57 -0
- package/src/skills-lib/decision-maker/SKILL.md +13 -466
- package/src/skills-lib/decision-maker/references/commands-and-edge-cases.md +40 -0
- package/src/skills-lib/decision-maker/references/output-format.md +161 -0
- package/src/skills-lib/decision-maker/references/references-and-extraction.md +129 -0
- package/src/skills-lib/decision-maker/references/six-decisions.md +122 -0
- package/src/skills-lib/decision-maker/references/wizz-method-handoff.md +22 -0
- package/src/skills-lib/find-skills/SKILL.md +9 -6
- package/src/skills-lib/form-cro/SKILL.md +12 -390
- package/src/skills-lib/form-cro/references/experiments.md +73 -0
- package/src/skills-lib/form-cro/references/field-optimization.md +92 -0
- package/src/skills-lib/form-cro/references/flow-and-errors.md +71 -0
- package/src/skills-lib/form-cro/references/measurement-output.md +41 -0
- package/src/skills-lib/form-cro/references/trust-and-form-types.md +54 -0
- package/src/skills-lib/graphify/SKILL.md +2 -20
- package/src/skills-lib/huashu-design/SKILL.md +42 -596
- package/src/skills-lib/huashu-design/references/anti-slop-principles.md +62 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +1 -1
- package/src/skills-lib/huashu-design/references/cross-agent-adaptation.md +14 -0
- package/src/skills-lib/huashu-design/references/design-direction-fallback.md +113 -0
- package/src/skills-lib/huashu-design/references/exception-handling.md +18 -0
- package/src/skills-lib/huashu-design/references/fact-verification.md +36 -0
- package/src/skills-lib/huashu-design/references/ios-prototype.md +146 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +7 -0
- package/src/skills-lib/huashu-design/references/starter-components.md +24 -0
- package/src/skills-lib/huashu-design/references/video-export.md +1 -1
- package/src/skills-lib/huashu-design/references/watermark-policy.md +23 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +12 -1
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +11 -0
- package/src/skills-lib/humanizer/SKILL.md +23 -431
- package/src/skills-lib/humanizer/references/ai-writing-patterns.md +314 -0
- package/src/skills-lib/humanizer/references/full-example.md +72 -0
- package/src/skills-lib/humanizer/references/personality-and-soul.md +36 -0
- package/src/skills-lib/impeccable/SKILL.md +37 -153
- package/src/skills-lib/impeccable/references/design-rules.md +95 -0
- package/src/skills-lib/impeccable/references/pin-unpin-and-hooks.md +17 -0
- package/src/skills-lib/impeccable/references/routing-rules.md +28 -0
- package/src/skills-lib/implementation-planner/SKILL.md +22 -529
- package/src/skills-lib/implementation-planner/references/folder-structure-and-dependencies.md +132 -0
- package/src/skills-lib/implementation-planner/references/handoff-template.md +34 -0
- package/src/skills-lib/implementation-planner/references/implementation-phases.md +54 -0
- package/src/skills-lib/implementation-planner/references/implementation-types.md +28 -0
- package/src/skills-lib/implementation-planner/references/motion-path-implementation.md +57 -0
- package/src/skills-lib/implementation-planner/references/output-templates.md +92 -0
- package/src/skills-lib/implementation-planner/references/performance-plan.md +52 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +4 -224
- package/src/skills-lib/inicio-de-projeto/references/implementacao-api-forms.md +112 -0
- package/src/skills-lib/inicio-de-projeto/references/padroes-arquiteturais-e-pastas.md +71 -0
- package/src/skills-lib/inicio-de-projeto/references/seguranca-e-regras-codigo.md +26 -0
- package/src/skills-lib/launch-strategy/SKILL.md +9 -311
- package/src/skills-lib/launch-strategy/references/five-phase-approach.md +76 -0
- package/src/skills-lib/launch-strategy/references/launch-checklist.md +34 -0
- package/src/skills-lib/launch-strategy/references/orb-framework.md +76 -0
- package/src/skills-lib/launch-strategy/references/post-launch-and-ongoing.md +64 -0
- package/src/skills-lib/launch-strategy/references/product-hunt-strategy.md +52 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +18 -401
- package/src/skills-lib/marketing-psychology/references/design-and-delivery-models.md +56 -0
- package/src/skills-lib/marketing-psychology/references/foundational-thinking-models.md +76 -0
- package/src/skills-lib/marketing-psychology/references/growth-and-scaling-models.md +46 -0
- package/src/skills-lib/marketing-psychology/references/influencing-behavior.md +71 -0
- package/src/skills-lib/marketing-psychology/references/pricing-psychology.md +31 -0
- package/src/skills-lib/marketing-psychology/references/understanding-buyers.md +116 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +23 -370
- package/src/skills-lib/motion-3d-director/references/image-to-video-workflow.md +166 -0
- package/src/skills-lib/motion-3d-director/references/motion-paths.md +119 -0
- package/src/skills-lib/motion-3d-director/references/performance-and-handoff.md +51 -0
- package/src/skills-lib/popup-cro/SKILL.md +11 -414
- package/src/skills-lib/popup-cro/references/design-copy-compliance.md +81 -0
- package/src/skills-lib/popup-cro/references/experiments.md +82 -0
- package/src/skills-lib/popup-cro/references/rules-measurement-output.md +87 -0
- package/src/skills-lib/popup-cro/references/triggers-and-popup-types.md +108 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +13 -321
- package/src/skills-lib/signup-flow-cro/references/experiments.md +72 -0
- package/src/skills-lib/signup-flow-cro/references/field-optimization.md +49 -0
- package/src/skills-lib/signup-flow-cro/references/flow-structure.md +38 -0
- package/src/skills-lib/signup-flow-cro/references/measurement-output-patterns.md +62 -0
- package/src/skills-lib/signup-flow-cro/references/trust-and-post-submit.md +40 -0
- package/src/skills-lib/taste-redesign/SKILL.md +10 -146
- package/src/skills-lib/taste-redesign/references/design-audit.md +120 -0
- package/src/skills-lib/taste-redesign/references/upgrade-techniques.md +31 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +9 -353
- package/src/skills-lib/ui-ux-pro-max/references/common-rules-checklist.md +76 -0
- package/src/skills-lib/ui-ux-pro-max/references/rules-quick-reference.md +70 -0
- package/src/skills-lib/ui-ux-pro-max/references/search-reference.md +45 -0
- package/src/skills-lib/ui-ux-pro-max/references/workflow-guide.md +157 -0
- package/src/skills-lib/web-security/SKILL.md +13 -187
- package/src/skills-lib/web-security/references/checklist-deploy.md +52 -0
- package/src/skills-lib/web-security/references/headers-rate-limit-cors.md +78 -0
- package/src/skills-lib/web-security/references/owasp-top5-detalhado.md +51 -0
- package/src/skills-lib/wizz-router/SKILL.md +20 -9
- package/src/skills-lib/wizz-router/references/auditoria-360.md +4 -4
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +15 -15
- package/tools/fetch-assets.mjs +277 -0
- package/tools/installer/commands/fetch-assets.js +71 -0
- package/tools/installer/commands/install.js +35 -3
- package/tools/installer/commands/trace-report.js +131 -0
- package/tools/installer/core/config.js +9 -0
- package/tools/installer/core/help-catalog.js +181 -0
- package/tools/installer/core/install-paths.js +48 -3
- package/tools/installer/core/installer.js +253 -618
- package/tools/installer/core/manifest-generator.js +8 -1
- package/tools/installer/core/manifest.js +67 -22
- package/tools/installer/core/module-config-writer.js +110 -0
- package/tools/installer/core/preflight-tools-check.js +82 -0
- package/tools/installer/core/quick-update.js +209 -0
- package/tools/installer/core/user-file-preservation.js +250 -0
- package/tools/installer/modules/channel-resolver.js +34 -2
- package/tools/installer/modules/cli-config.js +127 -34
- package/tools/installer/modules/deps-cache.js +28 -1
- package/tools/installer/modules/env-vars.js +446 -0
- package/tools/installer/modules/external-manager.js +40 -6
- package/tools/installer/modules/mcp-config.js +180 -37
- package/tools/installer/modules/module-help-schema.js +2 -1
- package/tools/installer/modules/official-modules.js +1 -1
- package/tools/installer/modules/registry-resolve.js +74 -0
- package/tools/installer/modules/skills-lib.js +11 -15
- package/tools/installer/ui.js +71 -5
- package/wizz-modules.yaml +15 -5
- package/.claude-plugin/marketplace.json +0 -80
- package/AGENTS.md +0 -12
- package/build/artifacts/llms-full.txt +0 -4049
- package/build/artifacts/llms.txt +0 -28
- package/build/site/404.html +0 -55
- package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +0 -1
- package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +0 -1
- package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +0 -1
- package/build/site/_astro/ec.0vx5m.js +0 -3
- package/build/site/_astro/ec.v4551.css +0 -1
- package/build/site/_astro/index.DdjI3lF_.css +0 -1
- package/build/site/_astro/page.B1D-nYk3.js +0 -1
- package/build/site/_astro/print.DNXP8c50.css +0 -1
- package/build/site/_astro/ui-core.D_Lfcn_I.js +0 -2
- package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
- package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
- package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
- package/build/site/diagrams/quick-dev-diagram.png +0 -0
- package/build/site/explanation/advanced-elicitation/index.html +0 -105
- package/build/site/explanation/adversarial-review/index.html +0 -109
- package/build/site/explanation/analysis-phase/index.html +0 -129
- package/build/site/explanation/brainstorming/index.html +0 -92
- package/build/site/explanation/checkpoint-preview/index.html +0 -121
- package/build/site/explanation/established-projects-faq/index.html +0 -107
- package/build/site/explanation/forensic-investigation/index.html +0 -167
- package/build/site/explanation/named-agents/index.html +0 -187
- package/build/site/explanation/party-mode/index.html +0 -256
- package/build/site/explanation/preventing-agent-conflicts/index.html +0 -185
- package/build/site/explanation/project-context/index.html +0 -198
- package/build/site/explanation/quick-dev/index.html +0 -113
- package/build/site/explanation/web-bundles/index.html +0 -178
- package/build/site/explanation/why-solutioning-matters/index.html +0 -168
- package/build/site/how-to/customize-wizz/index.html +0 -277
- package/build/site/how-to/established-projects/index.html +0 -165
- package/build/site/how-to/expand-wizz-for-your-org/index.html +0 -245
- package/build/site/how-to/get-answers-about-wizz/index.html +0 -129
- package/build/site/how-to/install-custom-modules/index.html +0 -197
- package/build/site/how-to/install-wizz/index.html +0 -330
- package/build/site/how-to/non-interactive-installation/index.html +0 -73
- package/build/site/how-to/project-context/index.html +0 -141
- package/build/site/how-to/quick-fixes/index.html +0 -122
- package/build/site/how-to/shard-large-documents/index.html +0 -103
- package/build/site/how-to/upgrade-to-v6/index.html +0 -185
- package/build/site/how-to/use-web-bundles/index.html +0 -99
- package/build/site/img/wizz-dark.png +0 -0
- package/build/site/img/wizz-light.png +0 -0
- package/build/site/index.html +0 -128
- package/build/site/llms-full.txt +0 -4049
- package/build/site/llms.txt +0 -28
- package/build/site/pagefind/fragment/en_175de32.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24258fb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24f53a6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_27ba8f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_2b5aa5c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_49047e0.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_4a187d2.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_514725b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_82aec61.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_85dcebf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_887ce56.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_89a1a7a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8ade291.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c11f8a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c1bde3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_94bfc21.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_9b57d7d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ab62b53.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_b0d23ee.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ba9fb37.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bb113eb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bfc56b6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_c6d9e48.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd772f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd885c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cefed6a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_d890205.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_da351b7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ea289f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f1c3711.pf_fragment +0 -0
- package/build/site/pagefind/index/en_5b9d8c6.pf_index +0 -0
- package/build/site/pagefind/index/en_868614c.pf_index +0 -0
- package/build/site/pagefind/index/en_e4f9bff.pf_index +0 -0
- package/build/site/pagefind/pagefind-entry.json +0 -1
- package/build/site/pagefind/pagefind-highlight.js +0 -1064
- package/build/site/pagefind/pagefind-modular-ui.css +0 -214
- package/build/site/pagefind/pagefind-modular-ui.js +0 -8
- package/build/site/pagefind/pagefind-ui.css +0 -1
- package/build/site/pagefind/pagefind-ui.js +0 -2
- package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
- package/build/site/pagefind/pagefind.js +0 -6
- package/build/site/pagefind/wasm.en.pagefind +0 -0
- package/build/site/pagefind/wasm.unknown.pagefind +0 -0
- package/build/site/reference/agents/index.html +0 -168
- package/build/site/reference/commands/index.html +0 -254
- package/build/site/reference/core-tools/index.html +0 -384
- package/build/site/reference/modules/index.html +0 -132
- package/build/site/reference/testing/index.html +0 -218
- package/build/site/reference/workflow-map/index.html +0 -266
- package/build/site/roadmap/index.html +0 -77
- package/build/site/robots.txt +0 -37
- package/build/site/sitemap-0.xml +0 -1
- package/build/site/sitemap-index.xml +0 -1
- package/build/site/tutorials/getting-started/index.html +0 -386
- package/build/site/wizz-icon-orange.svg +0 -7
- package/build/site/workflow-map-diagram-fr.html +0 -375
- package/build/site/workflow-map-diagram.html +0 -375
- package/evals/bmm-skills/wizz-product-brief/evals.json +0 -237
- package/evals/bmm-skills/wizz-product-brief/files/branfield-memo.md +0 -46
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/addendum.md +0 -40
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/brief.md +0 -56
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/decision-log.md +0 -27
- package/evals/bmm-skills/wizz-product-brief/files/meridian-mobility-report.md +0 -116
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/addendum.md +0 -41
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/brief.md +0 -57
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/decision-log.md +0 -29
- package/evals/bmm-skills/wizz-product-brief/files/pantry-bridge-interviews.md +0 -90
- package/evals/bmm-skills/wizz-product-brief/files/q2-brainstorm.md +0 -101
- package/evals/bmm-skills/wizz-product-brief/triggers.json +0 -18
- package/evals/routing/dataset.json +0 -290
- package/evals/routing/run-routing-eval.mjs +0 -89
- package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
- package/src/squads/README.md +0 -39
- package/src/squads/advisory-board/README.md +0 -34
- package/src/squads/advisory-board/agents/board-chair.md +0 -161
- package/src/squads/advisory-board/agents/brene-brown.md +0 -296
- package/src/squads/advisory-board/agents/charlie-munger.md +0 -590
- package/src/squads/advisory-board/agents/derek-sivers.md +0 -268
- package/src/squads/advisory-board/agents/naval-ravikant.md +0 -251
- package/src/squads/advisory-board/agents/patrick-lencioni.md +0 -394
- package/src/squads/advisory-board/agents/peter-thiel.md +0 -269
- package/src/squads/advisory-board/agents/ray-dalio.md +0 -567
- package/src/squads/advisory-board/agents/reid-hoffman.md +0 -278
- package/src/squads/advisory-board/agents/simon-sinek.md +0 -291
- package/src/squads/advisory-board/agents/yvon-chouinard.md +0 -275
- package/src/squads/advisory-board/squad.yaml +0 -50
- package/src/squads/brand-squad/README.md +0 -60
- package/src/squads/brand-squad/agents/al-ries.md +0 -175
- package/src/squads/brand-squad/agents/alina-wheeler.md +0 -184
- package/src/squads/brand-squad/agents/archetype-consultant.md +0 -215
- package/src/squads/brand-squad/agents/brand-chief.md +0 -158
- package/src/squads/brand-squad/agents/byron-sharp.md +0 -169
- package/src/squads/brand-squad/agents/david-aaker.md +0 -166
- package/src/squads/brand-squad/agents/denise-yohn.md +0 -172
- package/src/squads/brand-squad/agents/domain-scout.md +0 -135
- package/src/squads/brand-squad/agents/donald-miller.md +0 -179
- package/src/squads/brand-squad/agents/emily-heyward.md +0 -147
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +0 -189
- package/src/squads/brand-squad/agents/kevin-keller.md +0 -199
- package/src/squads/brand-squad/agents/marty-neumeier.md +0 -170
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +0 -180
- package/src/squads/brand-squad/agents/naming-strategist.md +0 -171
- package/src/squads/brand-squad/squad.yaml +0 -117
- package/src/squads/c-level-squad/README.md +0 -29
- package/src/squads/c-level-squad/agents/caio-architect.md +0 -235
- package/src/squads/c-level-squad/agents/cio-engineer.md +0 -209
- package/src/squads/c-level-squad/agents/cmo-architect.md +0 -208
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +0 -193
- package/src/squads/c-level-squad/agents/cto-architect.md +0 -194
- package/src/squads/c-level-squad/agents/vision-chief.md +0 -201
- package/src/squads/c-level-squad/squad.yaml +0 -45
- package/src/squads/claude-code-mastery/README.md +0 -146
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +0 -554
- package/src/squads/claude-code-mastery/agents/config-engineer.md +0 -865
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +0 -1013
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +0 -791
- package/src/squads/claude-code-mastery/agents/project-integrator.md +0 -1196
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +0 -931
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +0 -1250
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +0 -1008
- package/src/squads/copy-squad/README.md +0 -65
- package/src/squads/copy-squad/agents/andre-chaperon.md +0 -206
- package/src/squads/copy-squad/agents/ben-settle.md +0 -194
- package/src/squads/copy-squad/agents/claude-hopkins.md +0 -182
- package/src/squads/copy-squad/agents/clayton-makepeace.md +0 -225
- package/src/squads/copy-squad/agents/copy-chief.md +0 -166
- package/src/squads/copy-squad/agents/dan-kennedy.md +0 -202
- package/src/squads/copy-squad/agents/dan-koe.md +0 -223
- package/src/squads/copy-squad/agents/david-deutsch.md +0 -197
- package/src/squads/copy-squad/agents/david-ogilvy.md +0 -198
- package/src/squads/copy-squad/agents/eugene-schwartz.md +0 -238
- package/src/squads/copy-squad/agents/frank-kern.md +0 -195
- package/src/squads/copy-squad/agents/gary-bencivenga.md +0 -197
- package/src/squads/copy-squad/agents/gary-halbert.md +0 -219
- package/src/squads/copy-squad/agents/jim-rutz.md +0 -193
- package/src/squads/copy-squad/agents/joe-sugarman.md +0 -234
- package/src/squads/copy-squad/agents/john-carlton.md +0 -203
- package/src/squads/copy-squad/agents/jon-benson.md +0 -196
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +0 -188
- package/src/squads/copy-squad/agents/robert-collier.md +0 -183
- package/src/squads/copy-squad/agents/russell-brunson.md +0 -229
- package/src/squads/copy-squad/agents/ry-schwartz.md +0 -185
- package/src/squads/copy-squad/agents/stefan-georgi.md +0 -188
- package/src/squads/copy-squad/agents/todd-brown.md +0 -171
- package/src/squads/copy-squad/squad.yaml +0 -87
- package/src/squads/cybersecurity/README.md +0 -38
- package/src/squads/cybersecurity/agents/busterer.md +0 -108
- package/src/squads/cybersecurity/agents/cartographer.md +0 -114
- package/src/squads/cybersecurity/agents/chris-sanders.md +0 -205
- package/src/squads/cybersecurity/agents/command-generator.md +0 -121
- package/src/squads/cybersecurity/agents/cyber-chief.md +0 -120
- package/src/squads/cybersecurity/agents/dirber.md +0 -111
- package/src/squads/cybersecurity/agents/fuzzer.md +0 -121
- package/src/squads/cybersecurity/agents/georgia-weidman.md +0 -178
- package/src/squads/cybersecurity/agents/jim-manico.md +0 -182
- package/src/squads/cybersecurity/agents/marcus-carey.md +0 -200
- package/src/squads/cybersecurity/agents/omar-santos.md +0 -206
- package/src/squads/cybersecurity/agents/peter-kim.md +0 -179
- package/src/squads/cybersecurity/agents/ripper.md +0 -121
- package/src/squads/cybersecurity/agents/rogue.md +0 -116
- package/src/squads/cybersecurity/agents/shannon-runner.md +0 -108
- package/src/squads/cybersecurity/squad.yaml +0 -56
- package/src/squads/data-squad/README.md +0 -30
- package/src/squads/data-squad/agents/avinash-kaushik.md +0 -268
- package/src/squads/data-squad/agents/data-chief.md +0 -167
- package/src/squads/data-squad/agents/david-spinks.md +0 -277
- package/src/squads/data-squad/agents/nick-mehta.md +0 -294
- package/src/squads/data-squad/agents/peter-fader.md +0 -246
- package/src/squads/data-squad/agents/sean-ellis.md +0 -303
- package/src/squads/data-squad/agents/wes-kao.md +0 -268
- package/src/squads/data-squad/squad.yaml +0 -46
- package/src/squads/design-squad/README.md +0 -31
- package/src/squads/design-squad/agents/brad-frost.md +0 -185
- package/src/squads/design-squad/agents/dan-mall.md +0 -178
- package/src/squads/design-squad/agents/dave-malouf.md +0 -198
- package/src/squads/design-squad/agents/design-chief.md +0 -109
- package/src/squads/design-squad/agents/design-system-architect.md +0 -109
- package/src/squads/design-squad/agents/ui-engineer.md +0 -102
- package/src/squads/design-squad/agents/ux-designer.md +0 -105
- package/src/squads/design-squad/agents/visual-generator.md +0 -108
- package/src/squads/design-squad/squad.yaml +0 -48
- package/src/squads/hormozi-squad/README.md +0 -39
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +0 -159
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +0 -111
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +0 -179
- package/src/squads/hormozi-squad/agents/hormozi-content.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +0 -152
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +0 -177
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +0 -160
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +0 -198
- package/src/squads/hormozi-squad/agents/hormozi-models.md +0 -191
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +0 -197
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +0 -151
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +0 -175
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +0 -160
- package/src/squads/hormozi-squad/squad.yaml +0 -60
- package/src/squads/movement/README.md +0 -29
- package/src/squads/movement/agents/analista-de-impacto.md +0 -350
- package/src/squads/movement/agents/estrategista-de-ciclo.md +0 -301
- package/src/squads/movement/agents/fenomenologo.md +0 -169
- package/src/squads/movement/agents/identitario.md +0 -265
- package/src/squads/movement/agents/manifestador.md +0 -279
- package/src/squads/movement/agents/movement-architect.md +0 -210
- package/src/squads/movement/agents/movement-chief.md +0 -135
- package/src/squads/movement/squad.yaml +0 -45
- package/src/squads/storytelling/README.md +0 -35
- package/src/squads/storytelling/agents/blake-snyder.md +0 -225
- package/src/squads/storytelling/agents/dan-harmon.md +0 -167
- package/src/squads/storytelling/agents/joseph-campbell.md +0 -184
- package/src/squads/storytelling/agents/keith-johnstone.md +0 -157
- package/src/squads/storytelling/agents/kindra-hall.md +0 -162
- package/src/squads/storytelling/agents/marshall-ganz.md +0 -167
- package/src/squads/storytelling/agents/matthew-dicks.md +0 -152
- package/src/squads/storytelling/agents/nancy-duarte.md +0 -154
- package/src/squads/storytelling/agents/oren-klaff.md +0 -166
- package/src/squads/storytelling/agents/park-howell.md +0 -152
- package/src/squads/storytelling/agents/shawn-coyne.md +0 -208
- package/src/squads/storytelling/agents/story-chief.md +0 -155
- package/src/squads/storytelling/squad.yaml +0 -52
- package/src/squads/traffic-masters/README.md +0 -39
- package/src/squads/traffic-masters/agents/ad-midas.md +0 -149
- package/src/squads/traffic-masters/agents/ads-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/creative-analyst.md +0 -142
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +0 -174
- package/src/squads/traffic-masters/agents/fiscal.md +0 -144
- package/src/squads/traffic-masters/agents/kasim-aslam.md +0 -158
- package/src/squads/traffic-masters/agents/media-buyer.md +0 -159
- package/src/squads/traffic-masters/agents/molly-pittman.md +0 -185
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +0 -157
- package/src/squads/traffic-masters/agents/pedro-sobral.md +0 -158
- package/src/squads/traffic-masters/agents/performance-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/pixel-specialist.md +0 -144
- package/src/squads/traffic-masters/agents/ralph-burns.md +0 -163
- package/src/squads/traffic-masters/agents/scale-optimizer.md +0 -144
- package/src/squads/traffic-masters/agents/tom-breeze.md +0 -175
- package/src/squads/traffic-masters/agents/traffic-chief.md +0 -97
- package/src/squads/traffic-masters/squad.yaml +0 -59
- package/tools/bundle-web-bundles.js +0 -117
- package/tools/format-workflow-md.js +0 -263
- package/tools/hooks/README.md +0 -17
- package/tools/hooks/security-defensive-context.js +0 -70
- package/tools/hooks/session-rules.js +0 -38
- package/tools/hooks/wizz-router-enforce.js +0 -188
- package/tools/javascript-conventions.md +0 -5
- package/tools/migrate-custom-module-paths.js +0 -124
- package/tools/skill-validator.md +0 -368
- package/tools/sync-global.mjs +0 -84
- package/tools/validate-sidebar-order.js +0 -388
- package/tools/validate-skills.js +0 -708
- package/tools/validate-svg-changes.sh +0 -356
- /package/tools/installer/{cli-utils.js → banner.js} +0 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Full Workflow Guide
|
|
2
|
+
|
|
3
|
+
Load this file when actually building or reviewing a UI and you need the complete step-by-step procedure (not just the first command).
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
Check if Python is installed:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python3 --version || python --version
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If Python is not installed, install it based on user's OS:
|
|
14
|
+
|
|
15
|
+
**macOS:**
|
|
16
|
+
```bash
|
|
17
|
+
brew install python3
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Ubuntu/Debian:**
|
|
21
|
+
```bash
|
|
22
|
+
sudo apt update && sudo apt install python3
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Windows:**
|
|
26
|
+
```powershell
|
|
27
|
+
winget install Python.Python.3.12
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## How to Use This Skill
|
|
31
|
+
|
|
32
|
+
When user requests UI/UX work (design, build, create, implement, review, fix, improve), follow this workflow:
|
|
33
|
+
|
|
34
|
+
### Step 1: Analyze User Requirements
|
|
35
|
+
|
|
36
|
+
Extract key information from user request:
|
|
37
|
+
- **Product type**: SaaS, e-commerce, portfolio, dashboard, landing page, etc.
|
|
38
|
+
- **Style keywords**: minimal, playful, professional, elegant, dark mode, etc.
|
|
39
|
+
- **Industry**: healthcare, fintech, gaming, education, etc.
|
|
40
|
+
- **Stack**: React, Vue, Next.js, or default to `html-tailwind`
|
|
41
|
+
|
|
42
|
+
### Step 2: Generate Design System (REQUIRED)
|
|
43
|
+
|
|
44
|
+
**Always start with `--design-system`** to get comprehensive recommendations with reasoning:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <keywords>" --design-system [-p "Project Name"]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This command:
|
|
51
|
+
1. Searches 5 domains in parallel (product, style, color, landing, typography)
|
|
52
|
+
2. Applies reasoning rules from `ui-reasoning.csv` to select best matches
|
|
53
|
+
3. Returns complete design system: pattern, style, colors, typography, effects
|
|
54
|
+
4. Includes anti-patterns to avoid
|
|
55
|
+
|
|
56
|
+
**Example:**
|
|
57
|
+
```bash
|
|
58
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "beauty spa wellness service" --design-system -p "Serenity Spa"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 2b: Persist Design System (Master + Overrides Pattern)
|
|
62
|
+
|
|
63
|
+
To save the design system for hierarchical retrieval across sessions, add `--persist`:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This creates:
|
|
70
|
+
- `design-system/MASTER.md` — Global Source of Truth with all design rules
|
|
71
|
+
- `design-system/pages/` — Folder for page-specific overrides
|
|
72
|
+
|
|
73
|
+
**With page-specific override:**
|
|
74
|
+
```bash
|
|
75
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name" --page "dashboard"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
This also creates:
|
|
79
|
+
- `design-system/pages/dashboard.md` — Page-specific deviations from Master
|
|
80
|
+
|
|
81
|
+
**How hierarchical retrieval works:**
|
|
82
|
+
1. When building a specific page (e.g., "Checkout"), first check `design-system/pages/checkout.md`
|
|
83
|
+
2. If the page file exists, its rules **override** the Master file
|
|
84
|
+
3. If not, use `design-system/MASTER.md` exclusively
|
|
85
|
+
|
|
86
|
+
### Step 3: Supplement with Detailed Searches (as needed)
|
|
87
|
+
|
|
88
|
+
After getting the design system, use domain searches to get additional details:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**When to use detailed searches:**
|
|
95
|
+
|
|
96
|
+
| Need | Domain | Example |
|
|
97
|
+
|------|--------|---------|
|
|
98
|
+
| More style options | `style` | `--domain style "glassmorphism dark"` |
|
|
99
|
+
| Chart recommendations | `chart` | `--domain chart "real-time dashboard"` |
|
|
100
|
+
| UX best practices | `ux` | `--domain ux "animation accessibility"` |
|
|
101
|
+
| Alternative fonts | `typography` | `--domain typography "elegant luxury"` |
|
|
102
|
+
| Landing structure | `landing` | `--domain landing "hero social-proof"` |
|
|
103
|
+
|
|
104
|
+
### Step 4: Stack Guidelines (Default: html-tailwind)
|
|
105
|
+
|
|
106
|
+
Get implementation-specific best practices. If user doesn't specify a stack, **default to `html-tailwind`**.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "<keyword>" --stack html-tailwind
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Available stacks: `html-tailwind`, `react`, `nextjs`, `vue`, `svelte`, `swiftui`, `react-native`, `flutter`, `shadcn`, `jetpack-compose`
|
|
113
|
+
|
|
114
|
+
## Example Workflow
|
|
115
|
+
|
|
116
|
+
**User request:** "Làm landing page cho dịch vụ chăm sóc da chuyên nghiệp"
|
|
117
|
+
|
|
118
|
+
### Step 1: Analyze Requirements
|
|
119
|
+
- Product type: Beauty/Spa service
|
|
120
|
+
- Style keywords: elegant, professional, soft
|
|
121
|
+
- Industry: Beauty/Wellness
|
|
122
|
+
- Stack: html-tailwind (default)
|
|
123
|
+
|
|
124
|
+
### Step 2: Generate Design System (REQUIRED)
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "beauty spa wellness service elegant" --design-system -p "Serenity Spa"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Output:** Complete design system with pattern, style, colors, typography, effects, and anti-patterns.
|
|
131
|
+
|
|
132
|
+
### Step 3: Supplement with Detailed Searches (as needed)
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Get UX guidelines for animation and accessibility
|
|
136
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "animation accessibility" --domain ux
|
|
137
|
+
|
|
138
|
+
# Get alternative typography options if needed
|
|
139
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "elegant luxury serif" --domain typography
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Step 4: Stack Guidelines
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
python3 skills/ui-ux-pro-max/scripts/search.py "layout responsive form" --stack html-tailwind
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Then:** Synthesize design system + detailed searches and implement the design.
|
|
149
|
+
|
|
150
|
+
## Tips for Better Results
|
|
151
|
+
|
|
152
|
+
1. **Be specific with keywords** - "healthcare SaaS dashboard" > "app"
|
|
153
|
+
2. **Search multiple times** - Different keywords reveal different insights
|
|
154
|
+
3. **Combine domains** - Style + Typography + Color = Complete design system
|
|
155
|
+
4. **Always check UX** - Search "animation", "z-index", "accessibility" for common issues
|
|
156
|
+
5. **Use stack flag** - Get implementation-specific best practices
|
|
157
|
+
6. **Iterate** - If first search doesn't match, try different keywords
|
|
@@ -11,200 +11,26 @@ description: >
|
|
|
11
11
|
|
|
12
12
|
## Falhas recorrentes em pentest (rankeadas por severidade)
|
|
13
13
|
|
|
14
|
-
As que mais aparecem numa auditoria, com a correção direta. Use como triagem rápida.
|
|
14
|
+
As que mais aparecem numa auditoria, com a correção direta. Use como triagem rápida — comece por aqui em toda revisão de segurança.
|
|
15
15
|
|
|
16
16
|
| # | Falha | Severidade | Correção | Onde |
|
|
17
17
|
|---|-------|-----------|----------|------|
|
|
18
|
-
| 1 | SQL Injection | 🔴 Crítica (parada de linha) | Query parametrizada / query-builder, nunca interpolar string |
|
|
19
|
-
| 2 | IDOR (recurso por ID sem checar dono) | 🔴 Crítica (parada de linha) | Validar posse do recurso no servidor a cada request |
|
|
20
|
-
| 3 | Rate limit ausente (brute force grátis) | 🟠 Alta | Limite por IP **e** por conta + lockout/CAPTCHA no login |
|
|
21
|
-
| 4 | CORS refletindo o `Origin` | 🟠 Alta | Allowlist de origens, nunca ecoar o `Origin` recebido |
|
|
22
|
-
| 5 | PII/dado demais na resposta (até hash de senha) | 🟠 Alta | Retornar só os campos necessários (allowlist de saída) |
|
|
23
|
-
| 6 | JWT na URL / token vivo pós-logout | 🟠 Alta | Token no header `Authorization` + revogar no logout | auth-and-secrets |
|
|
24
|
-
| 7 | Enumeração de usuário (erro revela se e-mail existe) | 🟡 Média | Mensagem genérica + resposta em tempo constante | auth-and-secrets |
|
|
25
|
-
| 8 | Clickjacking (sem header) | 🟡 Média (1 min) | `X-Frame-Options: DENY` + CSP `frame-ancestors 'none'` |
|
|
18
|
+
| 1 | SQL Injection | 🔴 Crítica (parada de linha) | Query parametrizada / query-builder, nunca interpolar string | `references/owasp-top5-detalhado.md` §3 |
|
|
19
|
+
| 2 | IDOR (recurso por ID sem checar dono) | 🔴 Crítica (parada de linha) | Validar posse do recurso no servidor a cada request | `references/owasp-top5-detalhado.md` §1 |
|
|
20
|
+
| 3 | Rate limit ausente (brute force grátis) | 🟠 Alta | Limite por IP **e** por conta + lockout/CAPTCHA no login | `references/headers-rate-limit-cors.md` |
|
|
21
|
+
| 4 | CORS refletindo o `Origin` | 🟠 Alta | Allowlist de origens, nunca ecoar o `Origin` recebido | `references/headers-rate-limit-cors.md` |
|
|
22
|
+
| 5 | PII/dado demais na resposta (até hash de senha) | 🟠 Alta | Retornar só os campos necessários (allowlist de saída) | `references/headers-rate-limit-cors.md` |
|
|
23
|
+
| 6 | JWT na URL / token vivo pós-logout | 🟠 Alta | Token no header `Authorization` + revogar no logout | skill `auth-and-secrets` |
|
|
24
|
+
| 7 | Enumeração de usuário (erro revela se e-mail existe) | 🟡 Média | Mensagem genérica + resposta em tempo constante | skill `auth-and-secrets` |
|
|
25
|
+
| 8 | Clickjacking (sem header) | 🟡 Média (1 min) | `X-Frame-Options: DENY` + CSP `frame-ancestors 'none'` | `references/headers-rate-limit-cors.md` |
|
|
26
26
|
|
|
27
27
|
> As duas primeiras (SQLi e IDOR) são **parada de linha**: apareceu, corrige antes de qualquer coisa.
|
|
28
28
|
|
|
29
|
-
##
|
|
30
|
-
- Verifique permissões no servidor, nunca apenas no frontend
|
|
31
|
-
- IDOR (Insecure Direct Object Reference): valide se o usuário tem acesso ao recurso pelo ID
|
|
32
|
-
- Princípio do menor privilégio em todas as rotas
|
|
33
|
-
- Next.js: middleware não é a única barreira. Re-verifique auth dentro do route handler, Server Action ou página (bypass de middleware já teve CVE)
|
|
29
|
+
## References (load on demand)
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
import { auth } from "@clerk/nextjs/server"
|
|
39
|
-
|
|
40
|
-
export async function GET(req: Request, { params }: { params: Promise<{ id: string }> }) {
|
|
41
|
-
const { userId } = await auth()
|
|
42
|
-
if (!userId) return new Response("Unauthorized", { status: 401 })
|
|
43
|
-
const { id } = await params
|
|
44
|
-
const { data } = await supabase
|
|
45
|
-
.from("projects")
|
|
46
|
-
.select("id, name")
|
|
47
|
-
.eq("id", id)
|
|
48
|
-
.eq("user_id", userId) // posse verificada na query, além do RLS
|
|
49
|
-
.single()
|
|
50
|
-
if (!data) return new Response("Not found", { status: 404 }) // 404, não 403 (não confirma que o recurso existe)
|
|
51
|
-
return Response.json(data)
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## 2. Cryptographic Failures
|
|
56
|
-
- HTTPS em tudo, sem exceção
|
|
57
|
-
- HSTS header com includeSubDomains
|
|
58
|
-
- Não exponha dados sensíveis em URLs (query strings ficam em logs)
|
|
59
|
-
|
|
60
|
-
## 3. Injection
|
|
61
|
-
- SQL: queries parametrizadas sempre
|
|
62
|
-
- XSS: sanitize outputs, use Content-Security-Policy
|
|
63
|
-
- Command injection: nunca execute input do usuário como comando shell
|
|
64
|
-
|
|
65
|
-
## 4. Cross-Site Scripting (XSS)
|
|
66
|
-
- Escape HTML em todo output de dado do usuário
|
|
67
|
-
- React/Next.js escapa JSX por padrão. O risco real está em `dangerouslySetInnerHTML`: sanitize antes com DOMPurify (ou não use)
|
|
68
|
-
- URLs vindas do usuário em `href`/`src`: bloqueie esquemas `javascript:` e `data:` (valide que começa com `https://` ou caminho relativo)
|
|
69
|
-
- Content-Security-Policy: bloqueie inline scripts
|
|
70
|
-
- HttpOnly e Secure flags nos cookies de sessão
|
|
71
|
-
|
|
72
|
-
## 5. CSRF
|
|
73
|
-
- SameSite=Strict ou Lax nos cookies de sessão
|
|
74
|
-
- CSRF token em formulários state-changing
|
|
75
|
-
- Verifique Origin/Referer em requests sensíveis
|
|
76
|
-
|
|
77
|
-
## Headers de segurança obrigatórios
|
|
78
|
-
|
|
79
|
-
`X-Frame-Options: DENY` + `frame-ancestors 'none'` no CSP mata **clickjacking** (o site não pode ser embutido em `<iframe>` de outro domínio). Fix de 1 minuto, sempre presente.
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
Content-Security-Policy: default-src 'self'; frame-ancestors 'none'
|
|
83
|
-
X-Frame-Options: DENY
|
|
84
|
-
X-Content-Type-Options: nosniff
|
|
85
|
-
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
|
|
86
|
-
Referrer-Policy: strict-origin-when-cross-origin
|
|
87
|
-
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Como adicionar em Next.js (`next.config.ts`):
|
|
91
|
-
```ts
|
|
92
|
-
async headers() {
|
|
93
|
-
return [
|
|
94
|
-
{
|
|
95
|
-
source: "/(.*)",
|
|
96
|
-
headers: [
|
|
97
|
-
{ key: "X-Frame-Options", value: "DENY" },
|
|
98
|
-
{ key: "X-Content-Type-Options", value: "nosniff" },
|
|
99
|
-
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
|
|
100
|
-
{ key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains; preload" },
|
|
101
|
-
{ key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=()" },
|
|
102
|
-
{
|
|
103
|
-
key: "Content-Security-Policy",
|
|
104
|
-
value: [
|
|
105
|
-
"default-src 'self'",
|
|
106
|
-
"script-src 'self' 'unsafe-inline' https://js.clerk.dev https://js.stripe.com https://www.googletagmanager.com",
|
|
107
|
-
"connect-src 'self' https://*.supabase.co https://api.clerk.dev https://api.stripe.com",
|
|
108
|
-
"frame-src https://js.stripe.com https://hooks.stripe.com",
|
|
109
|
-
"img-src 'self' data: https:",
|
|
110
|
-
"style-src 'self' 'unsafe-inline'",
|
|
111
|
-
].join("; "),
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
},
|
|
115
|
-
]
|
|
116
|
-
},
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
> **Cuidado:** CSP errada quebra o app. Teste sempre em dev antes de subir. Ajuste os domínios (`script-src`, `connect-src`) conforme os serviços reais do projeto.
|
|
120
|
-
|
|
121
|
-
## Rate Limiting
|
|
122
|
-
- Login: limite por IP **e** por conta (só por IP não segura brute force distribuído; só por conta não segura scan de vários e-mails)
|
|
123
|
-
- APIs públicas: limite por IP e por token
|
|
124
|
-
- Endpoints de reset de senha: especialmente restritivos
|
|
125
|
-
- Endpoints de cobrança (checkout, portal): sempre com rate limit
|
|
126
|
-
- Next.js: `@upstash/ratelimit` no route handler, ou WAF da Vercel para regras por rota
|
|
127
|
-
- Fail closed: se o backend do rate limit cair (ex: Redis fora), rotas de escrita devem negar a request, não deixar passar
|
|
128
|
-
- Comparações de token/secret: `crypto.timingSafeEqual`, nunca `!==` (detalhe em auth-and-secrets)
|
|
129
|
-
- Sem rate limit = brute force de graça. Somar lockout/CAPTCHA após N falhas no login
|
|
130
|
-
|
|
131
|
-
## CORS
|
|
132
|
-
- **Nunca reflita o header `Origin` recebido** de volta em `Access-Control-Allow-Origin` (isso libera qualquer site a chamar sua API com credenciais)
|
|
133
|
-
- Use uma **allowlist explícita** de origens: compare o `Origin` recebido contra a lista e só então ecoe o valor exato daquela origem
|
|
134
|
-
- `Access-Control-Allow-Credentials: true` NUNCA junto de `Access-Control-Allow-Origin: *`
|
|
135
|
-
- Padrão = negar: origem desconhecida → sem headers CORS (o browser bloqueia sozinho)
|
|
136
|
-
```ts
|
|
137
|
-
const ALLOWED = new Set(["https://app.exemplo.com", "https://exemplo.com"])
|
|
138
|
-
const origin = req.headers.get("origin")
|
|
139
|
-
if (origin && ALLOWED.has(origin)) {
|
|
140
|
-
res.headers.set("Access-Control-Allow-Origin", origin) // valor exato, nunca "*" com credentials
|
|
141
|
-
res.headers.set("Vary", "Origin")
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Vazamento de dados na resposta (over-fetch / PII)
|
|
146
|
-
- Retorne **só os campos que a tela precisa**: monte um DTO/allowlist de saída, nunca devolva a row inteira do banco
|
|
147
|
-
- NUNCA inclua `password`, `password_hash`, tokens, secrets ou colunas internas na resposta de API (é a falha mais grave da lista de PII)
|
|
148
|
-
- Supabase: `.select('id, name, email')` explícito, nunca `.select('*')` em endpoint que responde ao cliente
|
|
149
|
-
- Objeto do usuário logado: serialize por um mapper que só expõe campos públicos
|
|
150
|
-
- Erros: não vaze stack trace, SQL nem nome de tabela pro cliente. Mensagem genérica no response, detalhe só no log do servidor
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Checklist das 8 vulnerabilidades mais comuns
|
|
155
|
-
|
|
156
|
-
Usar como auditoria rápida antes de deploy ou revisão de segurança.
|
|
157
|
-
|
|
158
|
-
### 1. HTTPS forçado
|
|
159
|
-
- [ ] A plataforma força HTTPS? (Vercel: sim por padrão)
|
|
160
|
-
- [ ] Header `Strict-Transport-Security` configurado explicitamente no código?
|
|
161
|
-
- [ ] Nenhuma URL `http://` hardcoded em redirects ou fetch?
|
|
162
|
-
|
|
163
|
-
### 2. Validação no servidor
|
|
164
|
-
- [ ] Todo endpoint de API valida input com Zod (`.parse()` ou `.safeParse()`)?
|
|
165
|
-
- [ ] `workspaceId`/`userId` validados como UUID antes de ir ao banco?
|
|
166
|
-
- [ ] Regras de negócio re-validadas no backend (nunca confiar só no cliente)?
|
|
167
|
-
- [ ] Supabase: RLS ativo nas tabelas? Queries sempre filtram por `workspace_id`/`user_id`?
|
|
168
|
-
|
|
169
|
-
### 3. Senha do banco / secrets no código
|
|
170
|
-
- [ ] Nenhum secret hardcoded em `.ts`/`.tsx`/`.js`?
|
|
171
|
-
- [ ] `.env*` no `.gitignore`? (`git check-ignore -v .env.local`)
|
|
172
|
-
- [ ] `.env.local` nunca aparece em `git log --all`?
|
|
173
|
-
- [ ] Cripto usa chave de `process.env`, sem fallback de string?
|
|
174
|
-
- [ ] Grep de segurança: `grep -r "sk_live\|sk_test\|service_role\|eyJ" src/` → vazio?
|
|
175
|
-
|
|
176
|
-
### 4. Rate limiting na API
|
|
177
|
-
- [ ] Endpoints de autenticação têm rate limit por IP?
|
|
178
|
-
- [ ] Endpoints de cobrança (checkout, portal Stripe) têm rate limit?
|
|
179
|
-
- [ ] Endpoints que disparam operações caras/externas têm rate limit?
|
|
180
|
-
- [ ] Endpoints de admin têm rate limit + comparação timing-safe?
|
|
181
|
-
- [ ] Rotas de escrita de estado falham fechado se o rate limiter cair? (ex: `failOpen: false` na lib)
|
|
182
|
-
|
|
183
|
-
### 5. Content Security Policy
|
|
184
|
-
- [ ] Header `Content-Security-Policy` configurado? (`next.config.ts` `headers()` ou middleware)
|
|
185
|
-
- [ ] `X-Frame-Options: DENY` configurado?
|
|
186
|
-
- [ ] `X-Content-Type-Options: nosniff` configurado?
|
|
187
|
-
- [ ] CSP testada em dev sem erros no console?
|
|
188
|
-
|
|
189
|
-
### 6. Upload sem verificação de tipo
|
|
190
|
-
- [ ] Se há upload: verifica MIME type no servidor (não só no cliente)?
|
|
191
|
-
- [ ] Limite de tamanho de arquivo imposto no servidor?
|
|
192
|
-
- [ ] Extensões permitidas em allowlist (não blocklist)?
|
|
193
|
-
- [ ] Se não há upload: confirmar que não há `<input type="file">` escondido?
|
|
194
|
-
|
|
195
|
-
### 7. SQL injection na busca
|
|
196
|
-
- [ ] Nenhuma query monta SQL com string interpolation/concatenação?
|
|
197
|
-
- [ ] Supabase: todo acesso via query-builder (`.from().select().eq()`) ou RPC com params nomeados?
|
|
198
|
-
- [ ] RPCs Postgres auditadas no dashboard: não usam `EXECUTE format(...)` com input do usuário?
|
|
199
|
-
- [ ] Grep: `grep -r "\.sql\|raw(\|\.query(" src/` → revisar resultados?
|
|
200
|
-
|
|
201
|
-
### 8. Backup automatizado
|
|
202
|
-
- [ ] Plano Supabase tem PITR ou backup diário habilitado? (verificar no dashboard)
|
|
203
|
-
- [ ] Retenção de backup documentada?
|
|
204
|
-
- [ ] Existe runbook de restauração?
|
|
205
|
-
- [ ] Credenciais de backup protegidas (não no repo)?
|
|
206
|
-
|
|
207
|
-
---
|
|
31
|
+
- `references/owasp-top5-detalhado.md` — detalhe + exemplo de código (Next.js + Clerk + Supabase) para as 5 categorias OWASP mais comuns: Broken Access Control, Cryptographic Failures, Injection, XSS, CSRF. Carregar ao aprofundar numa falha específica da tabela acima.
|
|
32
|
+
- `references/headers-rate-limit-cors.md` — headers de segurança obrigatórios (com config pronta para `next.config.ts`), rate limiting (login/API/cobrança, fail-closed), CORS (allowlist, exemplo de código), e como evitar vazamento de PII/over-fetch na resposta de API. Carregar ao implementar ou revisar qualquer um desses quatro pontos.
|
|
33
|
+
- `references/checklist-deploy.md` — checklist das 8 vulnerabilidades mais comuns (HTTPS, validação no servidor, secrets, rate limit, CSP, upload, SQL injection, backup), em formato de auditoria pré-deploy. Carregar antes de um deploy ou revisão de segurança formal.
|
|
208
34
|
|
|
209
35
|
## Checklist de revisão rápida
|
|
210
36
|
- [ ] Todos os inputs do usuário são validados e sanitizados?
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Checklist das 8 Vulnerabilidades Mais Comuns
|
|
2
|
+
|
|
3
|
+
Carregue este arquivo para uma auditoria rápida antes de deploy ou revisão de segurança.
|
|
4
|
+
|
|
5
|
+
## 1. HTTPS forçado
|
|
6
|
+
- [ ] A plataforma força HTTPS? (Vercel: sim por padrão)
|
|
7
|
+
- [ ] Header `Strict-Transport-Security` configurado explicitamente no código?
|
|
8
|
+
- [ ] Nenhuma URL `http://` hardcoded em redirects ou fetch?
|
|
9
|
+
|
|
10
|
+
## 2. Validação no servidor
|
|
11
|
+
- [ ] Todo endpoint de API valida input com Zod (`.parse()` ou `.safeParse()`)?
|
|
12
|
+
- [ ] `workspaceId`/`userId` validados como UUID antes de ir ao banco?
|
|
13
|
+
- [ ] Regras de negócio re-validadas no backend (nunca confiar só no cliente)?
|
|
14
|
+
- [ ] Supabase: RLS ativo nas tabelas? Queries sempre filtram por `workspace_id`/`user_id`?
|
|
15
|
+
|
|
16
|
+
## 3. Senha do banco / secrets no código
|
|
17
|
+
- [ ] Nenhum secret hardcoded em `.ts`/`.tsx`/`.js`?
|
|
18
|
+
- [ ] `.env*` no `.gitignore`? (`git check-ignore -v .env.local`)
|
|
19
|
+
- [ ] `.env.local` nunca aparece em `git log --all`?
|
|
20
|
+
- [ ] Cripto usa chave de `process.env`, sem fallback de string?
|
|
21
|
+
- [ ] Grep de segurança: `grep -r "sk_live\|sk_test\|service_role\|eyJ" src/` → vazio?
|
|
22
|
+
|
|
23
|
+
## 4. Rate limiting na API
|
|
24
|
+
- [ ] Endpoints de autenticação têm rate limit por IP?
|
|
25
|
+
- [ ] Endpoints de cobrança (checkout, portal Stripe) têm rate limit?
|
|
26
|
+
- [ ] Endpoints que disparam operações caras/externas têm rate limit?
|
|
27
|
+
- [ ] Endpoints de admin têm rate limit + comparação timing-safe?
|
|
28
|
+
- [ ] Rotas de escrita de estado falham fechado se o rate limiter cair? (ex: `failOpen: false` na lib)
|
|
29
|
+
|
|
30
|
+
## 5. Content Security Policy
|
|
31
|
+
- [ ] Header `Content-Security-Policy` configurado? (`next.config.ts` `headers()` ou middleware)
|
|
32
|
+
- [ ] `X-Frame-Options: DENY` configurado?
|
|
33
|
+
- [ ] `X-Content-Type-Options: nosniff` configurado?
|
|
34
|
+
- [ ] CSP testada em dev sem erros no console?
|
|
35
|
+
|
|
36
|
+
## 6. Upload sem verificação de tipo
|
|
37
|
+
- [ ] Se há upload: verifica MIME type no servidor (não só no cliente)?
|
|
38
|
+
- [ ] Limite de tamanho de arquivo imposto no servidor?
|
|
39
|
+
- [ ] Extensões permitidas em allowlist (não blocklist)?
|
|
40
|
+
- [ ] Se não há upload: confirmar que não há `<input type="file">` escondido?
|
|
41
|
+
|
|
42
|
+
## 7. SQL injection na busca
|
|
43
|
+
- [ ] Nenhuma query monta SQL com string interpolation/concatenação?
|
|
44
|
+
- [ ] Supabase: todo acesso via query-builder (`.from().select().eq()`) ou RPC com params nomeados?
|
|
45
|
+
- [ ] RPCs Postgres auditadas no dashboard: não usam `EXECUTE format(...)` com input do usuário?
|
|
46
|
+
- [ ] Grep: `grep -r "\.sql\|raw(\|\.query(" src/` → revisar resultados?
|
|
47
|
+
|
|
48
|
+
## 8. Backup automatizado
|
|
49
|
+
- [ ] Plano Supabase tem PITR ou backup diário habilitado? (verificar no dashboard)
|
|
50
|
+
- [ ] Retenção de backup documentada?
|
|
51
|
+
- [ ] Existe runbook de restauração?
|
|
52
|
+
- [ ] Credenciais de backup protegidas (não no repo)?
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Headers de Segurança, Rate Limiting, CORS, e Vazamento de Dados
|
|
2
|
+
|
|
3
|
+
Carregue este arquivo ao implementar/revisar headers de segurança, rate limiting, CORS, ou o formato de resposta de uma API (over-fetch/PII).
|
|
4
|
+
|
|
5
|
+
## Headers de segurança obrigatórios
|
|
6
|
+
|
|
7
|
+
`X-Frame-Options: DENY` + `frame-ancestors 'none'` no CSP mata **clickjacking** (o site não pode ser embutido em `<iframe>` de outro domínio). Fix de 1 minuto, sempre presente.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Content-Security-Policy: default-src 'self'; frame-ancestors 'none'
|
|
11
|
+
X-Frame-Options: DENY
|
|
12
|
+
X-Content-Type-Options: nosniff
|
|
13
|
+
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
|
|
14
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
15
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Como adicionar em Next.js (`next.config.ts`):
|
|
19
|
+
```ts
|
|
20
|
+
async headers() {
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
source: "/(.*)",
|
|
24
|
+
headers: [
|
|
25
|
+
{ key: "X-Frame-Options", value: "DENY" },
|
|
26
|
+
{ key: "X-Content-Type-Options", value: "nosniff" },
|
|
27
|
+
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
|
|
28
|
+
{ key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains; preload" },
|
|
29
|
+
{ key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=()" },
|
|
30
|
+
{
|
|
31
|
+
key: "Content-Security-Policy",
|
|
32
|
+
value: [
|
|
33
|
+
"default-src 'self'",
|
|
34
|
+
"script-src 'self' 'unsafe-inline' https://js.clerk.dev https://js.stripe.com https://www.googletagmanager.com",
|
|
35
|
+
"connect-src 'self' https://*.supabase.co https://api.clerk.dev https://api.stripe.com",
|
|
36
|
+
"frame-src https://js.stripe.com https://hooks.stripe.com",
|
|
37
|
+
"img-src 'self' data: https:",
|
|
38
|
+
"style-src 'self' 'unsafe-inline'",
|
|
39
|
+
].join("; "),
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> **Cuidado:** CSP errada quebra o app. Teste sempre em dev antes de subir. Ajuste os domínios (`script-src`, `connect-src`) conforme os serviços reais do projeto.
|
|
48
|
+
|
|
49
|
+
## Rate Limiting
|
|
50
|
+
- Login: limite por IP **e** por conta (só por IP não segura brute force distribuído; só por conta não segura scan de vários e-mails)
|
|
51
|
+
- APIs públicas: limite por IP e por token
|
|
52
|
+
- Endpoints de reset de senha: especialmente restritivos
|
|
53
|
+
- Endpoints de cobrança (checkout, portal): sempre com rate limit
|
|
54
|
+
- Next.js: `@upstash/ratelimit` no route handler, ou WAF da Vercel para regras por rota
|
|
55
|
+
- Fail closed: se o backend do rate limit cair (ex: Redis fora), rotas de escrita devem negar a request, não deixar passar
|
|
56
|
+
- Comparações de token/secret: `crypto.timingSafeEqual`, nunca `!==` (detalhe em auth-and-secrets)
|
|
57
|
+
- Sem rate limit = brute force de graça. Somar lockout/CAPTCHA após N falhas no login
|
|
58
|
+
|
|
59
|
+
## CORS
|
|
60
|
+
- **Nunca reflita o header `Origin` recebido** de volta em `Access-Control-Allow-Origin` (isso libera qualquer site a chamar sua API com credenciais)
|
|
61
|
+
- Use uma **allowlist explícita** de origens: compare o `Origin` recebido contra a lista e só então ecoe o valor exato daquela origem
|
|
62
|
+
- `Access-Control-Allow-Credentials: true` NUNCA junto de `Access-Control-Allow-Origin: *`
|
|
63
|
+
- Padrão = negar: origem desconhecida → sem headers CORS (o browser bloqueia sozinho)
|
|
64
|
+
```ts
|
|
65
|
+
const ALLOWED = new Set(["https://app.exemplo.com", "https://exemplo.com"])
|
|
66
|
+
const origin = req.headers.get("origin")
|
|
67
|
+
if (origin && ALLOWED.has(origin)) {
|
|
68
|
+
res.headers.set("Access-Control-Allow-Origin", origin) // valor exato, nunca "*" com credentials
|
|
69
|
+
res.headers.set("Vary", "Origin")
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Vazamento de dados na resposta (over-fetch / PII)
|
|
74
|
+
- Retorne **só os campos que a tela precisa**: monte um DTO/allowlist de saída, nunca devolva a row inteira do banco
|
|
75
|
+
- NUNCA inclua `password`, `password_hash`, tokens, secrets ou colunas internas na resposta de API (é a falha mais grave da lista de PII)
|
|
76
|
+
- Supabase: `.select('id, name, email')` explícito, nunca `.select('*')` em endpoint que responde ao cliente
|
|
77
|
+
- Objeto do usuário logado: serialize por um mapper que só expõe campos públicos
|
|
78
|
+
- Erros: não vaze stack trace, SQL nem nome de tabela pro cliente. Mensagem genérica no response, detalhe só no log do servidor
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# OWASP — Detalhe das 5 categorias mais comuns
|
|
2
|
+
|
|
3
|
+
Carregue este arquivo ao aprofundar numa das falhas do triage rápido (seções 1-5 referenciadas na tabela do SKILL.md).
|
|
4
|
+
|
|
5
|
+
## 1. Broken Access Control
|
|
6
|
+
- Verifique permissões no servidor, nunca apenas no frontend
|
|
7
|
+
- IDOR (Insecure Direct Object Reference): valide se o usuário tem acesso ao recurso pelo ID
|
|
8
|
+
- Princípio do menor privilégio em todas as rotas
|
|
9
|
+
- Next.js: middleware não é a única barreira. Re-verifique auth dentro do route handler, Server Action ou página (bypass de middleware já teve CVE)
|
|
10
|
+
|
|
11
|
+
Exemplo anti-IDOR (Next.js + Clerk + Supabase):
|
|
12
|
+
```ts
|
|
13
|
+
// app/api/projects/[id]/route.ts
|
|
14
|
+
import { auth } from "@clerk/nextjs/server"
|
|
15
|
+
|
|
16
|
+
export async function GET(req: Request, { params }: { params: Promise<{ id: string }> }) {
|
|
17
|
+
const { userId } = await auth()
|
|
18
|
+
if (!userId) return new Response("Unauthorized", { status: 401 })
|
|
19
|
+
const { id } = await params
|
|
20
|
+
const { data } = await supabase
|
|
21
|
+
.from("projects")
|
|
22
|
+
.select("id, name")
|
|
23
|
+
.eq("id", id)
|
|
24
|
+
.eq("user_id", userId) // posse verificada na query, além do RLS
|
|
25
|
+
.single()
|
|
26
|
+
if (!data) return new Response("Not found", { status: 404 }) // 404, não 403 (não confirma que o recurso existe)
|
|
27
|
+
return Response.json(data)
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 2. Cryptographic Failures
|
|
32
|
+
- HTTPS em tudo, sem exceção
|
|
33
|
+
- HSTS header com includeSubDomains
|
|
34
|
+
- Não exponha dados sensíveis em URLs (query strings ficam em logs)
|
|
35
|
+
|
|
36
|
+
## 3. Injection
|
|
37
|
+
- SQL: queries parametrizadas sempre
|
|
38
|
+
- XSS: sanitize outputs, use Content-Security-Policy
|
|
39
|
+
- Command injection: nunca execute input do usuário como comando shell
|
|
40
|
+
|
|
41
|
+
## 4. Cross-Site Scripting (XSS)
|
|
42
|
+
- Escape HTML em todo output de dado do usuário
|
|
43
|
+
- React/Next.js escapa JSX por padrão. O risco real está em `dangerouslySetInnerHTML`: sanitize antes com DOMPurify (ou não use)
|
|
44
|
+
- URLs vindas do usuário em `href`/`src`: bloqueie esquemas `javascript:` e `data:` (valide que começa com `https://` ou caminho relativo)
|
|
45
|
+
- Content-Security-Policy: bloqueie inline scripts
|
|
46
|
+
- HttpOnly e Secure flags nos cookies de sessão
|
|
47
|
+
|
|
48
|
+
## 5. CSRF
|
|
49
|
+
- SameSite=Strict ou Lax nos cookies de sessão
|
|
50
|
+
- CSRF token em formulários state-changing
|
|
51
|
+
- Verifique Origin/Referer em requests sensíveis
|
|
@@ -18,6 +18,8 @@ Invoque esta skill ANTES de agir em pedidos não-triviais (feature, bug, design,
|
|
|
18
18
|
|
|
19
19
|
Você é o **Diretor / porta de entrada** — não o orquestrador (esse é o `wizz-maestro`). Papel: entender o pedido, medir complexidade e **DELEGAR**. Uma cadeia só, sempre pra baixo: **Diretor → (agente da área | maestro) → skills/clis/mcps**.
|
|
20
20
|
|
|
21
|
+
**Nota de escopo de instalação:** esta é a única skill do catálogo onde instalação **global** (`~/.claude/skills/wizz-router`) é o padrão operacionalmente correto, não uma exceção à regra "prefer local" (`skills-registry.yaml`, Doutrina de Instalação, regra 1) — sua razão de existir é rotear mesmo fora de um projeto Wizz. Fica sincronizada com o hook global `wizz-router-enforce.js` via `npm run sync:global`.
|
|
22
|
+
|
|
21
23
|
**Economia de tokens:** o hook `rtk-rewrite.sh` já cuida do RTK automaticamente (não rode `rtk --version` a cada roteamento). Antes de ler arquivos crus, prefira `/graphify query`, `/cerebro ver`, ou `grep` específico.
|
|
22
24
|
|
|
23
25
|
## Triagem e delegação (o coração do Diretor)
|
|
@@ -26,19 +28,28 @@ Descubra o contexto: **existe `{project-root}/_wizz/`?**
|
|
|
26
28
|
|
|
27
29
|
### A) Dentro de projeto Wizz — você DELEGA, nunca executa
|
|
28
30
|
|
|
29
|
-
Avalie os
|
|
31
|
+
Avalie a **Área**: quantas áreas o pedido toca (design, dev, copy, seo, growth, ads, qa, memória)? Se for só 1, avalie também os **3 fatores restantes** (sinal compartilhado com `wizz-maestro` e `wizz-quick-dev`):
|
|
32
|
+
|
|
33
|
+
1. **Passos**: pontual ou multi-passo?
|
|
34
|
+
2. **Planejamento**: direto, ou precisa planejar antes?
|
|
35
|
+
3. **Artefato + memória**: gera entregável que merece registro no cerebro?
|
|
36
|
+
|
|
37
|
+
**Regra de dispatch:** SE 2+ áreas → `wizz-maestro`, sempre. SENÃO conte os 3 fatores restantes (multi-passo, precisa planejar, gera artefato memorável); 2+ fatores → `wizz-maestro`.
|
|
38
|
+
|
|
39
|
+
- **2+ áreas → `wizz-maestro`, sempre.** Ele é o Gerente: coordena agentes entre áreas, monta a sequência, mantém o dever de memória. Invoque via `Skill` e **pare aqui**.
|
|
40
|
+
- **1 área e 0–1 dos 3 fatores → o AGENTE daquela área.** Ache a área no `skills-registry.yaml` e invoque o `agent:` do bloco (ex: `designer → wizz-designer`, `seo → wizz-seo`, dev pontual → `wizz-quick-dev`). **Pare aqui**: o agente puxa as skills/clis/mcps. Você **não** dispara skills soltas.
|
|
41
|
+
- **1 área e 2+ dos 3 fatores → `wizz-maestro` também.** Multi-passo + precisa planejar + artefato memorável somados indicam que mesmo dentro de 1 área o trabalho exige coordenação.
|
|
30
42
|
|
|
31
|
-
|
|
32
|
-
2. **Passos** — pontual ou multi-passo?
|
|
33
|
-
3. **Planejamento** — direto, ou precisa planejar antes?
|
|
34
|
-
4. **Artefato + memória** — gera entregável que merece registro no cerebro?
|
|
43
|
+
> Um agente de área só cobre a área dele. 2+ áreas exigem coordenação = trabalho do maestro; a cláusula de área decide sozinha, sem somar com mais nada.
|
|
35
44
|
|
|
36
|
-
**
|
|
45
|
+
**Exemplos calibrados de borda** (do dataset de evals, `evals/routing/dataset.json`):
|
|
37
46
|
|
|
38
|
-
-
|
|
39
|
-
-
|
|
47
|
+
- *Trivial → direto (sem router):* `t07` ("trocar 'envie' por 'enviar' na linha 42"): edição de 1 linha.
|
|
48
|
+
- *1 área, 1 fator → agente direto:* `a21` ("corrige o bug de logout no mobile"): 1 área (dev), pontual, sem planejamento, sem artefato de memória → `wizz-quick-dev`.
|
|
49
|
+
- *1 área, mas 2+ fatores → maestro:* `m06` ("refactor de infra: banco de dados, APIs, deploy, monitoria"): 1 área (dev), porém multi-passo + precisa planejar + arquitetura de alto risco → `wizz-maestro` mesmo sem cruzar área.
|
|
50
|
+
- *2+ áreas, cada parte leve → ainda maestro (cláusula 1):* ex. "ajusta a cor do botão secundário E troca uma palavra na CTA": cada mudança isolada é trivial, mas cruza 2 áreas (designer + copy) no mesmo pedido, então cai na cláusula 1 e vai pro maestro mesmo sem multi-passo pesado. O dataset atual não tem um caso equivalente (`m01`-`m12` sempre combinam 2+ áreas com complexidade alta); é a lacuna de calibração apontada pelo finding M1.
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
Ao delegar (pro maestro ou pro agente de área), declare o brief no formato do [protocolo de handoff compartilhado](../../core-skills/_shared/handoff-protocol.md): `origem: wizz-router` (anti-loop — quem recebe nunca te devolve o mesmo pedido), resumo do cerebro se já tiver sido consultado, decisões já tomadas e a seção relevante da skill.
|
|
42
53
|
|
|
43
54
|
### B) Fora de projeto Wizz (modo flat) — aí você roteia direto
|
|
44
55
|
|
|
@@ -7,10 +7,10 @@ Ao detectar o gatilho, apresente o menu de áreas via `AskUserQuestion`:
|
|
|
7
7
|
```
|
|
8
8
|
Vou fazer uma Auditoria 360° do projeto. Escolha as áreas:
|
|
9
9
|
|
|
10
|
-
[ ] 🔧 Código e Arquitetura — code-
|
|
11
|
-
[ ] 🔒 Segurança — web-security +
|
|
12
|
-
[ ] 🗄️ Banco de Dados — database-
|
|
13
|
-
[ ] 🎨 Design e UX — ui-ux-pro-max + premium-landing
|
|
10
|
+
[ ] 🔧 Código e Arquitetura — wizz-code-review + wizz-agent-architect
|
|
11
|
+
[ ] 🔒 Segurança — web-security + auth-and-secrets
|
|
12
|
+
[ ] 🗄️ Banco de Dados — supabase-postgres-best-practices + database-scaling + database-and-deps
|
|
13
|
+
[ ] 🎨 Design e UX — ui-ux-pro-max + premium-landing-ui-researcher
|
|
14
14
|
[ ] 📈 Growth e SEO — seo-audit + page-cro + analytics-tracking
|
|
15
15
|
[ ] ⚡ Performance — database-scaling + caching-and-queues + infrastructure
|
|
16
16
|
[ ] 🧠 Contexto e Decisões — cerebro (aprendizados registrados)
|