wizz-method 2.22.0 → 2.23.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 (118) hide show
  1. package/THIRD-PARTY-NOTICES.md +7 -1
  2. package/package.json +1 -1
  3. package/removals.txt +3 -0
  4. package/skills-registry.yaml +93 -5
  5. package/src/bmm-skills/1-analysis/research/wizz-market-research/steps/step-06-research-completion.md +27 -0
  6. package/src/modules/lowticket/README.md +2 -1
  7. package/src/modules/lowticket/module.yaml +1 -1
  8. package/src/modules/lowticket/skills/wizz-clone-do-expert/SKILL.md +86 -0
  9. package/src/modules/lowticket/skills/wizz-clone-do-expert/references/clone-prompt-template.md +21 -0
  10. package/src/modules/wizz/_shared/video-pipeline.md +2 -0
  11. package/src/modules/wizz/agents/wizz-copy/customize.toml +1 -1
  12. package/src/modules/wizz/agents/wizz-copy/knowledge/playbook.md +2 -2
  13. package/src/modules/wizz/agents/wizz-growth/customize.toml +7 -2
  14. package/src/modules/wizz/agents/wizz-growth/knowledge/playbook.md +3 -2
  15. package/src/skills-lib/wizz-ios-build/SKILL.md +61 -0
  16. package/src/skills-lib/wizz-offer-forge/SKILL.md +2 -2
  17. package/src/skills-lib/wizz-paywall-upgrade-cro/SKILL.md +1 -0
  18. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/README.md +13 -13
  19. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/SKILL.md +11 -7
  20. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/assets/template.html +8 -21
  21. package/src/skills-lib/wizz-pesquisa-de-publico/references/interview-mode.md +69 -0
  22. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/component-sources.md +23 -0
  23. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/design-sources.yaml +73 -0
  24. package/src/skills-lib/wizz-router/references/routing-table-flat.md +5 -1
  25. package/src/skills-lib/wizz-seo-audit/SKILL.md +4 -0
  26. package/src/skills-lib/wizz-seo-audit/references/gsc-regex-perguntas.md +64 -0
  27. package/src/skills-lib/wizz-signup-flow-cro/SKILL.md +1 -0
  28. package/src/skills-lib/wizz-signup-flow-cro/references/trial-abuse.md +40 -0
  29. package/src/skills-lib/wizz-ui-ux-pro-max/SKILL.md +1 -1
  30. package/src/skills-lib/wizz-ui-ux-pro-max/references/common-rules-checklist.md +11 -0
  31. package/src/skills-lib/wizz-video-effects/SKILL.md +3 -1
  32. package/src/skills-lib/wizz-video-effects/assets/effects.config.template.json +10 -0
  33. package/src/skills-lib/wizz-video-effects/references/data-contract.md +2 -0
  34. package/src/skills-lib/wizz-video-effects/references/gates.md +1 -0
  35. package/src/skills-lib/wizz-video-effects/references/one-take.md +41 -0
  36. package/src/skills-lib/wizz-video-effects/scripts/check_one_take.py +159 -0
  37. package/src/skills-lib/wizz-video-effects/scripts/test_one_take.py +126 -0
  38. package/src/skills-lib/wizz-video-styles/LICENSE-lemo-opuscar.txt +21 -0
  39. package/src/skills-lib/wizz-video-styles/SKILL.md +12 -7
  40. package/src/skills-lib/wizz-video-styles/assets/film-styles/dark-keynote.html +78 -0
  41. package/src/skills-lib/wizz-video-styles/assets/film-styles/remotion/Riso.tsx +63 -0
  42. package/src/skills-lib/wizz-video-styles/assets/film-styles/risograph.html +69 -0
  43. package/src/skills-lib/wizz-video-styles/assets/film-styles/swiss-motion.html +84 -0
  44. package/src/skills-lib/wizz-video-styles/references/check-ins.md +25 -0
  45. package/src/skills-lib/wizz-video-styles/references/film-styles/DIRECTOR.md +139 -0
  46. package/src/skills-lib/wizz-video-styles/references/film-styles/archive-lighttable.md +109 -0
  47. package/src/skills-lib/wizz-video-styles/references/film-styles/art-deco.md +112 -0
  48. package/src/skills-lib/wizz-video-styles/references/film-styles/ascii-crt.md +115 -0
  49. package/src/skills-lib/wizz-video-styles/references/film-styles/backrooms.md +125 -0
  50. package/src/skills-lib/wizz-video-styles/references/film-styles/blueprint.md +120 -0
  51. package/src/skills-lib/wizz-video-styles/references/film-styles/brick-toy.md +114 -0
  52. package/src/skills-lib/wizz-video-styles/references/film-styles/briefing-board.md +122 -0
  53. package/src/skills-lib/wizz-video-styles/references/film-styles/caption-news.md +137 -0
  54. package/src/skills-lib/wizz-video-styles/references/film-styles/cel-anime-80s.md +119 -0
  55. package/src/skills-lib/wizz-video-styles/references/film-styles/city-symphony.md +142 -0
  56. package/src/skills-lib/wizz-video-styles/references/film-styles/countdown.md +132 -0
  57. package/src/skills-lib/wizz-video-styles/references/film-styles/crayon-book.md +109 -0
  58. package/src/skills-lib/wizz-video-styles/references/film-styles/dark-keynote.md +117 -0
  59. package/src/skills-lib/wizz-video-styles/references/film-styles/data-physical.md +119 -0
  60. package/src/skills-lib/wizz-video-styles/references/film-styles/dataviz.md +123 -0
  61. package/src/skills-lib/wizz-video-styles/references/film-styles/engraving.md +123 -0
  62. package/src/skills-lib/wizz-video-styles/references/film-styles/game-show.md +118 -0
  63. package/src/skills-lib/wizz-video-styles/references/film-styles/glass-product.md +110 -0
  64. package/src/skills-lib/wizz-video-styles/references/film-styles/halftone-dossier.md +122 -0
  65. package/src/skills-lib/wizz-video-styles/references/film-styles/hd-2d.md +111 -0
  66. package/src/skills-lib/wizz-video-styles/references/film-styles/hologram-hud.md +129 -0
  67. package/src/skills-lib/wizz-video-styles/references/film-styles/impasto.md +124 -0
  68. package/src/skills-lib/wizz-video-styles/references/film-styles/ink-wash.md +120 -0
  69. package/src/skills-lib/wizz-video-styles/references/film-styles/iso-infographic.md +117 -0
  70. package/src/skills-lib/wizz-video-styles/references/film-styles/kino-montage.md +151 -0
  71. package/src/skills-lib/wizz-video-styles/references/film-styles/lidar-survey.md +118 -0
  72. package/src/skills-lib/wizz-video-styles/references/film-styles/living-screencast.md +124 -0
  73. package/src/skills-lib/wizz-video-styles/references/film-styles/lowpoly-island.md +112 -0
  74. package/src/skills-lib/wizz-video-styles/references/film-styles/microgame.md +122 -0
  75. package/src/skills-lib/wizz-video-styles/references/film-styles/microscope.md +108 -0
  76. package/src/skills-lib/wizz-video-styles/references/film-styles/midcentury-toon.md +124 -0
  77. package/src/skills-lib/wizz-video-styles/references/film-styles/news-package.md +158 -0
  78. package/src/skills-lib/wizz-video-styles/references/film-styles/newsreel.md +136 -0
  79. package/src/skills-lib/wizz-video-styles/references/film-styles/one-line.md +114 -0
  80. package/src/skills-lib/wizz-video-styles/references/film-styles/paper-lantern.md +116 -0
  81. package/src/skills-lib/wizz-video-styles/references/film-styles/paper-popup.md +119 -0
  82. package/src/skills-lib/wizz-video-styles/references/film-styles/papercut-red.md +110 -0
  83. package/src/skills-lib/wizz-video-styles/references/film-styles/pictogram-motion.md +119 -0
  84. package/src/skills-lib/wizz-video-styles/references/film-styles/pixel-rpg.md +117 -0
  85. package/src/skills-lib/wizz-video-styles/references/film-styles/risograph.md +125 -0
  86. package/src/skills-lib/wizz-video-styles/references/film-styles/rubber-hose.md +112 -0
  87. package/src/skills-lib/wizz-video-styles/references/film-styles/satellite-briefing.md +116 -0
  88. package/src/skills-lib/wizz-video-styles/references/film-styles/scifi-toon.md +121 -0
  89. package/src/skills-lib/wizz-video-styles/references/film-styles/shadow-puppet.md +124 -0
  90. package/src/skills-lib/wizz-video-styles/references/film-styles/silent-film.md +109 -0
  91. package/src/skills-lib/wizz-video-styles/references/film-styles/silkscreen-poster.md +140 -0
  92. package/src/skills-lib/wizz-video-styles/references/film-styles/spy-titles.md +116 -0
  93. package/src/skills-lib/wizz-video-styles/references/film-styles/stained-glass.md +123 -0
  94. package/src/skills-lib/wizz-video-styles/references/film-styles/swiss-motion.md +115 -0
  95. package/src/skills-lib/wizz-video-styles/references/film-styles/teardown.md +127 -0
  96. package/src/skills-lib/wizz-video-styles/references/film-styles/telestrator.md +137 -0
  97. package/src/skills-lib/wizz-video-styles/references/film-styles/tilt-shift.md +107 -0
  98. package/src/skills-lib/wizz-video-styles/references/film-styles/ukiyoe.md +112 -0
  99. package/src/skills-lib/wizz-video-styles/references/film-styles/urban-sketch.md +126 -0
  100. package/src/skills-lib/wizz-video-styles/references/film-styles/visual-investigation.md +140 -0
  101. package/src/skills-lib/wizz-video-styles/references/film-styles/watercolor.md +113 -0
  102. package/src/skills-lib/wizz-video-styles/references/film-styles/white-model.md +115 -0
  103. package/src/skills-lib/wizz-video-styles/references/film-styles/whiteboard.md +118 -0
  104. package/src/skills-lib/wizz-video-styles/references/film-styles/woodcut.md +122 -0
  105. package/src/skills-lib/wizz-video-styles/references/film-styles.md +140 -0
  106. package/src/skills-lib/wizz-video-styles/references/insert-recipes.md +33 -0
  107. package/src/skills-lib/wizz-video-styles/scripts/beat_grid.py +38 -6
  108. package/src/skills-lib/wizz-vsl/SKILL.md +1 -1
  109. package/src/skills-lib/wizz-vsl/references/assembly-qa.md +1 -1
  110. package/src/skills-lib/wizz-vsl/references/blocks-and-leads.md +1 -1
  111. package/src/skills-lib/wizz-vsl/references/diagnosis.md +2 -2
  112. package/src/skills-lib/wizz-vsl/references/intake.md +5 -5
  113. package/src/skills-lib/wizz-web-security/SKILL.md +2 -0
  114. package/tools/installer/guided/labels.js +16 -0
  115. package/tools/installer/install-text.js +2 -0
  116. package/tools/installer/modules/cli-config.js +3 -0
  117. package/tools/installer/ui.js +6 -0
  118. /package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/prompts.md +0 -0
@@ -1,17 +1,15 @@
1
- # Pesquisa de Público do Piva — a skill for Claude
1
+ # Pesquisa de Público — a skill for Claude
2
2
 
3
3
  Turns **an offer document** into a complete audience research arsenal for paid traffic: six chained reports (VoC, Psychographic Profile, Levels of Awareness, Trend, Angle Matrix and Lexicon) compiled into a tab-navigable HTML, ready to hand to the client or use as a copy foundation.
4
4
 
5
- Made by **[@soupiva](https://www.instagram.com/soupiva/)**.
6
-
7
- ---
8
-
9
5
  ## What's in the box
10
6
 
11
7
  ```
12
- pesquisa-de-publico-do-piva/
8
+ wizz-pesquisa-de-publico/
13
9
  ├── SKILL.md → the workflow Claude follows
14
10
  ├── prompts.md → the six research prompts, production-tested
11
+ ├── references/
12
+ │ └── interview-mode.md → the guided interview for when there is no data yet
15
13
  ├── assets/
16
14
  │ └── template.html → the final document, already styled and ready
17
15
  └── README.md → this file
@@ -23,7 +21,7 @@ pesquisa-de-publico-do-piva/
23
21
 
24
22
  ## Installation (Claude web or desktop)
25
23
 
26
- 1. Download the `pesquisa-de-publico-do-piva.zip` file without unzipping it.
24
+ 1. Download the `wizz-pesquisa-de-publico.zip` file without unzipping it.
27
25
  2. First, turn on code execution: **Settings → Capabilities → "Code execution and file creation"**. Without this, skills won't work.
28
26
  3. Go to **Customize → Skills**.
29
27
  4. Click **+ / Add skill** and upload the ZIP.
@@ -33,7 +31,7 @@ Done. Skills you upload are private to your account.
33
31
 
34
32
  ### Using it in Claude Code
35
33
 
36
- Unzip the `pesquisa-de-publico-do-piva/` folder into `~/.claude/skills/` (to use it across any project) or into `.claude/skills/` at the repo root (to use it only in that project).
34
+ Unzip the `wizz-pesquisa-de-publico/` folder into `~/.claude/skills/` (to use it across any project) or into `.claude/skills/` at the repo root (to use it only in that project).
37
35
 
38
36
  ---
39
37
 
@@ -42,7 +40,7 @@ Unzip the `pesquisa-de-publico-do-piva/` folder into `~/.claude/skills/` (to use
42
40
  Open a conversation, attach your offer document (`.docx`, `.pdf`, `.md` or `.txt`) and write:
43
41
 
44
42
  ```
45
- /wizz-pesquisa-de-publico-do-piva
43
+ /wizz-pesquisa-de-publico
46
44
  ```
47
45
 
48
46
  Or, without the slash, anything in that spirit:
@@ -57,6 +55,12 @@ At the end, you get the finished HTML ready to open in the browser.
57
55
 
58
56
  ---
59
57
 
58
+ ### No offer or audience data yet
59
+
60
+ Pre-launch, or you can't describe who buys? Say so ("ainda não lancei, me entrevista"). Claude asks one question at a time, each with 3–4 possible answers to pick from, and after every answer tells you what changed in the picture. You get an illustrative persona, clearly marked as a hypothesis, plus the list of what to validate, which is your script for collecting real comments.
61
+
62
+ ---
63
+
60
64
  ## What this skill does NOT do
61
65
 
62
66
  It stops at research. **It doesn't write ads, scripts, final headlines or finished creatives.** The hooks that appear in the Angle Matrix are writing direction built from the audience's own vocabulary — raw material for the copywriter, not a ready-to-run asset.
@@ -77,7 +81,3 @@ This means you'll sometimes get less material than you expected. That's intentio
77
81
  - **The segment changes everything.** "People who want to learn X" yields generic results. "People who already tried X and gave up" yields gold. Pick the pain point, not the topic.
78
82
  - **The anchor source isn't always the product's subject.** If you sell a book summary, the goldmine might not be the book's readers — it might be the people living the problem the book solves. Tell Claude this when confirming the context.
79
83
  - **Run a second round when the caveats point to it.** Pasting 30–50 real comments you copied yourself from niche videos usually doubles the quality of the Lexicon.
80
-
81
- ---
82
-
83
- **[@soupiva](https://www.instagram.com/soupiva/)**
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: wizz-pesquisa-de-publico-do-piva
3
- description: Generates a complete audience research arsenal for an infoproduct offer and paid traffic, from an offer document (.docx/.md/.txt/.pdf). Produces six chained reports — VoC, Schwartz Psychographic Profile, Levels of Awareness, Trend Report, Angle Matrix and Lexicon — compiled into a tab-navigable HTML dashboard. Use when the user sends an offer and asks for audience research, VoC, voice of customer, angle matrix, audience lexicon, persona pain points, or a copy arsenal for direct traffic. Do NOT use for technical research on libraries/code (use context7), broad B2B market research (use deep-research), or visual UI research (use wizz-premium-landing-ui-researcher). Methodology by @soupiva.
2
+ name: wizz-pesquisa-de-publico
3
+ description: Generates a complete audience research arsenal for an infoproduct offer and paid traffic, from an offer document (.docx/.md/.txt/.pdf). Produces six chained reports — VoC, Schwartz Psychographic Profile, Levels of Awareness, Trend Report, Angle Matrix and Lexicon — compiled into a tab-navigable HTML dashboard. Use when the user sends an offer and asks for audience research, VoC, voice of customer, angle matrix, audience lexicon, persona pain points, or a copy arsenal for direct traffic. With no offer or audience data yet (pre-launch), runs a guided interview that builds an illustrative persona and the list of what to validate. Do NOT use for technical research on libraries/code (use context7), broad B2B market research (use deep-research), or visual UI research (use wizz-premium-landing-ui-researcher).
4
4
  ---
5
5
 
6
- # Pesquisa de Público do Piva
6
+ # Pesquisa de Público
7
7
 
8
- Direct-marketing research pipeline for infoproducts and paid-traffic offers, validated in production by @soupiva. From a single offer, it generates six chained reports and a final tab-navigable HTML document. Each report feeds the next.
8
+ Direct-marketing research pipeline for infoproducts and paid-traffic offers, validated in production. From a single offer, it generates six chained reports and a final tab-navigable HTML document. Each report feeds the next.
9
9
 
10
10
  **This skill stops at research.** It doesn't write ads, scripts, final headlines or ready-to-run creatives. The hooks that appear in the Angle Matrix are strategic writing direction based on the audience's native language.
11
11
 
@@ -19,6 +19,8 @@ Direct-marketing research pipeline for infoproducts and paid-traffic offers, val
19
19
  6. **Audience Lexicon** — exhaustive compilation of native expressions mined by emotional territory, with confidence badge and copy-usage note.
20
20
  7. **Final HTML document** — compiles the six reports into a single tab-styled file, using `assets/template.html`.
21
21
 
22
+ With no data yet, **interview mode** comes first: a guided interview that produces an illustrative persona (`persona-entrevista.md`), marked as a hypothesis, ending with what still needs validating. Protocol in `references/interview-mode.md`.
23
+
22
24
  ## Non-negotiable principle: epistemic honesty
23
25
 
24
26
  **Never fabricate quotes, links, dates or data.** Only report language that was actually found in real, indexed public sources. Mark the confidence level of every quote:
@@ -33,6 +35,8 @@ When a source can't be accessed, **state it clearly in the Caveats section** as
33
35
 
34
36
  ### Step 0 — Read the offer and extract the base context
35
37
 
38
+ **No offer and no audience data?** (pre-launch, no comments or reviews, or the user can't describe who buys.) Run **interview mode** first, following `references/interview-mode.md`: one question per turn, each with 3-4 hypothesis answers, a new reading after every answer. Its `persona-entrevista.md` becomes the input for this step, and every report built on it says so.
39
+
36
40
  Read the offer document (or description). Distill the **base context**:
37
41
  - **Product**: what it is, format, price, central promise, positioning.
38
42
  - **Likely persona**: who buys, age range, life/work context, awareness level.
@@ -56,9 +60,9 @@ Follow the dependency order (full prompts in `prompts.md`):
56
60
  ### Step 2 — Compile the final HTML document
57
61
 
58
62
  1. Use the pre-formatted layout in `assets/template.html`.
59
- 2. Replace the `{{...}}` placeholders while keeping the `<style>` and structure intact.
60
- 3. Mandatory file naming: `Pesquisa [SHORT_NAME] - @soupiva.html` (saved to `{output_folder}/pesquisa-piva/` or the project directory).
61
- 4. Keep the confidence badges (`.pill`) and the `@soupiva` signature.
63
+ 2. Replace the `{{...}}` placeholders while keeping the `<style>` and structure intact. `{{ORIGEM_DA_PESQUISA}}` says what the research stands on (e.g. "Documento da oferta + VoC"); in interview mode use the commented line under it, with the hypothesis badge.
64
+ 3. Mandatory file naming: `Pesquisa [SHORT_NAME].html` (saved to `{output_folder}/pesquisa-de-publico/` or the project directory).
65
+ 4. Keep the confidence badges (`.pill`).
62
66
 
63
67
  ### Step 3 — Deliver and connect
64
68
 
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Pesquisa {{NOME_CURTO_DA_OFERTA}} - @soupiva</title>
6
+ <title>Pesquisa {{NOME_CURTO_DA_OFERTA}}</title>
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
@@ -153,16 +153,8 @@ ol.findings li:before{content:counter(f,decimal-leading-zero);position:absolute;
153
153
  .caveats{background:transparent;border:1px dashed var(--line);border-radius:16px;padding:22px 24px;margin-top:28px}
154
154
  .caveats h3{color:var(--txt-mid);font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase}
155
155
 
156
- /* ---------- ASSINATURA @soupiva ---------- */
157
- .sig-fixed{position:fixed;right:18px;bottom:18px;z-index:99;display:flex;align-items:center;gap:9px;
158
- background:rgba(8,21,19,.92);border:1px solid rgba(46,229,157,.4);border-radius:100px;
159
- padding:10px 18px 10px 14px;text-decoration:none;color:var(--green);font-size:14px;font-weight:600;
160
- backdrop-filter:blur(10px);box-shadow:0 6px 26px rgba(0,0,0,.55);transition:.18s}
161
- .sig-fixed:hover{background:rgba(46,229,157,.14);transform:translateY(-2px)}
162
- .sig-fixed .ico{width:19px;height:19px;filter:none}
156
+ /* ---------- RODAPÉ ---------- */
163
157
  footer{text-align:center;margin-top:44px;padding-top:26px;border-top:1px solid var(--line)}
164
- footer a{display:inline-flex;align-items:center;gap:9px;text-decoration:none;color:var(--green);
165
- font-size:16px;font-weight:700}
166
158
  footer .made{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5px;
167
159
  letter-spacing:.16em;color:var(--txt-dim);margin-top:10px;text-transform:uppercase}
168
160
 
@@ -172,7 +164,6 @@ footer .made{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5
172
164
  .tabs{grid-template-columns:repeat(3,1fr)}
173
165
  .grid-4{grid-template-columns:repeat(2,1fr)}
174
166
  .fw{flex-direction:column;gap:2px}
175
- .sig-fixed{right:12px;bottom:12px;padding:9px 15px 9px 12px;font-size:13px}
176
167
  }
177
168
  </style>
178
169
  </head>
@@ -194,7 +185,6 @@ footer .made{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5
194
185
  <symbol id="i-quote" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="14.5" rx="2.5"/><path d="M7.5 9h6M7.5 13h9"/></symbol>
195
186
  <symbol id="i-pulse" viewBox="0 0 24 24"><path d="M2 12h4l2.5-7 4 15L15.5 12H22"/></symbol>
196
187
  <symbol id="i-layers" viewBox="0 0 24 24"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 13 9 5 9-5"/></symbol>
197
- <symbol id="i-insta" viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="5"/><circle cx="12" cy="12" r="4"/><path d="M17.2 6.8v.01"/></symbol>
198
188
  <symbol id="i-radar" viewBox="0 0 200 200">
199
189
  <circle cx="100" cy="100" r="88" stroke-opacity=".28"/><circle cx="100" cy="100" r="62" stroke-opacity=".4"/>
200
190
  <circle cx="100" cy="100" r="36" stroke-opacity=".6"/>
@@ -210,9 +200,12 @@ footer .made{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5
210
200
  <!-- ================= HERO ================= -->
211
201
  <div class="hero">
212
202
  <svg class="hero-radar" style="stroke:var(--green);fill:none;stroke-width:1.2;color:var(--green)"><use href="#i-radar"/></svg>
213
- <div class="kicker"><svg class="ico ico-sm"><use href="#i-target"/></svg> Arsenal de Pesquisa de Oferta · Método @soupiva</div>
214
- <h1>Pesquisa {{NOME_CURTO_DA_OFERTA}} - @soupiva</h1>
203
+ <div class="kicker"><svg class="ico ico-sm"><use href="#i-target"/></svg> Arsenal de Pesquisa de Oferta</div>
204
+ <h1>Pesquisa {{NOME_CURTO_DA_OFERTA}}</h1>
215
205
  <div class="recorte">Recorte: {{RECORTE_DO_PUBLICO}}</div>
206
+ <div class="recorte">Origem: {{ORIGEM_DA_PESQUISA}}</div>
207
+ <!-- Modo entrevista: troque a linha acima por
208
+ <div class="recorte">Origem: Entrevista · <span class="pill pill-blue">Hipótese, validar antes de usar</span></div> -->
216
209
  <p>Seis relatórios encadeados de pesquisa de público para tráfego pago.<br>Mineração feita sobre quem vive a dor — não sobre quem já é cliente.</p>
217
210
  <div class="pipeline">
218
211
  <div class="pipe-step on"><svg class="ico"><use href="#i-mic"/></svg><span class="lbl">VoC</span></div>
@@ -390,16 +383,10 @@ footer .made{display:block;font-family:'JetBrains Mono',monospace;font-size:10.5
390
383
  </div>
391
384
 
392
385
  <footer>
393
- <a href="https://www.instagram.com/soupiva/" target="_blank" rel="noopener">
394
- <svg class="ico ico-sm"><use href="#i-insta"/></svg> @soupiva
395
- </a>
396
- <span class="made">Pesquisa de Público do Piva</span>
386
+ <span class="made">Pesquisa de Público</span>
397
387
  </footer>
398
388
  </div>
399
389
 
400
- <a class="sig-fixed" href="https://www.instagram.com/soupiva/" target="_blank" rel="noopener">
401
- <svg class="ico"><use href="#i-insta"/></svg> @soupiva
402
- </a>
403
390
 
404
391
  <script>
405
392
  function showTab(i,btn){
@@ -0,0 +1,69 @@
1
+ # Interview mode (no data yet)
2
+
3
+ For when there is nothing to mine from: pre-launch, no offer document, no VoC, or a user who can't describe the audience. The interview builds an **illustrative persona** from what the user knows and suspects. It is a hypothesis, never evidence, and its last section is the script for collecting the real VoC.
4
+
5
+ ## When to use it
6
+
7
+ - The user has no offer document and no audience material, or says so ("ainda não lancei", "não sei quem compra", "não tenho comentário nenhum").
8
+ - The user asks for it by name ("me entrevista", "modo entrevista").
9
+ - An offer exists but Step 0 can't fill the likely persona or the problems it solves: offer the interview before running the reports.
10
+
11
+ When real material exists (offer document, comments, reviews, calls), the normal workflow wins. The interview can still run on top to fill a gap, and the output says which parts came from where.
12
+
13
+ ## Protocol
14
+
15
+ 1. **One question per turn.** Never a questionnaire. Wait for the answer.
16
+ 2. **Every question carries 3 or 4 hypothesis answers**, lettered, plus "outra coisa". The hypotheses unlock someone who can't describe the audience; they are guesses grounded in the niche, not leading answers. The user may pick, mix or reject them.
17
+ 3. **After each answer, give a new reading before the next question:** 2 or 3 lines on what the answer changes in the persona, and what it hints at that hasn't been said yet. The reading is where the hidden blocker shows up (in testing, 4 rounds surfaced a fear of social judgment that wasn't in the briefing; the brief only talked about fear of selling).
18
+ 4. **Follow the thread that surprises.** The question order below is a default; when an answer opens something unexpected, the next question digs there.
19
+ 5. **Stop at saturation**, usually 6 to 10 rounds: when two answers in a row change nothing in the reading, or when the user asks to stop. Say how many rounds ran.
20
+
21
+ ### Default question sequence
22
+
23
+ Ask in Portuguese, in the user's register. Adapt the wording to the niche.
24
+
25
+ | # | Topic | What it opens |
26
+ |---|---|---|
27
+ | 1 | Who buys and at what moment of life | Persona, trigger moment |
28
+ | 2 | What they already tried and why it didn't work | Sophistication, false solutions |
29
+ | 3 | What stops them from buying today | **The fear that blocks the purchase** |
30
+ | 4 | What goes through their head at night about it | Mental ruminations |
31
+ | 5 | Who they want to become, and how others would see them | Desired identity |
32
+ | 6 | An ordinary day: where the problem shows up | A day in the life |
33
+ | 7 | Where they talk about it in public, and in which words | Anchor source for the real VoC |
34
+ | 8 | What they'd never admit about it | Won't Tell / Can't Tell (feeds Report 3) |
35
+
36
+ Example of one turn (question 3):
37
+
38
+ > **O que mais trava essa pessoa na hora de comprar?**
39
+ > a) Medo de jogar dinheiro fora de novo
40
+ > b) Vergonha de os outros descobrirem que ela precisou de ajuda
41
+ > c) Não acreditar que funciona para o caso dela
42
+ > d) Falta de tempo para aplicar
43
+ > e) Outra coisa
44
+
45
+ ## Output
46
+
47
+ Save to `{output_folder}/pesquisa-de-publico/persona-entrevista.md`, in Portuguese, with these sections in this order:
48
+
49
+ 1. **Aviso no topo:** "Persona ilustrativa: hipótese montada em entrevista com <quem> em <data>, <N> rodadas. Não é VoC. Valide antes de usar como prova."
50
+ 2. **Contexto base** (the same five fields as Step 0).
51
+ 3. **Persona** (who, life moment, context).
52
+ 4. **O medo que bloqueia a compra.**
53
+ 5. **Ruminações mentais** (what they repeat to themselves, in their words as the user imagined them).
54
+ 6. **Identidade desejada.**
55
+ 7. **Um dia na vida.**
56
+ 8. **Plano de aplicação da persona** (where each trait goes: hook, offer, objection handling, page section).
57
+ 9. **O que ainda não sabemos** (every point where the user hesitated, guessed, or picked a hypothesis without conviction).
58
+ 10. **O que precisamos validar:** one row per hypothesis, with where to collect (the anchor source from question 7), what to look for, and what would refute it. This list **is the VoC collection script**: hand it over as the next step.
59
+
60
+ Interview answers are never quotes. They never get the `Verificável`, `Fórum` or `EN` badges, and never go into the VoC report as audience language.
61
+
62
+ ## How the six reports use it
63
+
64
+ The interview replaces the offer document as the input to Step 0. Then the workflow runs as usual:
65
+
66
+ - **VoC (1) and Trend (4)** still mine the web, using the anchor source from question 7. What they find is real and keeps its badges.
67
+ - **Schwartz (2), Awareness (3) and Matrix (5)** open with one line saying they start from interview, not VoC, and how much real VoC was found to support it. Every trait that rests only on the interview is marked `hipótese`.
68
+ - **Lexicon (6)** only lists expressions actually found. Words the user imagined stay in the persona file.
69
+ - In the HTML, fill `{{ORIGEM_DA_PESQUISA}}` with `Entrevista` and keep the hypothesis badge on every item from the interview.
@@ -103,6 +103,18 @@ As of 2026-10-15 the shadcn index marks `@styleui` as **degraded** (sampled item
103
103
  - Priority source for: SaaS dashboards, data viz, metrics/stats sections on the landing page, premium animated charts (complements/replaces raw Recharts)
104
104
  - The Bklit Studio (playground) is proprietary; the components themselves are MIT
105
105
 
106
+ ### ReUI
107
+
108
+ - Site: https://reui.io/ · GitHub: https://github.com/keenthemes/reui (MIT, free)
109
+ - shadcn components and blocks (forms, tables, dialogs, pricing, dashboards). Confirm the registry namespace in the live index before `npx shadcn add`.
110
+ - Use for: app sections and dashboard blocks when the project already runs on shadcn.
111
+
112
+ ### Thinking Orbs
113
+
114
+ - GitHub: https://github.com/Jakubantalik/thinking-orbs (MIT) · `npm i thinking-orbs`
115
+ - 9 animated canvas orbs, one per AI state (working, searching, solving, listening, connecting...).
116
+ - Use only when the product has an agent or AI chat UI and needs a state indicator better than a spinner. Install, never vendor.
117
+
106
118
  ### Skiper UI
107
119
 
108
120
  Skiper UI **must not be cloned**.
@@ -185,6 +197,17 @@ Use for: vibe coding references, prompt ideas, component inspiration, UI pattern
185
197
 
186
198
  > **Important rule:** Vibe Code Components can appear under `Reference Sources` and `Visual Inspiration Sources`, but must not be treated as primary implementation sources like React Bits, Cult UI, Watermelon, or StyleUI.
187
199
 
200
+ ### Tokens, design systems and the final audit
201
+
202
+ A model asked to "make it look good" averages everything it has seen. Give it a closed target before the first screen:
203
+
204
+ - **Open Props** (https://open-props.style/, MIT): ready-made CSS tokens for colour, spacing, radius, easing. Hand the token list over so the model stops inventing a new grey per screen.
205
+ - **DesignSystems.one** (https://designsystems.one/): gallery of real company design systems (Material, Fluent, Carbon, Atlassian, Polaris). Pick one as the base, swap in the brand colours, give it to the model at project start.
206
+ - **Design System Checklist** (https://www.designsystemchecklist.com/): the audit before publishing. Ask the model for the list of failing items, choose 3 and fix them one at a time. Never "fix everything": it rewrites the project and breaks what works.
207
+ - **VibePrompt** (https://vibeprompts.dev/): UI Prompt Library with 286 layout prompts by section (auth, pricing, hero, bento, stats, FAQ, dashboard). Use one prompt as the brief for one section and swap in the project tokens; never paste a whole page of them.
208
+ - **GetLayers** (https://www.getlayers.com/): section templates with a "copy prompt" button and an MCP. Read the licence of each item; take the structure, rebuild the code.
209
+ - **Curated** (https://curated.design/): catalogue of real, live websites for direction. Visual only.
210
+
188
211
  ## Visual Inspiration Sources
189
212
 
190
213
  These are visual sources for the skill to use when it needs visual direction, inspiration, style, animation, composition, and UX. They must not be treated as a guaranteed source of code.
@@ -250,3 +250,76 @@ sources:
250
250
  access: free
251
251
  need_tags: [typography, palette, spacing, design-md]
252
252
  note: "npx -y dembrandt@0.39.2 <url> --design-md: measures a site the user named."
253
+
254
+ - id: thinking-orbs
255
+ kind: code
256
+ url: "https://github.com/Jakubantalik/thinking-orbs"
257
+ license: MIT
258
+ checked: 2026-10-25
259
+ access: free
260
+ need_tags: [loader, ai-state, canvas, micro-interaction]
261
+ note: "npm thinking-orbs: 9 animated canvas orbs, one per AI state (working, searching, solving, listening...). Only for products with an agent or AI chat UI."
262
+
263
+ - id: reui
264
+ kind: registry
265
+ url: "https://github.com/keenthemes/reui"
266
+ docs: "https://reui.io/"
267
+ license: MIT
268
+ checked: 2026-10-25
269
+ access: free
270
+ need_tags: [form, button, dialog, data-viz, pricing, app-section, dashboard, template]
271
+ note: "shadcn components and blocks (485+ blocks on the site). Confirm the registry namespace in the live index before installing."
272
+
273
+ - id: open-props
274
+ kind: taste
275
+ url: "https://open-props.style/"
276
+ license: MIT
277
+ checked: 2026-10-25
278
+ access: free
279
+ need_tags: [design-md, palette, spacing, typography, easing]
280
+ note: "Ready-made CSS tokens. Hand the token list to the model before the first screen so it stops inventing a new grey per page."
281
+
282
+ - id: designsystems-one
283
+ kind: taste
284
+ url: "https://designsystems.one/"
285
+ license: null
286
+ checked: 2026-10-25
287
+ access: free
288
+ need_tags: [design-md, typography, palette, spacing, visual-direction]
289
+ note: "Gallery of real company design systems (Material, Fluent, Carbon, Atlassian, Polaris...). Pick one as a base, swap the brand colours, give it to the model at project start."
290
+
291
+ - id: design-system-checklist
292
+ kind: taste
293
+ url: "https://www.designsystemchecklist.com/"
294
+ license: null
295
+ checked: 2026-10-25
296
+ access: free
297
+ need_tags: [design-md, audit]
298
+ note: "Final audit before publishing: ask the model for the failing items, fix 3 at a time, never all at once."
299
+
300
+ - id: getlayers
301
+ kind: visual
302
+ url: "https://www.getlayers.com/"
303
+ license: null
304
+ checked: 2026-10-25
305
+ access: free+paid
306
+ need_tags: [hero, landing-section, 3d, section-idea]
307
+ note: "Section templates with a 'copy prompt' button and an MCP. Read the licence of each item; rebuild, never paste."
308
+
309
+ - id: curated-design
310
+ kind: visual
311
+ url: "https://curated.design/"
312
+ license: null
313
+ checked: 2026-10-25
314
+ access: free
315
+ need_tags: [visual-direction, landing-section, art-direction]
316
+ note: "Catalogue of real, live websites for direction."
317
+
318
+ - id: vibeprompts
319
+ kind: taste
320
+ url: "https://vibeprompts.dev/"
321
+ license: null
322
+ checked: 2026-10-25
323
+ access: free
324
+ need_tags: [section-idea, landing-section, pricing, form, hero, dashboard, onboarding, navigation]
325
+ note: "UI Prompt Library: 286 layout prompts by section (auth, pricing, hero, bento, stats, FAQ, dashboard...) that return Tailwind markup. Use the prompt as the brief for one section; adapt it to the project tokens."
@@ -19,6 +19,7 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
19
19
  | **Autonomous, offensive** pentest that actually runs the app and proves each finding with a real PoC | CLI `strix` (qa registry). CONDITIONAL, never the default: only on an app the user owns/is authorized to test, and only when they ask for validated exploitation rather than a review. Start from `wizz-security-audit-pentest` | 2 |
20
20
  | Error monitoring, crash/exception triage, releases and source maps in Sentry | CLI `sentry-cli` (architect registry). CONDITIONAL: only if the project ALREADY uses Sentry (`SENTRY_DSN` in env, `sentry.properties`, or `@sentry/` in package.json) and it's at production stage — never propose adopting Sentry from this row | 2 |
21
21
  | Launch-readiness audit, "is it ready to launch?", broad release checklist (technical, security, SEO, analytics, content, legal, infra), "what's missing before going to production" | `wizz-launch-readiness` | 1 |
22
+ | Build, sign and install an iOS app on the iPhone from the command line without the Xcode IDE (SwiftPM + xtool), also from Linux or Windows/WSL | `wizz-ios-build` + CLI `xtool` (dev registry). Reviewing native UI against the HIG is CLI `apple-design`; TestFlight/App Store is out of scope | 2 |
22
23
  | Understand how a feature of a THIRD-PARTY app, Electron app, APK, binary or HAR capture works, without its source, to build a similar one | MCP `rea` (dev registry, optional: recommended, never configured by default; own code is `wizz-investigate`) | 2 |
23
24
  | Desktop, Electron, contextIsolation, code signing | `wizz-desktop-security` | 2 |
24
25
 
@@ -63,6 +64,8 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
63
64
  | **Edit/cut video** (cuts, selects, roughcut) | CLI `buttercut` (designer registry; **Apple Silicon only**, clone-and-run in the project, heavy deps) | 1 |
64
65
  | Generate an AI video/image (Veo/Kling/Wan), UGC / ad-ready style | `wizz-ad-creative` writes the prompt for the user to paste into Flow or another AI tool. No generation API is integrated in the method | 1 |
65
66
  | Analyze/understand an existing video (frames + transcription) | CLI `claude-video` (designer registry; `npx skills add bradautomates/claude-video`) | 2 |
67
+ | One-take product/app/skill film (10-60 s, no cuts, every beat grows out of the last) made WITH the onetake skill, for personal or noncommercial work | CLI `onetake` (designer registry; opt-in, project scope; PolyForm Noncommercial, client work needs onetake Pro). For client work the one-take technique is `wizz-video-effects` (one-take.md) in the HyperFrames → Remotion pipeline | 2 |
68
+ | Hand-painted cartoon with Clawd, the Claude character (p5.js + p5.brush, 31 acted emotions), for a video where Claude itself appears | CLI `claude-animation-base` (designer registry; clone-and-run in the project). Without Claude as the character, the style is `wizz-video-styles` and the drawn scene is `hyperframes` | 2 |
66
69
  | Narration / voice / TTS / voice cloning for video | CLI `voicebox` (designer registry; local app with MCP endpoint) | 2 |
67
70
  | Research components compatible with the project | `wizz-ui-component-curator` (demos, code, and public registries with evidence) | 1 |
68
71
 
@@ -96,7 +99,8 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
96
99
  | Free lead-capture tool | `wizz-free-tool-strategy` | 2 |
97
100
  | A/B test, variations, conversion experiments | `wizz-ab-test-setup` + `wizz-analytics-tracking` | 2 |
98
101
  | Copywriting, copy, persuasion, sales text | `wizz-copywriting` + `wizz-humanizer` | 1 |
99
- | Offer audience research, VoC, angle matrix, info-product lexicon | `wizz-pesquisa-de-publico-do-piva` | 1 |
102
+ | Offer audience research, VoC, angle matrix, info-product lexicon | `wizz-pesquisa-de-publico` | 1 |
103
+ | Clone an expert's voice: a GPT/Project that answers students like them, from their lives, audios and posts | `wizz-clone-do-expert` (lowticket module). Persona of the buyer is `wizz-pesquisa-de-publico`; sales copy is `wizz-copywriting` | 1 |
100
104
  | Forge an offer, create an irresistible offer, unique mechanism, bonus, guarantee | `wizz-offer-forge` + `wizz-pricing-strategy` | 1 |
101
105
  | Market research, competitive intelligence | `deep-research` (external plugin — only if installed) | 2 |
102
106
  | Scrape/crawl the web for market research, lead prospecting or competitive intel (anti-bot bypass, adaptive parsing) | MCP `scrapling` (growth registry) — the collection layer under the research rows above | 2 |
@@ -258,6 +258,9 @@ Reporting "no schema found" based solely on `web_fetch` or `curl` leads to false
258
258
  - No keyword cannibalization
259
259
  - Logical topical clusters
260
260
 
261
+ **With Search Console access**
262
+ - Pull the questions people typed with a regex filter on Queries, and check which ones no page answers. Patterns and the follow-up: [gsc-regex-perguntas](references/gsc-regex-perguntas.md)
263
+
261
264
  ---
262
265
 
263
266
  ## Content Quality Assessment
@@ -368,6 +371,7 @@ Same format as above
368
371
  ## References
369
372
 
370
373
  - [AI Writing Detection](references/ai-writing-detection.md): Common AI writing patterns to avoid (em dashes, overused phrases, filler words)
374
+ - [Search Console regex](references/gsc-regex-perguntas.md): regex filters that surface the questions, buying-intent and problem queries people type, and what to do with them
371
375
  - For AI search optimization (AEO, GEO, LLMO, AI Overviews), see the **wizz-ai-seo** skill
372
376
 
373
377
  ---
@@ -0,0 +1,64 @@
1
+ # Search Console: regex to find the questions people type
2
+
3
+ The Queries report hides the most useful thing a site owner has: the exact questions people typed before landing on the site. A regex filter pulls them out in under a minute.
4
+
5
+ ## Where
6
+
7
+ Search Console > Performance > Search results > **+ Add filter** > **Query** > **Custom (regex)** > "Matches regex". Set the date range to the last 3 or 6 months so low-volume questions show up.
8
+
9
+ Rules of the filter (Google uses RE2):
10
+
11
+ - Case-sensitive by default. Start with `(?i)` to ignore case.
12
+ - `^` anchors at the start of the query; without it the word can appear anywhere.
13
+ - Max 4096 characters. No lookahead/lookbehind.
14
+ - "Doesn't match regex" is the inverse: use it to drop brand queries.
15
+
16
+ ## Patterns
17
+
18
+ Questions, Portuguese:
19
+
20
+ ```text
21
+ (?i)^(quem|que|o que|qual|quais|quando|onde|como|por que|porque|quanto|quantos|pode|posso|devo|vale a pena|é possível)\b
22
+ ```
23
+
24
+ Questions, English:
25
+
26
+ ```text
27
+ (?i)^(who|what|when|where|why|how|which|can|should|is|are|does|do|will)\b
28
+ ```
29
+
30
+ Long queries (often conversational or from AI search surfaces):
31
+
32
+ ```text
33
+ ^(\S+\s){6,}\S+$
34
+ ```
35
+
36
+ Buying intent:
37
+
38
+ ```text
39
+ (?i)(comprar|preço|preco|valor|quanto custa|orçamento|orcamento|barato|melhor|vs|versus|alternativa|review|avaliação|price|cost|buy|best|alternative)
40
+ ```
41
+
42
+ Problem and pain (good for top-of-funnel content):
43
+
44
+ ```text
45
+ (?i)(não funciona|nao funciona|erro|problema|como resolver|como consertar|not working|error|fix|problem)
46
+ ```
47
+
48
+ Drop the brand to see only non-branded demand (use with "Doesn't match regex"):
49
+
50
+ ```text
51
+ (?i)(minhamarca|minha marca|mymarca)
52
+ ```
53
+
54
+ ## What to do with the result
55
+
56
+ 1. Export the list (top right > Export) and group the questions by theme.
57
+ 2. For each theme, check whether a page already answers it:
58
+ - Answered, but the page ranks below position 10: add the question as an H2/H3 with a direct answer in the first 40-60 words.
59
+ - Not answered: a new article or an FAQ block on the most relevant page.
60
+ 3. Questions with impressions and almost no clicks are the quick wins: the page shows up but the snippet does not answer.
61
+ 4. Feed buying-intent queries to the landing and pricing pages, not to the blog.
62
+ 5. Repeat every quarter: the list changes with the season and with AI search.
63
+
64
+ FAQ schema helps the page be read correctly, but Google shows FAQ rich results only for a few authoritative sites; do not promise the rich result.
@@ -34,6 +34,7 @@ Before providing recommendations, understand:
34
34
  - `references/trust-and-post-submit.md` — trust copy near the form, error handling, microcopy, and the post-submit experience (success state, verification flows). Load when writing form-adjacent copy or designing what happens right after submit.
35
35
  - `references/measurement-output-patterns.md` — key metrics to track, the output format for an audit/redesign deliverable, and proven signup patterns by product type (B2B SaaS, B2C, waitlist, e-commerce). Load when instrumenting the flow, formatting a deliverable, or looking for a reference pattern.
36
36
  - `references/experiments.md` — a full experiment backlog (form design, copy/messaging, trial/commitment, post-submit) for A/B testing. Load when the deliverable needs a test plan.
37
+ - `references/trial-abuse.md` — why "one trial per IP" blocks real users, and the risk score with three bands (let in / ask for a card or phone / deny) that replaces it. Load when the product has a free trial with a real per-user cost or the user mentions repeated trials, fake accounts or trial abuse.
37
38
 
38
39
  ## Task-Specific Questions
39
40
 
@@ -0,0 +1,40 @@
1
+ # Free trial abuse: score the risk, don't block by IP
2
+
3
+ ## Why "one trial per IP" fails
4
+
5
+ Four people share a house. One starts a free trial. The other three are blocked, because the server does not see four people: it sees one public IP. The same happens in offices, universities, hotels and on mobile networks, where carrier-grade NAT puts thousands of users behind a handful of addresses.
6
+
7
+ Blocking by IP loses real signups (the most expensive kind of drop-off) and barely slows the abuser, who switches network or VPN in seconds.
8
+
9
+ ## What to do instead: a risk score with three bands
10
+
11
+ Collect several weak signals at signup and at trial start, add them up, and route by band. No single signal decides.
12
+
13
+ | Signal | Weight | Note |
14
+ |---|---|---|
15
+ | Disposable email domain | high | Keep a maintained list; update it |
16
+ | Email already used with `+tag` or dot variations (Gmail) | high | Normalise before comparing |
17
+ | Same device/browser fingerprint as a previous trial | high | Fingerprint libraries or the auth provider's device signal; disclose it in the privacy policy |
18
+ | Same payment card fingerprint as a previous trial | very high | The payment provider exposes a card fingerprint without storing the card |
19
+ | Many trials from the same IP **in a short window** | medium | Velocity, not the IP itself |
20
+ | Datacenter/VPN/Tor IP | medium | Legit users use VPNs too; never block on this alone |
21
+ | Phone number already verified on another account | high | Only if the flow already asks for a phone |
22
+ | Bot-like behaviour (form filled in under a second, no mouse/touch events) | medium | Pair with an invisible challenge |
23
+
24
+ Bands:
25
+
26
+ 1. **Low risk: let them in.** The normal flow, no extra field.
27
+ 2. **Medium risk: ask for more commitment.** Card upfront (not charged), phone verification, or a shorter trial. Say why in one line: "Para liberar o teste, confirme um cartão. Nada é cobrado agora."
28
+ 3. **High risk: deny the trial, keep the door open.** Offer the paid plan or a demo call. Never accuse; a generic "não foi possível liberar o teste para esta conta" is enough.
29
+
30
+ ## Rules
31
+
32
+ - **Payment is the strongest signal.** A card fingerprint repeat is the one signal worth acting on alone.
33
+ - **Tune with data.** Log the score and the band of every signup, then compare trial-to-paid and abuse rates per band after 30 days. Move the thresholds, not the signal list.
34
+ - **Measure the cost of false positives.** Count how many real customers came through band 2. If band 2 converts well, the friction is fine; if it kills signups, lower the weights.
35
+ - **Server side only.** The score is computed on the server; the client never sees the weights or the band logic.
36
+ - **Privacy.** Fingerprinting and IP reputation are personal data processing: disclose them, keep only hashes where possible, and set a retention period.
37
+
38
+ ## When it is not worth it
39
+
40
+ Low-cost products where a repeated trial costs little (no AI calls, SMS or heavy infra per user) are better served by a shorter trial or a freemium plan than by a scoring system. Build the score when each trial has a real per-user cost.
@@ -45,4 +45,4 @@ Use one dominant intent and 2–5 meaningful terms per query. Verify the returne
45
45
  - `references/workflow-guide.md` — Python prerequisites + the complete 4-step workflow (analyze → generate design system with `--persist`/hierarchical page overrides → supplement with domain searches → stack guidelines) + a full worked example + tips. Load when actually executing a build/review, not just deciding whether to use the skill.
46
46
  - `references/rules-quick-reference.md` — the 8 priority rule categories (accessibility, touch, performance, layout, typography, animation, style, charts) with every rule ID inside each. Load when auditing existing code for UX issues.
47
47
  - `references/search-reference.md` — full table of the 10 search `--domain` values and 10 `--stack` values with example keywords, plus `--design-system` output format flags (ascii/markdown). Load when picking which domain/stack/format to search or output.
48
- - `references/common-rules-checklist.md` — commonly-missed "looks unprofessional" rules (icons, hover, light/dark contrast, spacing) as do/don't tables, plus the pre-delivery QA checklist. Load right before delivering UI code.
48
+ - `references/common-rules-checklist.md` — commonly-missed "looks unprofessional" rules (icons, hover, light/dark contrast, spacing) as do/don't tables, plus the pre-delivery QA checklist and the design-system audit (list the failing items, fix 3, one at a time). Load right before delivering UI code or publishing.
@@ -74,3 +74,14 @@ Before delivering UI code, verify these items:
74
74
  - [ ] Form inputs have labels
75
75
  - [ ] Color is not the only indicator
76
76
  - [ ] `prefers-reduced-motion` respected
77
+
78
+ ## Design-System Audit (before publishing)
79
+
80
+ Run this once the page or project is feature-complete, before publishing. It audits the system (tokens, components, states), not a single screen.
81
+
82
+ 1. Ask for the list: check the project against the Design System Checklist (https://www.designsystemchecklist.com/) and this file's checklist, and return **only the failing items**, each with the file or token where it fails. No fixes in this pass.
83
+ 2. Pick 3: the user chooses, or default to the 3 with the widest blast radius (a token or a shared component before a one-off screen).
84
+ 3. Fix one at a time: one item, show the diff, re-check that item, then the next. Never "fix everything" in one pass: it rewrites the project and breaks what already works.
85
+ 4. Repeat steps 2 and 3 only if the user asks; report the items left open.
86
+
87
+ If the checklist site is unreachable, run the audit with this file's checklist alone and say so.
@@ -49,7 +49,7 @@ Requires Python 3 (stdlib only) and ffmpeg/ffprobe.
49
49
  4. **Ducking.** `python3 scripts/sound.py duck TIMELINE --write` writes `ducking[]`; the Remotion volume callback is in the data contract.
50
50
  5. **Before rendering.** `python3 scripts/check_excess.py TIMELINE` (blocks), `python3 scripts/check_rhythm.py TIMELINE` (warns) and `python3 scripts/check_chrome.py --timeline TIMELINE` (blocks the slide look; for HyperFrames screens use `--snapshot` from `assets/chrome/collect_layout.js`).
51
51
  6. **Render** in Remotion from the timeline: SFX at their `vol`, narration with the ducking callback. `assets/remotion/` holds a reference `EffectsLayer.tsx` that consumes the timeline (copy it into the project). For the Remotion API itself, invoke `wizz-remotion-best-practices`.
52
- 7. **Gate the final MP4.** Footage (an actor take, b-roll) edge to edge fails the safe zone by construction: the gate measures contrast, not text. Put footage in a frame inside the zone over a plain or darkened background. `check_safe_zone.py FINAL.mp4 --timeline TIMELINE` (the piece's profile; run with `--profile` for the other one if the piece also runs there), `measure_density.py FINAL.mp4 --timeline TIMELINE`, `check_dead_frames.py FINAL.mp4`, `check_loudness.py FINAL.mp4` (prints the ffmpeg command that fixes it when it fails, and warns when that fix will compress; a quiet narration is better raised before the render).
52
+ 7. **Gate the final MP4.** Footage (an actor take, b-roll) edge to edge fails the safe zone by construction: the gate measures contrast, not text. Put footage in a frame inside the zone over a plain or darkened background. `check_safe_zone.py FINAL.mp4 --timeline TIMELINE` (the piece's profile; run with `--profile` for the other one if the piece also runs there), `measure_density.py FINAL.mp4 --timeline TIMELINE`, `check_dead_frames.py FINAL.mp4`, a piece meant as one take also runs `check_one_take.py FINAL.mp4 --timeline TIMELINE` ([references/one-take.md](references/one-take.md)), `check_loudness.py FINAL.mp4` (prints the ffmpeg command that fixes it when it fails, and warns when that fix will compress; a quiet narration is better raised before the render).
53
53
  8. **Look.** Extract frames of the final file, including one of the CTA block, and read them.
54
54
 
55
55
  Every script takes `--config PATH`; without it, `VIDEO_EFFECTS_CONFIG`, then `./effects.config.json`.
@@ -64,6 +64,7 @@ Every script takes `--config PATH`; without it, `VIDEO_EFFECTS_CONFIG`, then `./
64
64
  | `check_dead_frames.py` | yes on blank runs, warns on frozen picture | a blank gap reads as a broken video |
65
65
  | `check_loudness.py` | yes | platforms normalise to about -14 LUFS; louder only distorts |
66
66
  | `check_chrome.py` | yes | a corner label or a counter makes an ad read as a slide |
67
+ | `check_one_take.py` | yes, on one-take pieces | a passage that only swaps scenes breaks the one take |
67
68
  | `check_rhythm.py` | **warns only** | its numbers come from weak sources |
68
69
 
69
70
  Full table, what each gate cannot see, and escape hatches: [references/gates.md](references/gates.md).
@@ -77,6 +78,7 @@ Full table, what each gate cannot see, and escape hatches: [references/gates.md]
77
78
  | [references/audio.md](references/audio.md) | which sound for which event, levels, ducking, loudness |
78
79
  | [references/sfx-licensing.md](references/sfx-licensing.md) | what can run in a paid ad vs an organic post, per library |
79
80
  | [references/editing-patterns.md](references/editing-patterns.md) | hook, rhythm, CTA, captions, safe zones, organic reach: what has a source and what does not |
81
+ | [references/one-take.md](references/one-take.md) | a piece with no change of scene: what each passage carries, camera, passages to build first, its gate |
80
82
  | [references/gates.md](references/gates.md) | what each gate measures and what it misses |
81
83
  | [references/data-contract.md](references/data-contract.md) | the timeline JSON the scripts read and write |
82
84
 
@@ -70,6 +70,16 @@
70
70
  "_source": "flat_std, flat_range and flat_max_frames are gate G2 of motionmaxxing (Apache-2.0, github.com/Tejashmakwana/motionmaxxing), measured on horizontal pro launch films at 96x54; the analysis frame here keeps the same pixel count in 9:16. frozen_diff is their hold epsilon; frozen_warn_s is the top of their 'designed breath' (0.6-1.5 s). motion_band_reference is their Q1, median and Q3 of mean frame-to-frame luma change over human-made horizontal brand films: printed as a question, never a gate, and never measured on vertical Reels."
71
71
  },
72
72
 
73
+ "one_take": {
74
+ "analysis_width": 54,
75
+ "analysis_height": 96,
76
+ "cut_min_diff": 18,
77
+ "cut_ratio": 4,
78
+ "neighbour_frames": 3,
79
+ "_note": "check_one_take.py on the FINAL MP4 of a piece meant as one continuous shot. A frame is a hard cut when its mean absolute luma change to the previous frame (0-255, on the analysis frame) is above cut_min_diff AND cut_ratio times the median change of the neighbour_frames frames on each side: a whip or a fast push changes many frames in a row, a cut changes one.",
80
+ "_source": "House rule, not an external benchmark: cut_min_diff sits well above the motion band of dead_frames.motion_band_reference (median 6.8), cut_ratio and neighbour_frames are the smallest values that keep a fast whip from reading as a cut in the tests. Recalibrate on the first real one-take pieces."
81
+ },
82
+
73
83
  "chrome_lint": {
74
84
  "small_text": 0.04,
75
85
  "corner_x": 0.2,