wizz-method 2.1.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -62
- package/SECURITY.md +15 -16
- package/THIRD-PARTY-NOTICES.md +49 -49
- package/package.json +1 -1
- package/src/bmm-skills/1-analysis/wizz-agent-analyst/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-agent-pm/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-agent-ux-designer/customize.toml +1 -1
- package/src/bmm-skills/3-solutioning/wizz-agent-architect/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-agent-dev/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +2 -2
- package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +102 -8
- package/src/bmm-skills/4-implementation/wizz-code-review/references/review-economy.md +75 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-01-gather-context.md +29 -15
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-02-review.md +13 -10
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-03-triage.md +11 -5
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-04-present.md +4 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +103 -7
- package/src/bmm-skills/4-implementation/wizz-quick-dev/references/review-economy.md +75 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-04-review.md +43 -18
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-05-present.md +4 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-oneshot.md +2 -2
- package/src/core-skills/_shared/handoff-protocol.md +72 -71
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +1 -1
- package/src/modules/lowticket/skills/wizz-lowticket-funil/references/copy-das-paginas.md +39 -39
- package/src/modules/lowticket/skills/wizz-lowticket-funil/references/mapa-do-funil.md +23 -23
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/CATALOGO.md +72 -72
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/01-principios.md +10 -10
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/02-diagnostico-funil.md +50 -50
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/03-campanha-bidcap.md +68 -68
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04-criativos.md +44 -44
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04a-criativos-ia.md +77 -77
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/04b-criativos-formatos.md +121 -121
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/05-oferta.md +35 -35
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06-pagina-vendas.md +122 -122
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06a-instagram.md +93 -93
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/06b-player-vsl.md +57 -57
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/07-funil-upsell.md +83 -83
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/07a-copy-humanizacao.md +61 -61
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/08-pesquisa-publico.md +11 -11
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/09-especialista-coproducao.md +26 -26
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/10-levantar-caixa.md +29 -29
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/11-checklist-roi.md +22 -22
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12-mineracao-ofertas.md +80 -80
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12a-mineracao-veredito.md +72 -72
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12b-fabrica-de-ofertas.md +63 -63
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/12c-anatomia-low-ticket.md +71 -71
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/13-benchmarks-vsl.md +6 -6
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/14-vocabulario.md +53 -51
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/15-como-estender.md +26 -26
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/17-rastreamento.md +76 -76
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/18-copy-desejo-oferta.md +149 -149
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/INDEX.md +45 -45
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/guardrails.md +45 -45
- package/src/modules/lowticket/skills/wizz-lowticket-metodologia/knowledge/pontos-em-aberto.md +64 -66
- package/src/modules/lowticket/skills/wizz-lowticket-minerador/references/rubrica.md +63 -63
- package/src/modules/lowticket/skills/wizz-lowticket-pagina/references/metas-e-medicao.md +23 -23
- package/src/modules/lowticket/skills/wizz-lowticket-pagina/references/padroes-de-codigo.md +50 -50
- package/src/modules/lowticket/skills/wizz-lowticket-trafego/references/formato-do-diagnostico.md +9 -9
- package/src/modules/lowticket/skills/wizz-lowticket-trafego/references/reguas.md +42 -42
- package/src/modules/wizz/README.md +27 -27
- package/src/modules/wizz/_shared/cerebro.md +37 -37
- package/src/modules/wizz/_shared/communication-rules.md +15 -15
- package/src/modules/wizz/_shared/despacho-barato.md +6 -6
- package/src/modules/wizz/_shared/encerramento.md +23 -23
- package/src/modules/wizz/_shared/model-ladder.md +29 -28
- package/src/modules/wizz/_shared/planning-gate.md +30 -30
- package/src/modules/wizz/_shared/token-economy.md +28 -28
- package/src/modules/wizz/_shared/video-pipeline.md +42 -42
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +16 -16
- package/src/modules/wizz/agents/wizz-ads/customize.toml +21 -21
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +18 -18
- package/src/modules/wizz/agents/wizz-copy/customize.toml +24 -24
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +24 -24
- package/src/modules/wizz/agents/wizz-designer/customize.toml +29 -29
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +20 -20
- package/src/modules/wizz/agents/wizz-growth/customize.toml +34 -34
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +63 -63
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +38 -38
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +19 -19
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +24 -24
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +22 -22
- package/src/modules/wizz/agents/wizz-qa/customize.toml +29 -29
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +19 -19
- package/src/modules/wizz/agents/wizz-seo/customize.toml +27 -27
- package/src/modules/wizz/agents/wizz-social/SKILL.md +53 -53
- package/src/modules/wizz/agents/wizz-social/customize.toml +37 -37
- package/src/modules/wizz/agents/wizz-social/knowledge/analise-imagem-referencia.md +20 -20
- package/src/modules/wizz/agents/wizz-social/knowledge/biblioteca-prompts-imagem.md +71 -71
- package/src/modules/wizz/agents/wizz-social/knowledge/blueprint-roteiro-viral.md +196 -196
- package/src/modules/wizz/agents/wizz-social/knowledge/legenda-instagram.md +32 -32
- package/src/modules/wizz/agents/wizz-social/knowledge/prompts-imagem-video.md +48 -48
- package/src/modules/wizz/module.yaml +28 -28
- package/src/modules/wizz/overrides/wizz-agent-analyst.toml +17 -17
- package/src/modules/wizz/overrides/wizz-agent-architect.toml +21 -21
- package/src/modules/wizz/overrides/wizz-agent-dev.toml +20 -20
- package/src/modules/wizz/overrides/wizz-agent-pm.toml +11 -11
- package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +14 -14
- package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +14 -14
- package/src/modules/wizz/subagents/codex/wizz-exec-haiku.toml +17 -17
- package/src/modules/wizz/subagents/codex/wizz-exec-opus.toml +19 -19
- package/src/modules/wizz/subagents/codex/wizz-exec-review.toml +18 -17
- package/src/modules/wizz/subagents/codex/wizz-exec-sonnet.toml +18 -18
- package/src/modules/wizz/subagents/gemini/wizz-exec-haiku.md +17 -17
- package/src/modules/wizz/subagents/gemini/wizz-exec-opus.md +19 -19
- package/src/modules/wizz/subagents/gemini/wizz-exec-review.md +18 -17
- package/src/modules/wizz/subagents/gemini/wizz-exec-sonnet.md +18 -18
- package/src/modules/wizz/subagents/opencode/wizz-exec-haiku.md +17 -17
- package/src/modules/wizz/subagents/opencode/wizz-exec-opus.md +19 -19
- package/src/modules/wizz/subagents/opencode/wizz-exec-review.md +18 -17
- package/src/modules/wizz/subagents/opencode/wizz-exec-sonnet.md +18 -18
- package/src/modules/wizz/subagents/spec.yaml +84 -82
- package/src/modules/wizz/subagents/wizz-exec-haiku.md +17 -17
- package/src/modules/wizz/subagents/wizz-exec-opus.md +19 -19
- package/src/modules/wizz/subagents/wizz-exec-review.md +18 -17
- package/src/modules/wizz/subagents/wizz-exec-sonnet.md +18 -18
- package/src/skills-lib/cerebro/SKILL.md +61 -61
- package/src/skills-lib/cerebro/references/comandos-pesquisa-e-memoria.md +46 -46
- package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +65 -65
- package/src/skills-lib/cerebro/references/comandos-sessao.md +74 -74
- package/src/skills-lib/ctc-align/SKILL.md +37 -37
- package/src/skills-lib/find-skills/SKILL.md +19 -19
- package/src/skills-lib/pesquisa-de-publico-do-piva/README.md +33 -33
- package/src/skills-lib/pesquisa-de-publico-do-piva/SKILL.md +42 -42
- package/src/skills-lib/pesquisa-de-publico-do-piva/prompts.md +20 -20
- package/src/skills-lib/references/premium-agency-rules.md +63 -63
- package/src/skills-lib/security-audit-pentest/SKILL.md +31 -31
- package/src/skills-lib/security-audit-pentest/references/stage-1-validacao-entrada.md +37 -37
- package/src/skills-lib/security-audit-pentest/references/stage-2-autorizacao.md +61 -61
- package/src/skills-lib/security-audit-pentest/references/stage-3-abuso-volume.md +37 -37
- package/src/skills-lib/security-audit-pentest/references/stage-4-vazamento-resposta.md +52 -52
- package/src/skills-lib/site-launch-kit/SKILL.md +42 -42
- package/src/skills-lib/site-launch-kit/references/01-cta-principal.md +20 -20
- package/src/skills-lib/site-launch-kit/references/02-barra-fixa-mobile.md +24 -24
- package/src/skills-lib/site-launch-kit/references/03-tempo-de-resposta.md +21 -21
- package/src/skills-lib/site-launch-kit/references/04-prova-social.md +22 -22
- package/src/skills-lib/site-launch-kit/references/05-faq-decisao.md +28 -28
- package/src/skills-lib/site-launch-kit/references/06-imagens-reais.md +27 -27
- package/src/skills-lib/site-launch-kit/references/07-endereco-como-chegar.md +25 -25
- package/src/skills-lib/site-launch-kit/references/08-titles.md +30 -30
- package/src/skills-lib/site-launch-kit/references/09-open-graph.md +23 -23
- package/src/skills-lib/site-launch-kit/references/10-breadcrumbs.md +23 -23
- package/src/skills-lib/site-launch-kit/references/11-alt-text.md +28 -28
- package/src/skills-lib/site-launch-kit/references/12-schema-local.md +22 -22
- package/src/skills-lib/site-launch-kit/references/13-robots-sitemap.md +26 -26
- package/src/skills-lib/site-launch-kit/references/14-privacidade-termos.md +27 -27
- package/src/skills-lib/site-launch-kit/references/15-medicao.md +23 -23
- package/src/skills-lib/wizz-ai-product-design/SKILL.md +70 -70
- package/src/skills-lib/wizz-auth-and-secrets/SKILL.md +78 -78
- package/src/skills-lib/wizz-caching-and-queues/SKILL.md +40 -40
- package/src/skills-lib/wizz-cloud-and-infra/SKILL.md +22 -22
- package/src/skills-lib/wizz-database-and-deps/SKILL.md +52 -52
- package/src/skills-lib/wizz-database-scaling/SKILL.md +31 -31
- package/src/skills-lib/wizz-desktop-security/SKILL.md +49 -49
- package/src/skills-lib/wizz-implementation-planner/SKILL.md +56 -56
- package/src/skills-lib/wizz-implementation-planner/references/folder-structure-and-dependencies.md +14 -14
- package/src/skills-lib/wizz-implementation-planner/references/implementation-phases.md +15 -15
- package/src/skills-lib/wizz-implementation-planner/references/implementation-types.md +9 -9
- package/src/skills-lib/wizz-implementation-planner/references/motion-path-implementation.md +19 -19
- package/src/skills-lib/wizz-implementation-planner/references/performance-plan.md +27 -27
- package/src/skills-lib/wizz-infrastructure/SKILL.md +21 -21
- package/src/skills-lib/wizz-inicio-de-projeto/SKILL.md +63 -63
- package/src/skills-lib/wizz-inicio-de-projeto/references/implementacao-api-forms.md +27 -27
- package/src/skills-lib/wizz-inicio-de-projeto/references/padroes-arquiteturais-e-pastas.md +31 -31
- package/src/skills-lib/wizz-inicio-de-projeto/references/seguranca-e-regras-codigo.md +21 -21
- package/src/skills-lib/wizz-launch-readiness/SKILL.md +61 -61
- package/src/skills-lib/wizz-launch-readiness/references/01-tecnico-build.md +16 -16
- package/src/skills-lib/wizz-launch-readiness/references/02-seguranca.md +16 -16
- package/src/skills-lib/wizz-launch-readiness/references/03-seo-descoberta.md +16 -16
- package/src/skills-lib/wizz-launch-readiness/references/04-analytics-medicao.md +15 -15
- package/src/skills-lib/wizz-launch-readiness/references/05-conteudo-prova-social.md +15 -15
- package/src/skills-lib/wizz-launch-readiness/references/06-legal-lgpd.md +15 -15
- package/src/skills-lib/wizz-launch-readiness/references/07-infra-deploy-rollback.md +16 -16
- package/src/skills-lib/wizz-launch-readiness/references/08-fusao-priorizacao.md +19 -19
- package/src/skills-lib/wizz-launch-readiness/references/09-persistencia-project-context.md +26 -26
- package/src/skills-lib/wizz-motion-3d-director/SKILL.md +70 -70
- package/src/skills-lib/wizz-motion-3d-director/references/image-to-video-workflow.md +34 -35
- package/src/skills-lib/wizz-motion-3d-director/references/motion-paths.md +70 -70
- package/src/skills-lib/wizz-motion-3d-director/references/performance-and-handoff.md +17 -17
- package/src/skills-lib/wizz-offer-forge/README.md +9 -9
- package/src/skills-lib/wizz-offer-forge/SKILL.md +64 -64
- package/src/skills-lib/wizz-offer-forge/references/empilhamento-valor.md +17 -17
- package/src/skills-lib/wizz-offer-forge/references/garantia-reversa.md +16 -16
- package/src/skills-lib/wizz-offer-forge/references/mecanismo-unico.md +19 -19
- package/src/skills-lib/wizz-offer-forge/references/ponte-trafego.md +17 -17
- package/src/skills-lib/wizz-premium-landing-ui-researcher/SKILL.md +36 -36
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/audit-protocol.md +81 -82
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/component-sources.md +105 -105
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/core-goal.md +39 -39
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/dashboard-and-portfolio-modes.md +49 -50
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/handoffs.md +33 -34
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/landing-page-strategy.md +141 -142
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/mandatory-process.md +24 -24
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/output-format-and-quality.md +73 -73
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/prompt-templates.md +4 -4
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/site-levels.md +282 -283
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/source-first-protocol.md +39 -39
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/source-links.md +8 -8
- package/src/skills-lib/wizz-premium-landing-ui-researcher/references/stack-and-visual-direction.md +63 -64
- package/src/skills-lib/wizz-router/SKILL.md +38 -38
- package/src/skills-lib/wizz-router/references/auditoria-360.md +12 -12
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +80 -80
- package/src/skills-lib/wizz-tracking-audit/SKILL.md +48 -48
- package/src/skills-lib/wizz-tracking-audit/references/modo-diagnostico.md +43 -43
- package/src/skills-lib/wizz-tracking-audit/references/modo-implantacao.md +59 -59
- package/src/skills-lib/wizz-tracking-audit/references/utm-e-atribuicao.md +35 -35
- package/src/skills-lib/wizz-web-security/SKILL.md +35 -35
- package/src/skills-lib/wizz-web-security/references/checklist-deploy.md +50 -50
- package/src/skills-lib/wizz-web-security/references/headers-rate-limit-cors.md +33 -33
- package/src/skills-lib/wizz-web-security/references/owasp-top5-detalhado.md +36 -36
- package/tools/hooks/session-rules.js +14 -11
- package/tools/installer/core/resolved-customizations.js +58 -10
- package/tools/installer/core/resolved-schema.js +116 -18
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Implementation mode
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Executable checklist for before launching a campaign. Run top to bottom. Every item has a way to verify it — it's not a statement of faith.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Ruler: read Step 0 of `SKILL.md` first. Without a declared ruler, the report comes out without a number.
|
|
6
6
|
|
|
7
|
-
## 1.
|
|
7
|
+
## 1. Page and loading
|
|
8
8
|
|
|
9
|
-
|
|
|
9
|
+
| Check | How | Fails when |
|
|
10
10
|
|---|---|---|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
| Redirect |
|
|
14
|
-
| SSL |
|
|
11
|
+
| Page opens on a real mobile device | `wizz-agent-browser` in a phone viewport | Layout breaks or a block disappears |
|
|
12
|
+
| Time to main content | PageSpeed Insights, mobile tab | Outside the target declared by the project's ruler |
|
|
13
|
+
| Redirect | Open the ad link without a shortener in the middle | Any extra hop or loop |
|
|
14
|
+
| SSL | Valid lock icon and certificate on the final domain | Browser warning |
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Fails here: it's dev work. Don't touch the creative before fixing this.
|
|
17
17
|
|
|
18
|
-
## 2. Pixel
|
|
18
|
+
## 2. Pixel and server
|
|
19
19
|
|
|
20
|
-
|
|
|
20
|
+
| Check | How | Fails when |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| Pixel
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
22
|
+
| Pixel present on the page | The platform's debug extension or console | Doesn't fire `PageView` |
|
|
23
|
+
| Firing position | Check whether `PageView` fires before visible content | Fires on a late `onload`: inflates connect rate and lies about the visit |
|
|
24
|
+
| Server-side conversion event (CAPI) | The platform's quality panel | Only browser-side, no server-side |
|
|
25
|
+
| Deduplication | Same `event_id` between browser and server | No `event_id`: the same sale counts twice |
|
|
26
|
+
| Verified domain | The platform's business panel | Not verified: loses attribution on iOS |
|
|
27
27
|
|
|
28
|
-
>
|
|
28
|
+
> The pixel measures the pixel. A pretty connect rate with a slow page is a made-up metric, not conversion.
|
|
29
29
|
|
|
30
|
-
## 3.
|
|
30
|
+
## 3. Prioritized events
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Install in this order. The first four are mandatory; the rest come in once the funnel has that step.
|
|
33
33
|
|
|
34
|
-
1. `PageView` —
|
|
35
|
-
2. `ViewContent` —
|
|
36
|
-
3. `InitiateCheckout` —
|
|
37
|
-
4. `Purchase` —
|
|
38
|
-
5. `AddPaymentInfo` —
|
|
39
|
-
6. `Lead` —
|
|
40
|
-
7. `Subscribe`
|
|
41
|
-
8.
|
|
34
|
+
1. `PageView` — visit to the sales page
|
|
35
|
+
2. `ViewContent` — reached the offer block (not the same as opening the page)
|
|
36
|
+
3. `InitiateCheckout` — clicked to buy
|
|
37
|
+
4. `Purchase` — approved sale, with value and currency
|
|
38
|
+
5. `AddPaymentInfo` — filled in payment, separates checkout friction from price hesitation
|
|
39
|
+
6. `Lead` — capture, when a lead step exists
|
|
40
|
+
7. `Subscribe` or a recurrence event, when it exists
|
|
41
|
+
8. Custom upsell or order-bump event, when it exists
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Rule: an event without a monetary value in `Purchase` breaks ROAS. A duplicated event breaks everything.
|
|
44
44
|
|
|
45
|
-
## 4. Tags
|
|
45
|
+
## 4. Tags and attribution
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
See `utm-e-atribuicao.md` for the templates. What the implementation needs to prove:
|
|
48
48
|
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
49
|
+
- The UTM template is pasted into the ad's URL parameters field, not into the ad's destination.
|
|
50
|
+
- Every parameter carries name **and** ID.
|
|
51
|
+
- The checkout platform's native parameter (when one exists) receives the same packaged information, because checkout doesn't always pass through `utm_*`.
|
|
52
|
+
- No campaign, ad set, or ad name contains `|`, `#`, `&`, or `?`.
|
|
53
|
+
- The naming convention is written down somewhere the next person will read.
|
|
54
54
|
|
|
55
|
-
## 5.
|
|
55
|
+
## 5. Pass-through via checkout
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
This is the item that fails most and is the easiest to forget.
|
|
58
58
|
|
|
59
|
-
1.
|
|
60
|
-
2.
|
|
61
|
-
3.
|
|
62
|
-
4.
|
|
59
|
+
1. Open the page with a test UTM in the URL.
|
|
60
|
+
2. Click to buy.
|
|
61
|
+
3. On the checkout page, confirm the parameters arrived (URL, hidden field, or the platform's panel).
|
|
62
|
+
4. Confirm the sale webhook delivers those parameters to the final destination (bank, spreadsheet, attribution dashboard).
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
Breaks between 2 and 3: checkout isn't passing it through. Use the native parameter.
|
|
65
|
+
Breaks between 3 and 4: the problem is the integration, not the tag.
|
|
66
66
|
|
|
67
|
-
## 6.
|
|
67
|
+
## 6. Test purchase per path
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
Every entry route gets a real test purchase before you invest:
|
|
70
70
|
|
|
71
|
-
-
|
|
72
|
-
- link
|
|
71
|
+
- ad
|
|
72
|
+
- bio link
|
|
73
73
|
- story
|
|
74
|
-
-
|
|
75
|
-
-
|
|
74
|
+
- highlight
|
|
75
|
+
- DM or conversation
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
For each route, record: did the sale show up in the bank, did it show up in the attribution panel, and did it show up with the correct source. A route that doesn't pass all three is a blind route.
|
|
78
78
|
|
|
79
|
-
## 7.
|
|
79
|
+
## 7. Sign-off
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Before clearing the campaign to launch, the report needs to answer yes to all five:
|
|
82
82
|
|
|
83
|
-
1.
|
|
84
|
-
2.
|
|
85
|
-
3.
|
|
86
|
-
4.
|
|
87
|
-
5.
|
|
83
|
+
1. Is the visit measured at the right moment?
|
|
84
|
+
2. Does the sale reach your own bank?
|
|
85
|
+
3. Does the sale know which ad it came from, by ID?
|
|
86
|
+
4. Is organic what's left over after tagging everything, not a bucket of laziness?
|
|
87
|
+
5. Is there at least one approved test purchase per route?
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
Any "no" becomes a `CRITICAL` or `HIGH` finding. Nothing launches with an open `CRITICAL`.
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
# UTM
|
|
1
|
+
# UTM and attribution
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The cement holding everything else together. If the tag is wrong, the whole funnel measures fiction.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## The core rule
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Every parameter carries **name and ID**, separated by a fixed delimiter. The name exists for humans to read; the ID exists so attribution survives a rename.
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
utm_campaign={{campaign.name}}|{{campaign.id}}
|
|
11
11
|
utm_medium={{adset.name}}|{{adset.id}}
|
|
12
12
|
utm_content={{ad.name}}|{{ad.id}}
|
|
13
13
|
utm_term={{placement}}
|
|
14
|
-
utm_source=<
|
|
14
|
+
utm_source=<platform>
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Paste into the ad's **URL parameters** field, never into the destination.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Redundancy in the native parameter
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Many checkouts don't pass `utm_*` through to the sale webhook. When the checkout platform has its own parameter (for example `xcod`, `src`, or `sck`), pack the same information there too, with a long, unlikely separator:
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
xcod=<
|
|
24
|
+
xcod=<source><SEP><campaign.name>|<campaign.id><SEP><adset.name>|<adset.id><SEP><ad.name>|<ad.id><SEP><placement>
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
The separator needs to be a string that never appears in a campaign name. Pick one once and never change it: changing it breaks the history.
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Forbidden delimiters in names
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Never use `|`, `#`, `&`, or `?` in a campaign, ad set, or ad name. They are delimiters of the tag string itself.
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
If it happens: **recreate the campaign**. Renaming doesn't fix it, because the platform keeps serving the old cached name for impressions already delivered.
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Naming pattern that causes no trouble: lowercase, no accents, words separated by hyphen or underscore, fields in a fixed order. Write the pattern down somewhere. A pattern that only exists in someone's head isn't a pattern.
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Other platforms
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
The format is the same across every media platform: the platform's native macro filling in `utm_*`, plus packing into the checkout's native parameter when one exists.
|
|
40
40
|
|
|
41
|
-
|
|
|
41
|
+
| Platform | What changes |
|
|
42
42
|
|---|---|
|
|
43
43
|
| Meta | Macros `{{campaign.name}}`, `{{campaign.id}}`, `{{adset.*}}`, `{{ad.*}}`, `{{placement}}` |
|
|
44
|
-
| Google | Macros
|
|
45
|
-
| TikTok, Kwai, Taboola |
|
|
44
|
+
| Google | Macros in single braces, plus `{lpurl}?` in front and `keyword`, `device`, `network` |
|
|
45
|
+
| TikTok, Kwai, Taboola | Same structure, the platform's own macro names |
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
Before writing a platform's template, confirm the exact macro name in its documentation. A wrong macro delivers the literal string `{{campaign.id}}` in the URL, and nobody notices until the first sale.
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
There's an extra variation when there's a cloaker in front of the checkout: an extra connector so the string doesn't break. Confirm with whoever installed the cloaker.
|
|
50
50
|
|
|
51
|
-
##
|
|
51
|
+
## The organic bucket
|
|
52
52
|
|
|
53
|
-
"
|
|
53
|
+
"Organic" isn't a channel. It's everything that arrived without a tag: an Instagram highlight without a UTM, a bio link without a UTM, DMs, repeat purchases, word of mouth.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Diagnosis: tag **every** owned route (bio, highlight, story, DM, email, group) and watch organic drop. What's left after that is real organic. The size of the drop is proof of how much the bucket was lying.
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Suggested pattern for an owned route:
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
utm_source=instagram&utm_medium=<bio|
|
|
60
|
+
utm_source=instagram&utm_medium=<bio|highlight|story|dm>&utm_campaign=<highlight-or-post-name>
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## First touch
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
Last click is the default of almost every tool, and it hides which ad **introduced** the offer. Store the first touch in your own database (the first UTM the visitor saw, with a date) and compare it with the last. Simple multi-touch, two fields, resolves most creative decisions.
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## Quick check
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
Five checks that catch almost every tagging error:
|
|
70
70
|
|
|
71
|
-
1.
|
|
72
|
-
2.
|
|
73
|
-
3.
|
|
74
|
-
4.
|
|
75
|
-
5.
|
|
71
|
+
1. Open the ad in preview and read the final URL: is a macro left un-substituted?
|
|
72
|
+
2. Does the UTM survive the redirect all the way to checkout?
|
|
73
|
+
3. Does the sale webhook deliver the fields to the bank?
|
|
74
|
+
4. Do two different ads generate different `utm_content` values?
|
|
75
|
+
5. Does renaming an ad break attribution? If it does, it's attributing by name.
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wizz-web-security
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
IDOR, SQL injection,
|
|
7
|
-
|
|
8
|
-
Use
|
|
4
|
+
Review the security of web apps. Use when: auditing vulnerabilities, before deploy/PR, implementing auth,
|
|
5
|
+
adding an API endpoint, handling user input, configuring headers, CSP, rate limiting, CORS, clickjacking,
|
|
6
|
+
IDOR, SQL injection, PII/data leakage in the response, user enumeration, OWASP Top 10.
|
|
7
|
+
Includes triage of recurring pentest findings + the checklist of the 8 vulnerabilities and examples for Next.js + Supabase + Clerk.
|
|
8
|
+
Use when the user asks for a security audit or pre-deploy review, or mentions CORS, CSP, rate limiting, IDOR, or OWASP.
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Web Security (OWASP Top 10)
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Recurring pentest findings (ranked by severity)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The ones that show up most in an audit, with the direct fix. Use as a quick triage — start here in every security review.
|
|
16
16
|
|
|
17
|
-
| # |
|
|
17
|
+
| # | Finding | Severity | Fix | Where |
|
|
18
18
|
|---|-------|-----------|----------|------|
|
|
19
|
-
| 1 | SQL Injection | 🔴
|
|
20
|
-
| 2 | IDOR (
|
|
21
|
-
| 3 | Mass assignment (body
|
|
22
|
-
| 4 | RLS
|
|
23
|
-
| 5 |
|
|
24
|
-
| 6 |
|
|
25
|
-
| 7 |
|
|
26
|
-
| 8 |
|
|
27
|
-
| 9 | CORS
|
|
28
|
-
| 10 | PII/
|
|
29
|
-
| 11 | JWT
|
|
30
|
-
| 12 |
|
|
31
|
-
| 13 | Clickjacking (
|
|
32
|
-
|
|
33
|
-
>
|
|
19
|
+
| 1 | SQL Injection | 🔴 Critical (stop-the-line) | Parameterized query / query builder, never interpolate strings | `references/owasp-top5-detalhado.md` §3 |
|
|
20
|
+
| 2 | IDOR (resource by ID without checking owner) | 🔴 Critical (stop-the-line) | Validate resource ownership on the server for every request | `references/owasp-top5-detalhado.md` §1 |
|
|
21
|
+
| 3 | Mass assignment (entire body goes to the database) | 🔴 Critical (stop-the-line) | Field allowlist: only save the form's fields, never `spread` the body | `references/owasp-top5-detalhado.md` §6 |
|
|
22
|
+
| 4 | Permissive RLS (`USING(true)`) or a table with no policy | 🔴 Critical | A policy that ties `auth.uid()` to the owner; every new table always gets a policy | `references/owasp-top5-detalhado.md` §1 |
|
|
23
|
+
| 5 | No rate limit (free brute force) | 🟠 High | Limit per IP **and** per account + lockout/CAPTCHA on login | `references/headers-rate-limit-cors.md` |
|
|
24
|
+
| 6 | IP origin read from the socket behind a CDN | 🟠 High | Read the IP from the right header (a trusted `x-forwarded-for` from the proxy), otherwise the rate limit doesn't exist | `references/headers-rate-limit-cors.md` |
|
|
25
|
+
| 7 | Per-call cost with no limiter (AI/SMS/email) | 🟠 High | Rate limit + per-account quota on every route that spends real money | `references/headers-rate-limit-cors.md` |
|
|
26
|
+
| 8 | Extraction via pagination (entire database, record by record) | 🟠 High | Filter by owner in the query + page limit + scan detection | `references/headers-rate-limit-cors.md` |
|
|
27
|
+
| 9 | CORS reflecting the `Origin` | 🟠 High | Origin allowlist, never echo the received `Origin` | `references/headers-rate-limit-cors.md` |
|
|
28
|
+
| 10 | Too much PII/data in the response (even password hashes) | 🟠 High | Return only the necessary fields (output allowlist) | `references/headers-rate-limit-cors.md` |
|
|
29
|
+
| 11 | JWT in the URL / token still alive after logout | 🟠 High | Token in the `Authorization` header + revoke on logout | skill `wizz-auth-and-secrets` |
|
|
30
|
+
| 12 | User enumeration (error reveals whether an email exists) | 🟡 Medium | Generic message + constant-time response | skill `wizz-auth-and-secrets` |
|
|
31
|
+
| 13 | Clickjacking (no header) | 🟡 Medium (1 min) | `X-Frame-Options: DENY` + CSP `frame-ancestors 'none'` | `references/headers-rate-limit-cors.md` |
|
|
32
|
+
|
|
33
|
+
> The first four (SQLi, IDOR, mass assignment, and permissive RLS) are **stop-the-line**: if it shows up, fix it before anything else.
|
|
34
34
|
>
|
|
35
|
-
>
|
|
35
|
+
> For a full adversarial audit (hunting with exploit proof + a prioritized plan), use the `security-audit-pentest` skill. This skill here is for **fixing** a specific finding from the table.
|
|
36
36
|
|
|
37
37
|
## References (load on demand)
|
|
38
38
|
|
|
39
|
-
- `references/owasp-top5-detalhado.md` —
|
|
40
|
-
- `references/headers-rate-limit-cors.md` —
|
|
41
|
-
- `references/checklist-deploy.md` — checklist
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
- [ ]
|
|
45
|
-
- [ ]
|
|
46
|
-
- [ ] HTTPS
|
|
47
|
-
- [ ]
|
|
48
|
-
- [ ]
|
|
49
|
-
- [ ]
|
|
39
|
+
- `references/owasp-top5-detalhado.md` — detail + code example (Next.js + Clerk + Supabase) for the 5 most common OWASP categories: Broken Access Control, Cryptographic Failures, Injection, XSS, CSRF. Load when digging into a specific finding from the table above.
|
|
40
|
+
- `references/headers-rate-limit-cors.md` — mandatory security headers (with ready-made config for `next.config.ts`), rate limiting (login/API/billing, fail-closed), CORS (allowlist, code example), and how to avoid PII leakage/over-fetch in API responses. Load when implementing or reviewing any of those four points.
|
|
41
|
+
- `references/checklist-deploy.md` — checklist of the 8 most common vulnerabilities (HTTPS, server-side validation, secrets, rate limit, CSP, upload, SQL injection, backup), as a pre-deploy audit format. Load before a deploy or a formal security review.
|
|
42
|
+
|
|
43
|
+
## Quick review checklist
|
|
44
|
+
- [ ] Are all user inputs validated and sanitized?
|
|
45
|
+
- [ ] Is authentication checked on every protected route?
|
|
46
|
+
- [ ] Is HTTPS forced with an HTTP redirect?
|
|
47
|
+
- [ ] Are security headers configured?
|
|
48
|
+
- [ ] Do logs contain no sensitive data?
|
|
49
|
+
- [ ] Have dependencies been audited?
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# Checklist
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 1. HTTPS
|
|
6
|
-
- [ ]
|
|
7
|
-
- [ ]
|
|
8
|
-
- [ ]
|
|
9
|
-
|
|
10
|
-
## 2.
|
|
11
|
-
- [ ]
|
|
12
|
-
- [ ] `workspaceId`/`userId`
|
|
13
|
-
- [ ]
|
|
14
|
-
- [ ] Supabase: RLS
|
|
15
|
-
|
|
16
|
-
## 3.
|
|
17
|
-
- [ ]
|
|
18
|
-
- [ ] `.env*`
|
|
19
|
-
- [ ] `.env.local`
|
|
20
|
-
- [ ]
|
|
21
|
-
- [ ]
|
|
22
|
-
|
|
23
|
-
## 4.
|
|
24
|
-
- [ ]
|
|
25
|
-
- [ ]
|
|
26
|
-
- [ ]
|
|
27
|
-
- [ ]
|
|
28
|
-
- [ ]
|
|
1
|
+
# Checklist of the 8 Most Common Vulnerabilities
|
|
2
|
+
|
|
3
|
+
Load this file for a quick audit before deploy or a security review.
|
|
4
|
+
|
|
5
|
+
## 1. Forced HTTPS
|
|
6
|
+
- [ ] Does the platform force HTTPS? (Vercel: yes by default)
|
|
7
|
+
- [ ] Is the `Strict-Transport-Security` header explicitly configured in the code?
|
|
8
|
+
- [ ] No hardcoded `http://` URL in redirects or fetch calls?
|
|
9
|
+
|
|
10
|
+
## 2. Server-side validation
|
|
11
|
+
- [ ] Does every API endpoint validate input with Zod (`.parse()` or `.safeParse()`)?
|
|
12
|
+
- [ ] Are `workspaceId`/`userId` validated as UUID before hitting the database?
|
|
13
|
+
- [ ] Are business rules re-validated on the backend (never trusting the client alone)?
|
|
14
|
+
- [ ] Supabase: is RLS active on the tables? Do queries always filter by `workspace_id`/`user_id`?
|
|
15
|
+
|
|
16
|
+
## 3. Database password / secrets in code
|
|
17
|
+
- [ ] No secret hardcoded in `.ts`/`.tsx`/`.js`?
|
|
18
|
+
- [ ] Is `.env*` in `.gitignore`? (`git check-ignore -v .env.local`)
|
|
19
|
+
- [ ] Does `.env.local` never show up in `git log --all`?
|
|
20
|
+
- [ ] Does crypto use a key from `process.env`, with no string fallback?
|
|
21
|
+
- [ ] Security grep: `grep -r "sk_live\|sk_test\|service_role\|eyJ" src/` → empty?
|
|
22
|
+
|
|
23
|
+
## 4. API rate limiting
|
|
24
|
+
- [ ] Do auth endpoints have per-IP rate limiting?
|
|
25
|
+
- [ ] Do billing endpoints (checkout, Stripe portal) have rate limiting?
|
|
26
|
+
- [ ] Do endpoints that trigger expensive/external operations have rate limiting?
|
|
27
|
+
- [ ] Do admin endpoints have rate limiting + timing-safe comparison?
|
|
28
|
+
- [ ] Do state-writing routes fail closed if the rate limiter goes down? (e.g. `failOpen: false` in the library)
|
|
29
29
|
|
|
30
30
|
## 5. Content Security Policy
|
|
31
|
-
- [ ]
|
|
32
|
-
- [ ] `X-Frame-Options: DENY`
|
|
33
|
-
- [ ] `X-Content-Type-Options: nosniff`
|
|
34
|
-
- [ ] CSP
|
|
35
|
-
|
|
36
|
-
## 6. Upload
|
|
37
|
-
- [ ]
|
|
38
|
-
- [ ]
|
|
39
|
-
- [ ]
|
|
40
|
-
- [ ]
|
|
41
|
-
|
|
42
|
-
## 7. SQL injection
|
|
43
|
-
- [ ]
|
|
44
|
-
- [ ] Supabase:
|
|
45
|
-
- [ ]
|
|
46
|
-
- [ ] Grep: `grep -r "\.sql\|raw(\|\.query(" src/` →
|
|
47
|
-
|
|
48
|
-
## 8.
|
|
49
|
-
- [ ]
|
|
50
|
-
- [ ]
|
|
51
|
-
- [ ]
|
|
52
|
-
- [ ]
|
|
31
|
+
- [ ] Is the `Content-Security-Policy` header configured? (`next.config.ts` `headers()` or middleware)
|
|
32
|
+
- [ ] Is `X-Frame-Options: DENY` configured?
|
|
33
|
+
- [ ] Is `X-Content-Type-Options: nosniff` configured?
|
|
34
|
+
- [ ] Was the CSP tested in dev with no console errors?
|
|
35
|
+
|
|
36
|
+
## 6. Upload without type verification
|
|
37
|
+
- [ ] If there's upload: does it check the MIME type on the server (not just the client)?
|
|
38
|
+
- [ ] Is a file size limit enforced on the server?
|
|
39
|
+
- [ ] Are allowed extensions an allowlist (not a blocklist)?
|
|
40
|
+
- [ ] If there's no upload: confirm there's no hidden `<input type="file">`?
|
|
41
|
+
|
|
42
|
+
## 7. SQL injection in search
|
|
43
|
+
- [ ] No query builds SQL with string interpolation/concatenation?
|
|
44
|
+
- [ ] Supabase: is all access via the query builder (`.from().select().eq()`) or RPC with named params?
|
|
45
|
+
- [ ] Have Postgres RPCs been audited in the dashboard: no `EXECUTE format(...)` with user input?
|
|
46
|
+
- [ ] Grep: `grep -r "\.sql\|raw(\|\.query(" src/` → results reviewed?
|
|
47
|
+
|
|
48
|
+
## 8. Automated backup
|
|
49
|
+
- [ ] Does the Supabase plan have PITR or daily backup enabled? (check the dashboard)
|
|
50
|
+
- [ ] Is backup retention documented?
|
|
51
|
+
- [ ] Is there a restore runbook?
|
|
52
|
+
- [ ] Are backup credentials protected (not in the repo)?
|