wizz-method 2.20.1 → 2.22.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.
Files changed (116) hide show
  1. package/THIRD-PARTY-NOTICES.md +18 -0
  2. package/package.json +4 -2
  3. package/skills-registry.yaml +41 -0
  4. package/src/bmm-skills/1-analysis/wizz-set-feature/SKILL.md +1 -1
  5. package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +1 -1
  6. package/src/bmm-skills/4-implementation/wizz-create-story/SKILL.md +1 -1
  7. package/src/bmm-skills/4-implementation/wizz-dev-story/SKILL.md +8 -1
  8. package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +2 -2
  9. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-03-implement.md +2 -0
  10. package/src/bmm-skills/4-implementation/wizz-sprint-status/SKILL.md +1 -1
  11. package/src/core-skills/wizz-party-mode/customize.toml +3 -3
  12. package/src/modules/lowticket/skills/wizz-lowticket-funil/SKILL.md +1 -1
  13. package/src/modules/lowticket/skills/wizz-lowticket-guia/SKILL.md +2 -2
  14. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/SKILL.md +5 -5
  15. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/01-principios.md +1 -1
  16. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/02-diagnostico-funil.md +1 -1
  17. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/03-campanha-bidcap.md +1 -1
  18. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04-criativos.md +2 -2
  19. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04a-criativos-ia.md +6 -6
  20. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04b-criativos-formatos.md +1 -1
  21. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04c-criativos-roteiro.md +5 -5
  22. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/05-oferta.md +1 -1
  23. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06-pagina-vendas.md +3 -1
  24. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06a-instagram.md +2 -2
  25. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06b-player-vsl.md +1 -1
  26. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/07-funil-upsell.md +1 -1
  27. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/07a-copy-humanizacao.md +1 -1
  28. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/08-pesquisa-publico.md +1 -1
  29. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/09-especialista-coproducao.md +1 -1
  30. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/10-levantar-caixa.md +1 -1
  31. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/11-checklist-roi.md +1 -1
  32. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12-mineracao-ofertas.md +1 -1
  33. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12a-mineracao-veredito.md +1 -1
  34. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12b-fabrica-de-ofertas.md +2 -2
  35. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12c-anatomia-low-ticket.md +3 -1
  36. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/13-benchmarks-vsl.md +1 -1
  37. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/14-vocabulario.md +1 -1
  38. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/15-como-estender.md +2 -2
  39. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/17-rastreamento.md +1 -1
  40. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/18-copy-desejo-oferta.md +3 -3
  41. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/INDEX.md +14 -12
  42. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/guardrails.md +18 -70
  43. package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/pontos-em-aberto.md +9 -9
  44. package/src/modules/lowticket/skills/wizz-lowticket-minerador/SKILL.md +1 -1
  45. package/src/modules/lowticket/skills/wizz-lowticket-pagina/SKILL.md +1 -1
  46. package/src/modules/lowticket/skills/wizz-lowticket-trafego/SKILL.md +1 -1
  47. package/src/modules/lowticket/skills/wizz-lowticket-trafego/references/reguas.md +2 -0
  48. package/src/modules/wizz/_shared/cerebro.md +1 -1
  49. package/src/modules/wizz/_shared/organizacao.md +2 -2
  50. package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -0
  51. package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -0
  52. package/src/modules/wizz/agents/wizz-copy/knowledge/playbook.md +2 -1
  53. package/src/modules/wizz/agents/wizz-growth/knowledge/playbook.md +1 -1
  54. package/src/modules/wizz/agents/wizz-social/knowledge/blueprint-roteiro-viral.md +14 -0
  55. package/src/modules/wizz/agents/wizz-social/knowledge/legenda-instagram.md +12 -0
  56. package/src/skills-lib/wizz-cerebro/SKILL.md +18 -5
  57. package/src/skills-lib/wizz-design-needs/SKILL.md +7 -0
  58. package/src/skills-lib/wizz-design-needs/references/design-state.md +34 -2
  59. package/src/skills-lib/wizz-design-needs/references/gap-analysis.md +1 -1
  60. package/src/skills-lib/wizz-design-needs/scripts/design_state.py +305 -0
  61. package/src/skills-lib/wizz-design-needs/scripts/tests/test_design_state.py +143 -0
  62. package/src/skills-lib/wizz-impeccable/references/design-rules.md +18 -0
  63. package/src/skills-lib/wizz-motion-3d-director/references/motion-paths.md +2 -0
  64. package/src/skills-lib/wizz-paid-ads/SKILL.md +2 -1
  65. package/src/skills-lib/wizz-premium-landing-ui-researcher/SKILL.md +6 -2
  66. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/audit-protocol.md +7 -34
  67. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/component-sources.md +2 -0
  68. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/design-sources.yaml +252 -0
  69. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/mandatory-process.md +1 -1
  70. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/mining-rubric.md +123 -0
  71. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/source-first-protocol.md +10 -4
  72. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/web-access-and-evidence.md +1 -1
  73. package/src/skills-lib/wizz-premium-landing-ui-researcher/scripts/design_sources.py +221 -0
  74. package/src/skills-lib/wizz-premium-landing-ui-researcher/scripts/tests/test_design_sources.py +130 -0
  75. package/src/skills-lib/wizz-router/references/routing-table-flat.md +2 -0
  76. package/src/skills-lib/wizz-taste-skill/references/anti-slop-tells.md +8 -0
  77. package/src/skills-lib/wizz-ui-component-curator/SKILL.md +8 -7
  78. package/src/skills-lib/wizz-video-effects/LICENSE-motionmaxxing.txt +202 -0
  79. package/src/skills-lib/wizz-video-effects/SKILL.md +5 -2
  80. package/src/skills-lib/wizz-video-effects/assets/chrome/collect_layout.js +113 -0
  81. package/src/skills-lib/wizz-video-effects/assets/effects.config.template.json +35 -0
  82. package/src/skills-lib/wizz-video-effects/references/data-contract.md +30 -1
  83. package/src/skills-lib/wizz-video-effects/references/gates.md +3 -1
  84. package/src/skills-lib/wizz-video-effects/scripts/check_chrome.py +376 -0
  85. package/src/skills-lib/wizz-video-effects/scripts/check_dead_frames.py +193 -0
  86. package/src/skills-lib/wizz-video-effects/scripts/config.py +13 -0
  87. package/src/skills-lib/wizz-video-effects/scripts/test_chrome.py +181 -0
  88. package/src/skills-lib/wizz-video-effects/scripts/test_dead_frames.py +171 -0
  89. package/src/skills-lib/wizz-video-styles/SKILL.md +6 -2
  90. package/src/skills-lib/wizz-video-styles/references/motion-laws.md +62 -0
  91. package/src/skills-lib/wizz-video-styles/references/styles/desafio-numero.md +1 -0
  92. package/src/skills-lib/wizz-video-styles/scripts/blind_review.py +159 -0
  93. package/src/skills-lib/wizz-video-styles/scripts/taste.mjs +110 -0
  94. package/src/skills-lib/wizz-video-styles/scripts/test_blind_review.py +82 -0
  95. package/src/skills-lib/wizz-vsl/LICENSE +49 -0
  96. package/src/skills-lib/wizz-vsl/SKILL.md +122 -0
  97. package/src/skills-lib/wizz-vsl/references/assembly-qa.md +123 -0
  98. package/src/skills-lib/wizz-vsl/references/blocks-and-leads.md +149 -0
  99. package/src/skills-lib/wizz-vsl/references/diagnosis.md +95 -0
  100. package/src/skills-lib/wizz-vsl/references/intake.md +200 -0
  101. package/src/skills-lib/wizz-vsl/references/mechanisms.md +138 -0
  102. package/src/skills-lib/wizz-vsl/references/niches.md +40 -0
  103. package/src/skills-lib/wizz-vsl/references/offer.md +91 -0
  104. package/src/skills-lib/wizz-vsl/references/production.md +75 -0
  105. package/tools/hooks/README.md +10 -9
  106. package/tools/hooks/wizz-arrumar.js +1 -0
  107. package/tools/hooks/wizz-artifact-guard.js +31 -5
  108. package/tools/hooks/wizz-cerebro-lib.js +36 -13
  109. package/tools/hooks/wizz-feature-lib.js +4 -1
  110. package/tools/hooks/wizz-feature.js +66 -76
  111. package/tools/hooks/wizz-sprint-archive-lib.js +311 -0
  112. package/tools/installer/core/hooks-settings.js +1 -0
  113. package/tools/installer/core/installer.js +6 -0
  114. package/tools/installer/modules/core-seed.js +72 -0
  115. package/tools/installer/modules/mcp-config.js +3 -0
  116. package/tools/installer/ui.js +16 -26
@@ -11,7 +11,7 @@ Autonomous strategist for premium landing pages, SaaS UI, and advanced visual ex
11
11
 
12
12
  Check for `{output_folder}/design-state.yaml` (default `_wizz-output/`). Cheap check first: `grep -c 'status: open'`. Not there? Run `find . -name design-state.yaml -not -path '*/node_modules/*'` before concluding it does not exist: a map found elsewhere is still the map, so use it and tell the user it is off-place.
13
13
 
14
- - **It exists, with open needs:** you are not deciding what to research. Work **one need per pass**, in the order given, and take `query`, `budget.fontes` and `floor` as given. Read the `proibidos` block before writing any query: a query that lands on a forbidden capability is not run, not even for comparison. Write each finding back under `discoveries` with the `need` id, and move the need to `selected` or `unmet` with a reason. Stop when the needs are exhausted, not when the ideas are.
14
+ - **It exists, with open needs:** you are not deciding what to research. Work **one need per pass**, in the order given, and take `query`, `budget.fontes` and `floor` as given. Read the `proibidos` block before writing any query: a query that lands on a forbidden capability is not run, not even for comparison. Judge each candidate with [mining-rubric](references/mining-rubric.md) (entry conditions, score, verdict, selection) and write it back under `discoveries` with the `need` id. Each need closes on one of the rubric's stop conditions, never on a feeling of having seen enough. After writing, run `uv run --no-cache ../wizz-design-needs/scripts/design_state.py validate {output_folder}/design-state.yaml` and fix its findings before the handoff. Stop when the needs are exhausted, not when the ideas are.
15
15
  - **It exists, no open needs:** the map is done. Do not open new research on your own: report it and hand back to `wizz-design-needs` if something is genuinely missing.
16
16
  - **It does not exist, and the work is non-trivial:** invoke `skill:wizz-design-needs` first. Mining without a map is how a project ends up depending on the user to name every effect, one request at a time.
17
17
  - **It does not exist, and the work is one isolated component the user named:** proceed, and say the map was not created.
@@ -28,6 +28,8 @@ Absolute rule: inspect real sources, log evidence, and recommend options, adapt
28
28
 
29
29
  ## Gate 2: classify the site's level (always, before recommending components)
30
30
 
31
+ The brief and the visual identity belong to `wizz-decision-maker` (`brief` and `identidade` in `design-state.yaml`): when they exist, read objective, audience and references from them instead of asking again, and never redefine palette or typography here. This skill owns only the level classification and the component and motion research.
32
+
31
33
  If essential data is missing, ask at most 5 strategic questions: (1) business/product/offer, (2) target audience, (3) page's main objective, (4) desired visual level, (5) existing visual references. If the user doesn't answer everything, continue with coherent strategic hypotheses. Master rule: ask, infer, execute.
32
34
 
33
35
  Classify the project into one of 5 levels (rules, allowed/forbidden motion, and budget per level in [site-levels](references/site-levels.md)):
@@ -60,7 +62,8 @@ Classify the project into one of 5 levels (rules, allowed/forbidden motion, and
60
62
  | Handoffs to wizz-motion-3d-director and wizz-implementation-planner, final ladder rule | [handoffs](references/handoffs.md) |
61
63
  | SaaS Dashboard Mode and Portfolio / Authority Site Mode | [dashboard-and-portfolio-modes](references/dashboard-and-portfolio-modes.md) |
62
64
  | The mandatory 12-step process and honesty checkpoint | [mandatory-process](references/mandatory-process.md) |
63
- | The 5-phase protocol (inventory, public search, cache, evidence, adaptation) | [source-first-protocol](references/source-first-protocol.md) |
65
+ | The 6-phase protocol (inventory, public search, cache, evidence, adaptation, stop) | [source-first-protocol](references/source-first-protocol.md) |
66
+ | Entry conditions, 0-10 score, verdicts, selection, stop conditions, dedup and the adaptation protocol | [mining-rubric](references/mining-rubric.md) |
64
67
  | Audit Protocol: Pass 1 Taste, Pass 2 Impeccable, Pass 3 Cross-check, Pass 4 A11y/Perf | [audit-protocol](references/audit-protocol.md) |
65
68
  | Component sources (React Bits, Cult UI, Ali Imam, Watermelon, StyleUI, Skiper UI, Bklit UI, Componentry), animation engines (GSAP, anime.js), reference and visual inspiration sources, Clone Policy, Paid Source Policy | [component-sources](references/component-sources.md) |
66
69
  | Default stack, visual direction, palettes, typography, and animation selection rules | [stack-and-visual-direction](references/stack-and-visual-direction.md) |
@@ -68,6 +71,7 @@ Classify the project into one of 5 levels (rules, allowed/forbidden motion, and
68
71
  | Base prompts (complete landing page and 3D scroll hero) | [prompt-templates](references/prompt-templates.md) |
69
72
  | Final response format, Quality Bar, and self-check before closing the delivery | [output-format-and-quality](references/output-format-and-quality.md) |
70
73
  | Direct links to every authorized source | [source-links](references/source-links.md) |
74
+ | The source catalogue as data (kind, access, license, need tags, cache folder), queried with `scripts/design_sources.py list --need <tag>`; cache freshness and refresh with `freshness` / `refresh` | [design-sources.yaml](references/design-sources.yaml) |
71
75
  | Opening web access before mining, BLOCKED, and the evidence gate before delivering | [web-access-and-evidence](references/web-access-and-evidence.md) |
72
76
 
73
77
  Final rule: never put real keys inside the skill (environment variables only), and never deliver a landing page that looks like a template with no positioning.
@@ -4,51 +4,24 @@ The Source-First Protocol takes care of the **beginning** (curating mature sourc
4
4
 
5
5
  Apply 3 passes in order. Each catches a different class of problem: using the first two is redundant only 60% of the time; in the other 40%, one catches what the other missed.
6
6
 
7
- ### Pass 1: Taste Skill (early, before full implementation)
7
+ ### Pass 1: Taste (early, before full implementation)
8
8
 
9
9
  **When to apply:** right after Phase 5 of the Source-First Protocol, when you have a mockup/wireframe of the sections or a first version of the hero implemented. Ideally there's still time to swap a component without high cost.
10
10
 
11
- **Source:** `https://github.com/Leonxlnx/taste-skill.git`
11
+ **Run:** invoke `skill:wizz-taste-skill` in audit mode. Its checklist is the list for this pass: [design-audit](../../wizz-taste-skill/references/design-audit.md) and [anti-slop-tells](../../wizz-taste-skill/references/anti-slop-tells.md), including the landing-page tells of section 9.H. This protocol keeps only when to run it, the angle and the output, so the list has one owner and cannot drift.
12
12
 
13
13
  **Angle:** an anti-AI-generic detector. Key question: *"Could this layout belong to any generic SaaS, or does it have an authorial signature?"*
14
14
 
15
- **What to look for and flag as a problem:**
16
-
17
- - A hero with "big headline + subtitle + 2 side-by-side CTAs" with no identity of its own
18
- - Features in a 3-col grid with cute decorative icons (the "✨ Fast 🚀 Reliable 🔥 Secure" style)
19
- - Saturated color gradients with no purpose (purple-to-pink, blue-to-cyan, the default Tailwind look)
20
- - AI copy: "revolutionize your workflow", "supercharge your business", "10x your results"
21
- - A perfectly symmetrical layout with no editorial tension
22
- - Excessive rounded corners (`rounded-3xl` on everything)
23
- - Card stacks with the default Tailwind `shadow-xl`
24
- - Decorative emoji anywhere other than status microcopy
25
- - Generic testimonial cards with a round avatar + name + title + quoted sentence
26
- - Pricing cards with a centered, gradient "Most Popular" badge
27
-
28
- **Pass output:** a list of up to 5 spots where the landing page looks templated, with a **replacement** suggestion for each one (a component from an authorized source, an editorial decision, or removal). Present it to the user before proceeding.
15
+ **Pass output:** a list of up to 5 spots where the landing page looks templated, with a **replacement** suggestion for each one (a component from an authorized source, an editorial decision, or removal). Present it to the user before proceeding. A replacement that needs a new component reopens the need in `design-state.yaml` instead of starting a fresh search.
29
16
 
30
17
  ### Pass 2: Impeccable (late, with real tokens and content)
31
18
 
32
19
  **When to apply:** after the implementation is assembled with brand tokens, real typography, real images/mockups. Catches problems that only appear once the component is alive, not in a wireframe.
33
20
 
34
- **Source:** `https://github.com/pbakaus/impeccable.git`
21
+ **Run:** invoke `skill:wizz-impeccable` with `critique` (or `polish` when fixing). Its ruleset is the list for this pass: [design-rules](../../wizz-impeccable/references/design-rules.md), including the "Landing fine-tuning" block. Same split as Pass 1: the list lives in the skill, the timing and output live here.
35
22
 
36
23
  **Angle:** classic design chops. Key question: *"Does this look like it was made by a senior designer with 10+ years of editorial background?"*
37
24
 
38
- **What to look for and flag as a problem:**
39
-
40
- - **Spacing**: inconsistent padding/margin between sections (24px here, 28px there, 32px elsewhere). Define and follow a scale (4/8/12/16/24/32/48/64/96/128)
41
- - **Hierarchy**: headings competing with each other for weight/size. H1, H2, H3 should have clear contrast
42
- - **Leading**: `line-height` too tight in body text (<1.5) or too loose in headlines (>1.15)
43
- - **Tracking**: wrong letter-spacing on small uppercase text (mono labels need more tracking, ~0.18em)
44
- - **Optical alignment**: icons with a different visual weight than adjacent text, mono numbers not monospaced vertically
45
- - **Vertical rhythm**: scrolling with no breathing room (section after section with no air) or with unexplainable huge gaps
46
- - **Color hierarchy**: 5+ shades of gray for text with no justification, accent color used on things that aren't actionable
47
- - **Image cropping**: thumbnails with inconsistent aspect ratio between cards
48
- - **Typographic contrast**: heavy headings + heavy body text too (missing a light/regular weight to create contrast)
49
- - **Edge cases**: what happens when the project name has 4 words vs. 1? And when the description has 2 lines vs. 4?
50
- - **Focus states**: does the tab order deliver an editorial sequence, or does it jump around chaotically between sections?
51
-
52
25
  **Pass output:** a list of up to 7 fine-tuning adjustments with specific **before/after** (e.g., "Hero subhead: change leading 1.1 → 1.3" / "Cards grid: align the mono numbering baseline with the card headline baseline").
53
26
 
54
27
  ### Pass 3: Cross-check with references
@@ -82,7 +55,7 @@ agent-browser eval "<js>" # 4. measure tokens (computed styles, etc.)
82
55
  **Diagnosis:**
83
56
 
84
57
  - If the difference is **taste/direction** (conscious brand choices) → ok, keep it
85
- - If the difference is **execution** (the reference has polish yours is missing) → go back to Source-First and find the missing component
58
+ - If the difference is **execution** (the reference has polish yours is missing) → reopen the need in `design-state.yaml` (status `open`, with the discoveries already rejected carried forward) and mine it again; with no state file, go back to Source-First and find the missing component
86
59
  - If the difference is **motion fluidity** → review timing, easing, scale, and animation composition (the Design Motion Principles were probably not applied)
87
60
  - If the difference is **visual density** (the reference is more spaced out and breathes more) → cut elements, don't add
88
61
 
@@ -106,8 +79,8 @@ Not a matter of taste, it's technical quality. Check:
106
79
 
107
80
  | Pass | When | Adjustment cost | Frequency |
108
81
  |---|---|---|---|
109
- | 1. Taste Skill | Wireframe / hero first | Low (component can still be swapped) | Always |
110
- | 2. Impeccable | Implementation with real tokens | Medium (fine CSS) | Always |
82
+ | 1. Taste (`wizz-taste-skill`) | Wireframe / hero first | Low (component can still be swapped) | Always |
83
+ | 2. Impeccable (`wizz-impeccable`) | Implementation with real tokens | Medium (fine CSS) | Always |
111
84
  | 3. Cross-check | Final visual | Variable | Always |
112
85
  | 4. Accessibility + Perf | Before delivering | Medium-high (may require refactor) | Always |
113
86
 
@@ -1,3 +1,5 @@
1
+ > To pick a source, query [design-sources.yaml](design-sources.yaml) with `scripts/design_sources.py list --need <tag>`; this page is the policy and nuance behind those rows, read when a source needs it.
2
+
1
3
  ## Source Access Strategy
2
4
 
3
5
  Prioritize free, open source, public, registry-based sources or sources provided by the user.
@@ -0,0 +1,252 @@
1
+ # Design sources, as data. Read by scripts/design_sources.py (list by need tag,
2
+ # cache freshness, refresh) so the miner does not load the whole prose catalogue
3
+ # to pick one source. The prose in component-sources.md stays as the reference
4
+ # for policy and nuance (Clone Policy, Paid Source Policy, visual inspiration
5
+ # rules); this file is the one to query.
6
+ #
7
+ # Fields:
8
+ # kind code | registry | engine | visual | taste | extractor
9
+ # (code/registry = evidence bar of code; visual = pattern only, rebuilt)
10
+ # license what was read, with the date of the reading in `checked`; null = none
11
+ # access free | free+paid | paid | login
12
+ # need_tags what the source answers; matched by `design_sources.py list --need`
13
+ # registry shadcn namespace and item URL template, when it has one
14
+ # cache folder name under ~/.claude/design-sources/, when there is a local clone
15
+ # study_only true when the code must never be copied (no license)
16
+ version: 1
17
+ cache_root: "~/.claude/design-sources"
18
+ max_cache_age_days: 30
19
+ registry_index: "https://ui.shadcn.com/r/registries.json"
20
+
21
+ sources:
22
+ - id: react-bits
23
+ kind: registry
24
+ url: "https://github.com/DavidHDev/react-bits.git"
25
+ registry: { namespace: "@react-bits" }
26
+ license: "MIT + Commons Clause"
27
+ checked: 2026-09-06
28
+ access: free+paid
29
+ cache: react-bits
30
+ need_tags: [text-animation, background, scroll, hover, card, micro-interaction, loader, hero, particles, cursor]
31
+ note: "React Bits Pro is never a mandatory dependency."
32
+
33
+ - id: cult-ui
34
+ kind: registry
35
+ url: "https://github.com/nolly-studio/cult-ui"
36
+ docs: "https://www.cult-ui.com/docs"
37
+ registry: { namespace: "@cult-ui" }
38
+ license: null
39
+ checked: null
40
+ access: free+paid
41
+ cache: cult-ui
42
+ need_tags: [marketing-section, hero, button, card, landing-section]
43
+ note: "Read the license of the item; public/open resources only unless paid access is confirmed."
44
+
45
+ - id: ali-imam
46
+ kind: visual
47
+ url: "https://github.com/aliimam-in/aliimam.git"
48
+ license: null
49
+ checked: 2026-10-15
50
+ access: free
51
+ cache: aliimam
52
+ study_only: true
53
+ need_tags: [shader, liquid, ripple, border-glow, bento, typewriter, canvas, experimental]
54
+ note: "No license: study the technique, never copy the code."
55
+
56
+ - id: watermelon
57
+ kind: registry
58
+ url: "https://github.com/WatermelonCorp/watermellon-registry.git"
59
+ registry: { namespace: "@watermelon", template: "https://registry.watermelon.sh/r/{name}.json" }
60
+ license: null
61
+ checked: null
62
+ access: free
63
+ cache: watermelon
64
+ need_tags: [dashboard, saas, card, app-section, data-viz, product-ui]
65
+
66
+ - id: styleui
67
+ kind: registry
68
+ url: "https://github.com/heyfabrika/styleui.git"
69
+ registry: { namespace: "@styleui" }
70
+ license: null
71
+ checked: 2026-10-15
72
+ access: free
73
+ cache: styleui
74
+ need_tags: [layout, template, landing-section, base-page]
75
+ note: "Marked degraded in the shadcn index on 2026-10-15: check health before relying on it."
76
+
77
+ - id: componentry
78
+ kind: registry
79
+ url: "https://componentry.dev/"
80
+ registry: { namespace: "@componentry", template: "https://componentry.fun/r/{name}.json" }
81
+ license: null
82
+ checked: null
83
+ access: free
84
+ need_tags: [text-animation, background, hover, micro-interaction, animated-component]
85
+
86
+ - id: bklit-ui
87
+ kind: registry
88
+ url: "https://github.com/bklit/bklit-ui"
89
+ registry: { namespace: "@bklit" }
90
+ license: MIT
91
+ checked: null
92
+ access: free
93
+ need_tags: [chart, data-viz, dashboard, metrics]
94
+ note: "Install from the registry, do not clone."
95
+
96
+ - id: skiper-ui
97
+ kind: registry
98
+ url: null
99
+ registry: { namespace: "@skiper-ui" }
100
+ license: null
101
+ checked: null
102
+ access: free+paid
103
+ need_tags: [distinctive-effect, premium-section, advanced-animation]
104
+ note: "Must not be cloned: npx shadcn add @skiper-ui/<item>. Premium only with confirmed access."
105
+
106
+ - id: shadcn-ui
107
+ kind: registry
108
+ url: "https://ui.shadcn.com/"
109
+ license: MIT
110
+ checked: null
111
+ access: free
112
+ need_tags: [base, form, dialog, navigation, carousel, layout]
113
+
114
+ - id: embla
115
+ kind: code
116
+ url: "https://www.embla-carousel.com/"
117
+ license: MIT
118
+ checked: null
119
+ access: free
120
+ need_tags: [carousel]
121
+
122
+ - id: animmaster
123
+ kind: code
124
+ url: "https://animmasterlib.dev/"
125
+ license: "commercial"
126
+ checked: null
127
+ access: paid
128
+ need_tags: [animated-component]
129
+ note: "Only with authorized access; what the user already bought counts as local material."
130
+
131
+ - id: gsap
132
+ kind: engine
133
+ url: "https://github.com/greensock/GSAP.git"
134
+ license: "free since v3.13, all plugins"
135
+ checked: null
136
+ access: free
137
+ need_tags: [scroll-storytelling, scroll, timeline, text-reveal, svg-morph]
138
+
139
+ - id: animejs
140
+ kind: engine
141
+ url: "https://github.com/juliangarnier/anime.git"
142
+ license: MIT
143
+ checked: null
144
+ access: free
145
+ need_tags: [micro-interaction, stagger, svg, counter]
146
+
147
+ - id: design-motion-principles
148
+ kind: taste
149
+ url: "https://github.com/kylezantos/design-motion-principles.git"
150
+ license: null
151
+ checked: null
152
+ access: free
153
+ need_tags: [motion-principles, easing, timing]
154
+
155
+ - id: vibe-code-components
156
+ kind: visual
157
+ url: "https://vibecodecomponents.com/"
158
+ license: null
159
+ checked: null
160
+ access: free
161
+ need_tags: [visual-direction, section-idea]
162
+
163
+ - id: landing-love
164
+ kind: visual
165
+ url: "https://www.landing.love/"
166
+ license: null
167
+ checked: null
168
+ access: free
169
+ need_tags: [visual-direction, scroll, hero, landing-section]
170
+
171
+ - id: recent
172
+ kind: visual
173
+ url: "https://recent.design/"
174
+ license: null
175
+ checked: 2026-10-15
176
+ access: free
177
+ need_tags: [visual-direction, typography, editorial, art-direction]
178
+
179
+ - id: design-spells
180
+ kind: visual
181
+ url: "https://www.designspells.com/"
182
+ license: null
183
+ checked: null
184
+ access: free
185
+ need_tags: [micro-interaction, delight, hover]
186
+
187
+ - id: spline
188
+ kind: visual
189
+ url: "https://spline.design/"
190
+ license: null
191
+ checked: null
192
+ access: free+paid
193
+ need_tags: [3d, hero]
194
+
195
+ - id: unicorn-studio
196
+ kind: visual
197
+ url: "https://www.unicorn.studio/"
198
+ license: null
199
+ checked: null
200
+ access: free+paid
201
+ need_tags: [webgl, background, shader, particles]
202
+
203
+ - id: refero
204
+ kind: visual
205
+ url: "https://refero.design/"
206
+ license: null
207
+ checked: 2026-10-15
208
+ access: login
209
+ need_tags: [ux-flow, dashboard, pricing, onboarding]
210
+ note: "Refero MCP is paid."
211
+
212
+ - id: refero-styles
213
+ kind: taste
214
+ url: "https://styles.refero.design/"
215
+ license: null
216
+ checked: null
217
+ access: free
218
+ need_tags: [design-md, typography, palette, spacing]
219
+
220
+ - id: awesome-design-md
221
+ kind: taste
222
+ url: "https://github.com/VoltAgent/awesome-design-md"
223
+ license: MIT
224
+ checked: 2026-10-15
225
+ access: free
226
+ need_tags: [design-md, typography, palette, spacing]
227
+
228
+ - id: mobbin
229
+ kind: visual
230
+ url: "https://mobbin.com/"
231
+ license: null
232
+ checked: 2026-10-15
233
+ access: login
234
+ need_tags: [ux-flow, onboarding, pricing, dashboard, mobile]
235
+ note: "Mobbin MCP is paid."
236
+
237
+ - id: screensdesign
238
+ kind: visual
239
+ url: "https://screensdesign.com/"
240
+ license: null
241
+ checked: 2026-10-15
242
+ access: login
243
+ need_tags: [mobile, onboarding, paywall, subscription]
244
+
245
+ - id: dembrandt
246
+ kind: extractor
247
+ url: "https://github.com/dembrandt/dembrandt"
248
+ license: MIT
249
+ checked: 2026-10-15
250
+ access: free
251
+ need_tags: [typography, palette, spacing, design-md]
252
+ note: "npx -y dembrandt@0.39.2 <url> --design-md: measures a site the user named."
@@ -8,7 +8,7 @@ Always follow this process. **Steps 6, 7, and 8 are SOURCE CHECKPOINTS and must
8
8
  4. Define the visual direction.
9
9
  5. Decide whether it needs a landing page, dashboard, 3D/WebGL, or a combination.
10
10
  6. **CHECKPOINT: Inventory of the user's sources.** List and inspect (ls + minimal reading of READMEs/package.json) the current project and the models at the paths provided by the user; reuse the memory summary from the handoff. Identify which components/effects the user already has that can be reused before any external source.
11
- 7. **CHECKPOINT: Source-First Protocol (mandatory).** Run [source-first-protocol](source-first-protocol.md): search public sources, open demos and code/registry, check revision, license, and dependencies. Log evidence and failures in the research artifact; show 1-3 real candidates per component.
11
+ 7. **CHECKPOINT: Source-First Protocol (mandatory).** Run [source-first-protocol](source-first-protocol.md): search public sources, open demos and code/registry, check revision, license, and dependencies. Log evidence and failures in the research artifact; judge each verified candidate with [mining-rubric](mining-rubric.md) and show the selected one per need, with at most two runners-up and their verdicts.
12
12
  8. **CHECKPOINT: Choose sources.** Recommend the appropriate combination. With direction and implementation already authorized, proceed; only ask if a material decision is missing.
13
13
  9. Recommend components and animations (already curated in the previous checkpoints).
14
14
  10. Write copy and structure.
@@ -0,0 +1,123 @@
1
+ # Mining rubric: entry conditions, score, verdict, stop and adaptation
2
+
3
+ Shared by `wizz-premium-landing-ui-researcher` and `wizz-ui-component-curator`. Read it before judging the first candidate of a need. It turns "this looks good" into a verdict that the next session, the implementer and QA can read back from `design-state.yaml`.
4
+
5
+ The discipline is ported from the offer miner (`wizz-lowticket-minerador`): conditions checked before any score, a 0-10 score with a cut at 6, an enumerated verdict, a stop rule per need, observation kept apart from inference, and a fixed read order that rebuilds instead of copying.
6
+
7
+ Order of work for each candidate, always the same:
8
+
9
+ 1. **Evidence gate** ([web-access-and-evidence](web-access-and-evidence.md)). Missing any of the five fields = `evidence: unverified`. Unverified is not scored and never selected; it can be verified later.
10
+ 2. **Dedup.** Its `pattern_key` is already `selected` in the project → `status: rejected`, `dup_of: <that discovery>`. Not scored.
11
+ 3. **Entry conditions.** One unmet = `verdict: DESCARTAR` with the code in `disqualifiers`. Not scored.
12
+ 4. **Score** the five criteria, sum, read the verdict from the band.
13
+ 5. **Select or keep searching**, by the selection and stop rules below.
14
+ 6. **Adapt** the selected one with the five-step protocol.
15
+
16
+ ## Entry conditions
17
+
18
+ Each one is a condition of use, not a ban: the line says what makes the candidate eligible. A candidate that does not meet a condition is recorded with the code and the reason, so the next round does not open it again.
19
+
20
+ | Code | The candidate is eligible when | Unmet means |
21
+ |---|---|---|
22
+ | `licenca` | a code source (`kind: code` or `registry`) has a license that allows use in this project | no license or an incompatible one. Reclassify it as `kind: visual` and it is scored as a pattern to rebuild, never as code to copy |
23
+ | `acesso_pago` | paid access is already authorized by the user | access or cost not confirmed (the user decides, it is a faixa C item) |
24
+ | `dependencia` | its dependencies fit the stack and the bundle budget of `design-state.stack` | it pulls a dependency outside the stack or above the budget, and the user has not approved going over |
25
+ | `reduced_motion` | it honours `prefers-reduced-motion`, or the adaptation plan writes that path | it ignores reduced motion and nobody wrote the alternative |
26
+ | `contraste` | its contrast passes AA once the project's tokens are applied | the effect itself breaks AA (text over moving image with no scrim, glow under body text) |
27
+ | `nivel` | the motion is allowed at the site level ([site-levels](site-levels.md)) | the level lists that motion as one to avoid |
28
+ | `proibido` | it does not land on a capability in the `proibidos` block | it does. A reference the user chose already moved its item out of `proibidos` (derivation rule 4.4 of `wizz-design-needs`), so it is eligible |
29
+
30
+ ## Score
31
+
32
+ Five criteria, summed to 0-10. Score only what was observed in this session; a criterion that rests on an inference is scored from what was seen and the inference is written in `inferred`.
33
+
34
+ | Criterion | Range | Top of the range | Bottom of the range |
35
+ |---|---|---|---|
36
+ | `aderencia` | 0-3 | answers the need's `question` and fits the style DNA and brief signals as is | adjacent to the need, does not answer it |
37
+ | `execucao` | 0-2 | polished in the live demo: timing, states, resize, mobile | broken or janky. Inspected static only: at most 1 |
38
+ | `custo_adaptacao` | 0-2, inverted | token-level adaptation (colour, type, spacing) | most of it has to be rewritten |
39
+ | `custo_performance` | 0-2, inverted | no new dependency, no layout thrash | heavy runtime (WebGL, video, large library) for what it adds |
40
+ | `originalidade` | 0-1 | not the default look of the stack or the catalogue | reads as template |
41
+
42
+ Middle values: `aderencia` 2 = answers the question with visible restyling, 1 = answers part of it; `execucao` 1 = works with rough edges; `custo_adaptacao` 1 = markup or API changes; `custo_performance` 1 = a new dependency inside the budget, or a measurable runtime cost.
43
+
44
+ ## Verdict
45
+
46
+ | Verdict | Score | Use |
47
+ |---|---|---|
48
+ | `ASSINATURA` | 9-10 | the piece that defines the surface. At most one selected per surface |
49
+ | `FORTE` | 7-8 | enters |
50
+ | `UTILITARIO` | 6 | enters only when the need has nothing better |
51
+ | `DESCARTAR` | 0-5, or an unmet entry condition | does not enter; the reason stays recorded |
52
+
53
+ The cut is 6. A need's `floor` can raise it for that need, never lower it: a 7 on a need with `floor: 8` stays `FORTE` and is not selected for that need.
54
+
55
+ The signature cap is what stops a page from becoming a collage of impressive effects. When a second candidate on the same surface scores 9 or 10, it is recorded as `FORTE` with `reason: "teto de assinatura"`.
56
+
57
+ ## Selection
58
+
59
+ Per need, one discovery is selected: the highest-scoring verified, eligible candidate at or above the need's floor.
60
+
61
+ - **Faixa A, silent:** the first leads the second by 2 points or more and the need is not `signature: true`. Select and move on.
62
+ - **Faixa B, announced:** a tie within 1 point, or the signature piece of a surface. Select, then say which one won, the runner-up and why. The swap costs one edit to the state file.
63
+ - `UTILITARIO` is selected only when no `FORTE` or `ASSINATURA` is eligible for that need.
64
+ - Everything else on the need stays `proposed` or goes to `rejected` with a `reason`.
65
+
66
+ ## Stop conditions
67
+
68
+ The miner stops on the first one that applies. Each stop writes the need's status and reason to the state file.
69
+
70
+ | Scope | Stops when | Need status |
71
+ |---|---|---|
72
+ | Need, early | an eligible candidate scores 9 or more | `selected` |
73
+ | Need, budget | the sources opened reach `budget.fontes` | `selected` if anything eligible, else `unmet` |
74
+ | Need, diminishing returns | 2 sources in a row with nothing eligible at or above the floor | `unmet`, with what was tried. A result, not a failure |
75
+ | Dedup | the need's question is already answered by a selected discovery on another surface | `dropped`, `reason: "resolvido por <need-id>"` |
76
+ | Surface | the selected behaviour discoveries reach the level's behaviour ceiling (derivation rule 3 of `wizz-design-needs`) | the rest `deferred` |
77
+ | Global | every need is `selected`, `unmet`, `dropped` or `deferred` | mining is over. This is "I have enough information" |
78
+
79
+ Count the spend on the need itself (`spent.fontes`, `spent.secas`) so a reopened need starts from what was already paid.
80
+
81
+ ## Observation and inference
82
+
83
+ Every discovery keeps two lists. `observed`: what was actually seen in this session (a duration in the code, an import, the demo jank at 375 px). `inferred`: the reading of it ("probably uses GSAP ScrollTrigger"). A score rests on `observed`. An inference written as an observation is the failure mode this split exists to catch.
84
+
85
+ ## Adaptation protocol
86
+
87
+ Fixed read order, the design twin of the offer miner's "Demanda → Hook → Promessa…":
88
+
89
+ **Pattern → Why it works → Invariant → Variable → Reimplementation**
90
+
91
+ - **Pattern** (`padrao`): what happens mechanically, in one sentence, with no brand name.
92
+ - **Why it works** (`por_que`): the perceptual or conversion reason. If it cannot be written, the discovery was not understood: it goes back to evaluation and is not selected.
93
+ - **Invariant** (`invariante`): what cannot change without breaking the effect.
94
+ - **Variable** (`variavel`): what is free (easing, duration, direction, colour, density).
95
+ - **Reimplementation** (`reimplementacao`): the plan in the project's tokens and vocabulary.
96
+
97
+ Closing rule, in the same spirit as the offer miner's: **a visual reference gives structure and principle, never CSS.** A code source with a license can be copied with attribution; a visual source is rebuilt.
98
+
99
+ ## Machine-readable block
100
+
101
+ The eval (`evals/design-mining/`) and the state checker (`wizz-design-needs/scripts/design_state.py`) read the numbers from this block. Change a band here and both follow; nothing else holds a copy.
102
+
103
+ ```yaml
104
+ # mining-rubric:v1
105
+ cut: 6
106
+ criteria:
107
+ aderencia: [0, 3]
108
+ execucao: [0, 2]
109
+ custo_adaptacao: [0, 2]
110
+ custo_performance: [0, 2]
111
+ originalidade: [0, 1]
112
+ verdicts:
113
+ - { id: ASSINATURA, min: 9, max: 10 }
114
+ - { id: FORTE, min: 7, max: 8 }
115
+ - { id: UTILITARIO, min: 6, max: 6 }
116
+ - { id: DESCARTAR, min: 0, max: 5 }
117
+ disqualifiers: [licenca, acesso_pago, dependencia, reduced_motion, contraste, nivel, proibido]
118
+ signature_per_surface: 1
119
+ signature_cap_reason: "teto de assinatura"
120
+ faixa_a_lead: 2
121
+ early_stop_score: 9
122
+ dry_sources_to_unmet: 2
123
+ ```
@@ -12,7 +12,7 @@ Log the real paths of the resources found. If there are no local models, proceed
12
12
 
13
13
  ## Phase 2: Search and inspect public sources
14
14
 
15
- Choose sources based on the effect needed, using [component-sources](component-sources.md) and [source-links](source-links.md):
15
+ Choose sources by querying the catalogue as data instead of reading the whole prose: `uv run --no-cache scripts/design_sources.py list --need <tag>` (run from this skill's folder; tags such as `hover`, `scroll`, `card`, `dashboard`, `chart`, `shader`, `typography`) returns the matching sources from [design-sources.yaml](design-sources.yaml) with kind, access, license and `study_only`. Without `uv`, read the YAML directly. [component-sources](component-sources.md) keeps the policy and nuance (clone, paid, visual inspiration) and [source-links](source-links.md) the links; open them when a source needs that detail. The quick map, for orientation:
16
16
 
17
17
  | Need | Initial sources |
18
18
  |---|---|
@@ -50,7 +50,7 @@ Most sources are shadcn registries. Read them live instead of cloning:
50
50
  2. **Read the item.** Replace `{name}` in the URL template and fetch the JSON: it carries the files, dependencies and registry dependencies, which is the evidence the gate asks for. When the shadcn MCP is configured (`npx shadcn@latest mcp init`), it does the same lookup for you.
51
51
  3. **Repos outside the index** (and offline work) use the local cache.
52
52
 
53
- An existing design cache (for example `~/.claude/design-sources/`) can be inspected. Don't treat it as up to date just because it exists:
53
+ An existing design cache (for example `~/.claude/design-sources/`) can be inspected. Don't treat it as up to date just because it exists. One command answers it: `uv run --no-cache scripts/design_sources.py freshness` gives each cached clone's revision, last sync and `stale` past 30 days (`--remote` also compares with origin). A stale cache is still a source for a pattern, never for an API. `design_sources.py refresh` fast-forwards only the clones with no local changes and reports the rest; run it when the user agrees to update. The rules below still hold:
54
54
 
55
55
  - Check origin, branch, revision, and local changes before updating.
56
56
  - Check the remote revision when there's network access; the folder's modification date is not proof of being up to date.
@@ -70,10 +70,16 @@ Log in the existing design artifact (or create `design-research.md` in the proje
70
70
 
71
71
  Also include searches with no results and unavailable sources. Never fill in component names, paths, license, or test results by assumption. A row missing any of the five fields in [web-access-and-evidence](web-access-and-evidence.md) is UNVERIFIED and cannot be the recommendation.
72
72
 
73
- Show 1-3 compatible candidates per component, with a recommendation and adaptation cost. If the user has already authorized the implementation and defined the direction, choose the best option within that scope and proceed. Only ask when a material decision about direction, paid access, or scope change is missing.
73
+ Judge every verified candidate with [mining-rubric](mining-rubric.md): dedup, entry conditions, the 0-10 score with the cut at 6, the verdict, and the selection rule. With a `design-state.yaml`, each candidate is written as a discovery with its need id, scores, verdict and status; the table above is the human-readable view of the same rows.
74
+
75
+ Show the selected candidate per need and at most two runners-up, each with its verdict and score. If the user has already authorized the implementation and defined the direction, the selection rule decides and you proceed. Only ask when a material decision about direction, paid access, or scope change is missing.
74
76
 
75
77
  ## Phase 5: Adapt and verify
76
78
 
77
- Adapt tokens, typography, spacing, content, and motion to the project. Verify responsiveness, keyboard navigation, focus, contrast, reduced-motion, and rendering cost as appropriate for the component. Link the result back to the logged sources.
79
+ Write the adaptation in the five-step order of [mining-rubric](mining-rubric.md) (pattern, why it works, invariant, variable, reimplementation) before touching code. Then adapt tokens, typography, spacing, content, and motion to the project. Verify responsiveness, keyboard navigation, focus, contrast, reduced-motion, and rendering cost as appropriate for the component. Link the result back to the logged sources.
78
80
 
79
81
  Building from scratch is acceptable for trivial primitives or when the documented research finds no compatible option and the implementation is authorized. Explain the reason. Don't claim something doesn't exist in any catalog; only report the sources actually researched.
82
+
83
+ ## Phase 6: Stop
84
+
85
+ Mining stops by rule, not by patience. Per need: an eligible candidate at 9 or more, the source budget spent, or 2 sources in a row with nothing eligible (`unmet`, with what was tried). Per surface: the level's behaviour ceiling. Globally: every need in a terminal status. The table and the status each stop writes are in [mining-rubric](mining-rubric.md). Report which stop closed each need.
@@ -36,6 +36,6 @@ Every candidate needs all five, collected in this session:
36
36
  | Dependencies | Read from the actual imports or registry JSON | Guessed from the component's name |
37
37
  | Source read | The code file was opened and its imports checked | The demo alone |
38
38
 
39
- A candidate missing any field is **UNVERIFIED**. UNVERIFIED items go in a separate section of the report, with what is missing and why. They are never recommended and never placed in the top 1-3, and the implementation plan never depends on them. If every candidate for a need is UNVERIFIED, the need is reported as `unmet`, not filled.
39
+ A candidate missing any field is **UNVERIFIED**. UNVERIFIED items go in a separate section of the report, with what is missing and why. They are never recommended and never scored or selected by the [mining-rubric](mining-rubric.md), and the implementation plan never depends on them. If every candidate for a need is UNVERIFIED, the need is reported as `unmet`, not filled.
40
40
 
41
41
  Before closing, check the delivery against this gate once: every recommended item has its five fields in the research log (`design-research.md` or the project's design artifact), and the access line from Step 0 is in the report.