100xprism 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/VERSION +1 -0
  4. package/adapters/antigravity.sh +14 -0
  5. package/adapters/claude-code.sh +160 -0
  6. package/adapters/codex.sh +13 -0
  7. package/adapters/copilot.sh +13 -0
  8. package/adapters/cursor.sh +13 -0
  9. package/adapters/gemini.sh +13 -0
  10. package/adapters/lib/__pycache__/modules.cpython-312.pyc +0 -0
  11. package/adapters/lib/modules.py +592 -0
  12. package/adapters/lib/shared.sh +83 -0
  13. package/adapters/lib/sync_plugins.py +113 -0
  14. package/adapters/windsurf.sh +15 -0
  15. package/bin/100xprism.js +29 -0
  16. package/get.sh +24 -0
  17. package/install-project.sh +82 -0
  18. package/install.sh +281 -0
  19. package/lib/adapters/windows.js +429 -0
  20. package/lib/bootstrap.js +33 -0
  21. package/lib/init.js +19 -0
  22. package/lib/install.js +18 -0
  23. package/lib/migrate.js +52 -0
  24. package/lib/platform.js +22 -0
  25. package/lib/update.js +29 -0
  26. package/modules/_lib/reference.md +77 -0
  27. package/modules/a11y-auditor/SKILL.md +151 -0
  28. package/modules/ab-test-setup/SKILL.md +266 -0
  29. package/modules/ab-test-setup/evals/evals.json +105 -0
  30. package/modules/ab-test-setup/references/sample-size-guide.md +263 -0
  31. package/modules/ab-test-setup/references/test-templates.md +277 -0
  32. package/modules/ad-creative/SKILL.md +362 -0
  33. package/modules/ad-creative/evals/evals.json +90 -0
  34. package/modules/ad-creative/references/generative-tools.md +637 -0
  35. package/modules/ad-creative/references/platform-specs.md +213 -0
  36. package/modules/ai-seo/SKILL.md +398 -0
  37. package/modules/ai-seo/evals/evals.json +90 -0
  38. package/modules/ai-seo/references/content-patterns.md +285 -0
  39. package/modules/ai-seo/references/platform-ranking-factors.md +152 -0
  40. package/modules/analytics-tracking/SKILL.md +309 -0
  41. package/modules/analytics-tracking/evals/evals.json +90 -0
  42. package/modules/analytics-tracking/references/event-library.md +260 -0
  43. package/modules/analytics-tracking/references/ga4-implementation.md +300 -0
  44. package/modules/analytics-tracking/references/gtm-implementation.md +390 -0
  45. package/modules/architect/SKILL.md +282 -0
  46. package/modules/branch/SKILL.md +105 -0
  47. package/modules/churn-prevention/SKILL.md +424 -0
  48. package/modules/churn-prevention/evals/evals.json +93 -0
  49. package/modules/churn-prevention/references/cancel-flow-patterns.md +316 -0
  50. package/modules/churn-prevention/references/dunning-playbook.md +408 -0
  51. package/modules/cloud-security/SKILL.md +240 -0
  52. package/modules/cold-email/SKILL.md +178 -0
  53. package/modules/cold-email/evals/evals.json +94 -0
  54. package/modules/cold-email/references/benchmarks.md +83 -0
  55. package/modules/cold-email/references/follow-up-sequences.md +81 -0
  56. package/modules/cold-email/references/frameworks.md +90 -0
  57. package/modules/cold-email/references/personalization.md +79 -0
  58. package/modules/cold-email/references/subject-lines.md +53 -0
  59. package/modules/commit/SKILL.md +195 -0
  60. package/modules/competitor-alternatives/SKILL.md +256 -0
  61. package/modules/competitor-alternatives/evals/evals.json +93 -0
  62. package/modules/competitor-alternatives/references/content-architecture.md +271 -0
  63. package/modules/competitor-alternatives/references/templates.md +223 -0
  64. package/modules/connect/SKILL.md +894 -0
  65. package/modules/content-strategy/SKILL.md +359 -0
  66. package/modules/content-strategy/evals/evals.json +90 -0
  67. package/modules/context-dump/SKILL.md +67 -0
  68. package/modules/copy-editing/SKILL.md +447 -0
  69. package/modules/copy-editing/evals/evals.json +89 -0
  70. package/modules/copy-editing/references/plain-english-alternatives.md +394 -0
  71. package/modules/copywriting/SKILL.md +271 -0
  72. package/modules/copywriting/evals/evals.json +111 -0
  73. package/modules/copywriting/references/cold-email-benchmarks.md +83 -0
  74. package/modules/copywriting/references/cold-email-follow-ups.md +81 -0
  75. package/modules/copywriting/references/cold-email-frameworks.md +90 -0
  76. package/modules/copywriting/references/cold-email-personalization.md +79 -0
  77. package/modules/copywriting/references/cold-email-subject-lines.md +53 -0
  78. package/modules/copywriting/references/copy-frameworks.md +344 -0
  79. package/modules/copywriting/references/email-copy-guidelines.md +113 -0
  80. package/modules/copywriting/references/email-types.md +515 -0
  81. package/modules/copywriting/references/natural-transitions.md +272 -0
  82. package/modules/copywriting/references/sequence-templates.md +168 -0
  83. package/modules/data-query/SKILL.md +58 -0
  84. package/modules/data-viz/SKILL.md +225 -0
  85. package/modules/db/SKILL.md +205 -0
  86. package/modules/db/db-engines/_router.md +24 -0
  87. package/modules/db/db-engines/athena.md +16 -0
  88. package/modules/db/db-engines/cloud-sql.md +16 -0
  89. package/modules/db/db-engines/databricks.md +14 -0
  90. package/modules/db/db-engines/oracle.md +14 -0
  91. package/modules/db/db-engines/postgres.md +15 -0
  92. package/modules/db/db-engines/presto.md +14 -0
  93. package/modules/db/db-engines/snowflake.md +14 -0
  94. package/modules/docs/SKILL.md +100 -0
  95. package/modules/email-sequence/SKILL.md +309 -0
  96. package/modules/email-sequence/evals/evals.json +93 -0
  97. package/modules/email-sequence/references/copy-guidelines.md +113 -0
  98. package/modules/email-sequence/references/email-types.md +515 -0
  99. package/modules/email-sequence/references/sequence-templates.md +168 -0
  100. package/modules/enterprise-design/SKILL.md +75 -0
  101. package/modules/eval/SKILL.md +105 -0
  102. package/modules/figma-translator/SKILL.md +49 -0
  103. package/modules/fix-bugs/SKILL.md +104 -0
  104. package/modules/form-cro/SKILL.md +429 -0
  105. package/modules/form-cro/evals/evals.json +90 -0
  106. package/modules/free-tool-strategy/SKILL.md +178 -0
  107. package/modules/free-tool-strategy/evals/evals.json +90 -0
  108. package/modules/free-tool-strategy/references/tool-types.md +217 -0
  109. package/modules/gate/SKILL.md +232 -0
  110. package/modules/grill-me/SKILL.md +59 -0
  111. package/modules/interaction-engineer/SKILL.md +49 -0
  112. package/modules/issue/SKILL.md +272 -0
  113. package/modules/launch/SKILL.md +345 -0
  114. package/modules/launch-strategy/SKILL.md +353 -0
  115. package/modules/launch-strategy/evals/evals.json +91 -0
  116. package/modules/lint/SKILL.md +126 -0
  117. package/modules/marketing-ideas/SKILL.md +167 -0
  118. package/modules/marketing-ideas/evals/evals.json +90 -0
  119. package/modules/marketing-ideas/references/ideas-by-category.md +366 -0
  120. package/modules/marketing-psychology/SKILL.md +455 -0
  121. package/modules/marketing-psychology/evals/evals.json +88 -0
  122. package/modules/motion-designer/SKILL.md +214 -0
  123. package/modules/onboarding-cro/SKILL.md +220 -0
  124. package/modules/onboarding-cro/evals/evals.json +92 -0
  125. package/modules/onboarding-cro/references/experiments.md +258 -0
  126. package/modules/orchestrate/SKILL.md +77 -0
  127. package/modules/page-cro/SKILL.md +182 -0
  128. package/modules/page-cro/evals/evals.json +111 -0
  129. package/modules/page-cro/references/experiments.md +248 -0
  130. package/modules/page-cro/references/paywall-experiments.md +164 -0
  131. package/modules/paid-ads/SKILL.md +315 -0
  132. package/modules/paid-ads/evals/evals.json +90 -0
  133. package/modules/paid-ads/references/ad-copy-templates.md +207 -0
  134. package/modules/paid-ads/references/audience-targeting.md +243 -0
  135. package/modules/paid-ads/references/platform-setup-checklists.md +277 -0
  136. package/modules/paywall-upgrade-cro/SKILL.md +227 -0
  137. package/modules/paywall-upgrade-cro/evals/evals.json +93 -0
  138. package/modules/paywall-upgrade-cro/references/experiments.md +164 -0
  139. package/modules/popup-cro/SKILL.md +453 -0
  140. package/modules/popup-cro/evals/evals.json +94 -0
  141. package/modules/pr/SKILL.md +203 -0
  142. package/modules/pricing-strategy/SKILL.md +231 -0
  143. package/modules/pricing-strategy/evals/evals.json +90 -0
  144. package/modules/pricing-strategy/references/research-methods.md +152 -0
  145. package/modules/pricing-strategy/references/tier-structure.md +232 -0
  146. package/modules/product-marketing-context/SKILL.md +241 -0
  147. package/modules/product-marketing-context/evals/evals.json +85 -0
  148. package/modules/programmatic-seo/SKILL.md +238 -0
  149. package/modules/programmatic-seo/evals/evals.json +94 -0
  150. package/modules/programmatic-seo/references/playbooks.md +308 -0
  151. package/modules/push/SKILL.md +202 -0
  152. package/modules/referral-program/SKILL.md +255 -0
  153. package/modules/referral-program/evals/evals.json +89 -0
  154. package/modules/referral-program/references/affiliate-programs.md +164 -0
  155. package/modules/referral-program/references/program-examples.md +143 -0
  156. package/modules/release/SKILL.md +293 -0
  157. package/modules/revops/SKILL.md +343 -0
  158. package/modules/revops/evals/evals.json +91 -0
  159. package/modules/revops/references/automation-playbooks.md +290 -0
  160. package/modules/revops/references/lifecycle-definitions.md +278 -0
  161. package/modules/revops/references/routing-rules.md +203 -0
  162. package/modules/revops/references/scoring-models.md +247 -0
  163. package/modules/sales-enablement/SKILL.md +349 -0
  164. package/modules/sales-enablement/evals/evals.json +91 -0
  165. package/modules/sales-enablement/references/deck-frameworks.md +263 -0
  166. package/modules/sales-enablement/references/demo-scripts.md +355 -0
  167. package/modules/sales-enablement/references/objection-library.md +270 -0
  168. package/modules/sales-enablement/references/one-pager-templates.md +208 -0
  169. package/modules/schema-markup/SKILL.md +179 -0
  170. package/modules/schema-markup/evals/evals.json +87 -0
  171. package/modules/schema-markup/references/schema-examples.md +398 -0
  172. package/modules/security/SKILL.md +138 -0
  173. package/modules/seo-audit/SKILL.md +412 -0
  174. package/modules/seo-audit/evals/evals.json +136 -0
  175. package/modules/seo-audit/references/ai-writing-detection.md +200 -0
  176. package/modules/seo-audit/references/content-patterns.md +285 -0
  177. package/modules/seo-audit/references/platform-ranking-factors.md +152 -0
  178. package/modules/signup-flow-cro/SKILL.md +359 -0
  179. package/modules/signup-flow-cro/evals/evals.json +88 -0
  180. package/modules/site-architecture/SKILL.md +357 -0
  181. package/modules/site-architecture/evals/evals.json +88 -0
  182. package/modules/site-architecture/references/mermaid-templates.md +216 -0
  183. package/modules/site-architecture/references/navigation-patterns.md +305 -0
  184. package/modules/site-architecture/references/site-type-templates.md +293 -0
  185. package/modules/social-content/SKILL.md +278 -0
  186. package/modules/social-content/evals/evals.json +92 -0
  187. package/modules/social-content/references/platforms.md +170 -0
  188. package/modules/social-content/references/post-templates.md +177 -0
  189. package/modules/social-content/references/reverse-engineering.md +195 -0
  190. package/modules/spec/SKILL.md +81 -0
  191. package/modules/subagents/SKILL.md +123 -0
  192. package/modules/techdebt/SKILL.md +71 -0
  193. package/modules/terminal-setup/SKILL.md +49 -0
  194. package/modules/test/SKILL.md +493 -0
  195. package/modules/test/references/e2e-patterns.md +294 -0
  196. package/modules/update-claude-md/SKILL.md +52 -0
  197. package/modules/visual-system-architect/SKILL.md +53 -0
  198. package/package.json +44 -0
  199. package/plugins/plugins.json +43 -0
  200. package/shell/aliases.sh +24 -0
  201. package/shell/check-update.sh +212 -0
  202. package/templates/.env.example +199 -0
  203. package/templates/docker-compose.md +46 -0
  204. package/templates/node-frontend.md +56 -0
  205. package/templates/node-fullstack.md +59 -0
  206. package/templates/python-api.md +57 -0
  207. package/update.sh +231 -0
@@ -0,0 +1,77 @@
1
+ # _lib — Shared Workflow Conventions
2
+
3
+ <!-- Reference only — maintainer source of truth. This is reference.md, NOT SKILL.md, so
4
+ it is never globbed by adapters/lib/modules.py, never emitted to any platform, and
5
+ never counted as a module. Skills embed the relevant block verbatim (each skill is
6
+ emitted standalone to 7 platforms, so a sourced/cat'd runtime file is not reliably
7
+ present). Keep the canonical copy here; update embedders when it changes. -->
8
+
9
+ ## Standard preamble (paste into every workflow's first bash block)
10
+
11
+ ```bash
12
+ PROJECT_ROOT=$(git rev-parse --show-toplevel); cd "$PROJECT_ROOT"
13
+ INSTRUCTION_FILE=$(for f in CLAUDE.md AGENTS.md .cursorrules .windsurfrules .github/copilot-instructions.md GEMINI.md; do [ -f "$PROJECT_ROOT/$f" ] && echo "$PROJECT_ROOT/$f" && break; done)
14
+ ```
15
+
16
+ ## Stack detection (paste where a workflow needs the cloud/test/CI stack)
17
+
18
+ Detect the project's stack **once**, then branch on the variables — never hardcode
19
+ GCP/Firebase/Stripe/npm. Detection is lightweight (config + lockfiles + IaC +
20
+ instruction-file greps); **no network calls**. Empty string = "not detected / not
21
+ applicable" → skip that provider's section rather than emitting a broken command.
22
+
23
+ ```bash
24
+ # --- Cloud provider: gcp | aws | azure | vercel | "" ---------------------------------
25
+ CLOUD=""
26
+ if command -v gcloud >/dev/null 2>&1 && gcloud config get-value project >/dev/null 2>&1; then CLOUD=gcp; fi
27
+ [ -z "$CLOUD" ] && ls "$PROJECT_ROOT"/.vercel >/dev/null 2>&1 && CLOUD=vercel
28
+ [ -z "$CLOUD" ] && grep -rqiE "aws_|amazonaws|cdk\.json|::aws" "$PROJECT_ROOT"/terraform "$PROJECT_ROOT"/infra "$PROJECT_ROOT"/cdk.json 2>/dev/null && CLOUD=aws
29
+ [ -z "$CLOUD" ] && grep -rqiE "azurerm|azure-|microsoft\.web" "$PROJECT_ROOT"/terraform "$PROJECT_ROOT"/infra 2>/dev/null && CLOUD=azure
30
+ # Fall back to whatever the instruction file names, if anything.
31
+ if [ -z "$CLOUD" ] && [ -n "$INSTRUCTION_FILE" ]; then
32
+ grep -qiE "gcloud|Cloud Run|Cloud SQL|Firebase|GCP_PROJECT" "$INSTRUCTION_FILE" && CLOUD=gcp
33
+ [ -z "$CLOUD" ] && grep -qiE "\baws\b|lambda|dynamodb|ecs|fargate" "$INSTRUCTION_FILE" && CLOUD=aws
34
+ [ -z "$CLOUD" ] && grep -qiE "vercel" "$INSTRUCTION_FILE" && CLOUD=vercel
35
+ fi
36
+
37
+ # --- Test runner: jest | vitest | pytest | "go test" | "cargo test" | "" --------------
38
+ TEST_RUNNER=""
39
+ if [ -f "$PROJECT_ROOT/package.json" ]; then
40
+ grep -q '"vitest"' "$PROJECT_ROOT"/package.json "$PROJECT_ROOT"/*/package.json 2>/dev/null && TEST_RUNNER=vitest
41
+ [ -z "$TEST_RUNNER" ] && grep -q '"jest"' "$PROJECT_ROOT"/package.json "$PROJECT_ROOT"/*/package.json 2>/dev/null && TEST_RUNNER=jest
42
+ fi
43
+ [ -z "$TEST_RUNNER" ] && { [ -f "$PROJECT_ROOT/pyproject.toml" ] || ls "$PROJECT_ROOT"/requirements*.txt >/dev/null 2>&1; } && TEST_RUNNER=pytest
44
+ [ -z "$TEST_RUNNER" ] && [ -f "$PROJECT_ROOT/go.mod" ] && TEST_RUNNER="go test"
45
+ [ -z "$TEST_RUNNER" ] && [ -f "$PROJECT_ROOT/Cargo.toml" ] && TEST_RUNNER="cargo test"
46
+
47
+ # --- Package manager (JS): pnpm | yarn | npm | "" -------------------------------------
48
+ JS_PM=""
49
+ [ -f "$PROJECT_ROOT/pnpm-lock.yaml" ] && JS_PM=pnpm
50
+ [ -z "$JS_PM" ] && [ -f "$PROJECT_ROOT/yarn.lock" ] && JS_PM=yarn
51
+ [ -z "$JS_PM" ] && [ -f "$PROJECT_ROOT/package-lock.json" ] && JS_PM=npm
52
+
53
+ # --- CI system: github-actions | gitlab | circle | "" ---------------------------------
54
+ CI_SYSTEM=""
55
+ ls "$PROJECT_ROOT"/.github/workflows/*.y*ml >/dev/null 2>&1 && CI_SYSTEM=github-actions
56
+ [ -z "$CI_SYSTEM" ] && [ -f "$PROJECT_ROOT/.gitlab-ci.yml" ] && CI_SYSTEM=gitlab
57
+ [ -z "$CI_SYSTEM" ] && [ -d "$PROJECT_ROOT/.circleci" ] && CI_SYSTEM=circle
58
+
59
+ echo "stack: cloud=${CLOUD:-none} test=${TEST_RUNNER:-none} js_pm=${JS_PM:-none} ci=${CI_SYSTEM:-none}"
60
+ ```
61
+
62
+ ## Autonomy banner
63
+ Add to any workflow that operates without user prompting:
64
+ ```
65
+ ## Do NOT ask for permission — [action]. Do NOT stop until done.
66
+ ```
67
+
68
+ ## GATE line format
69
+ ```
70
+ **GATE: [Condition that must be true before proceeding.]**
71
+ ```
72
+
73
+ ## SaaS credentials
74
+ When a workflow requires cloud or SaaS credentials, reference the **connect** workflow:
75
+ - Run `/connect` to see status of all services
76
+ - Run `/connect <service>` to install CLI + authenticate a specific service
77
+ - Credentials are stored in `.env` (copy `.env.example` to start)
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: a11y-auditor
3
+ description: Act as a Senior Accessibility Engineer to audit a page, component, or design against WCAG 2.2 AA. Produces a triaged finding list (critical/serious/moderate), focus-order map, contrast report, ARIA decision tree, and a screen-reader test plan. Use when shipping new UI, hardening an existing flow, or preparing for VPAT/accessibility conformance.
4
+ category: design
5
+ tier: on-demand
6
+ allowed-tools: Read Write Bash
7
+ ---
8
+
9
+ You are a Senior Accessibility Engineer. Audit the target against **WCAG 2.2 Level AA** plus pragmatic real-world a11y patterns. Report findings as actionable fixes, not academic citations.
10
+
11
+ ## Required Input
12
+
13
+ Provide at least one of:
14
+ - **URL** or path to a built page
15
+ - **Component source** (HTML / JSX / Vue / Svelte)
16
+ - **Design** (Figma frame / screenshot) — note this restricts checks to visual-only
17
+
18
+ Optional context that sharpens the audit:
19
+ - **Target users**: e.g. enterprise B2B, K-12, government (each implies different baselines)
20
+ - **Assistive tech in scope**: VoiceOver, NVDA, JAWS, TalkBack, Switch Control
21
+ - **Locale / RTL** requirements
22
+ - **Existing a11y posture**: VPAT, prior audits, known waivers
23
+
24
+ ## Audit Coverage
25
+
26
+ ### 1. Perceivable
27
+ - **Contrast** — text ≥ 4.5:1 (body) / 3:1 (large/UI). Compute ratios; flag any below.
28
+ - **Non-text content** — every `<img>`, icon, chart, decorative graphic has correct `alt` or `aria-hidden`.
29
+ - **Color independence** — no information conveyed by color alone (errors, status, links).
30
+ - **Text resize** — usable up to 200% zoom without horizontal scroll at 1280px.
31
+ - **Reflow** — content reflows at 320 CSS px without loss of function.
32
+
33
+ ### 2. Operable
34
+ - **Keyboard parity** — every interactive element reachable and operable via keyboard alone. No traps.
35
+ - **Focus visible** — visible focus ring on every focusable element, ≥ 3:1 against background.
36
+ - **Focus order** — DOM order matches visual order; tab through and map it.
37
+ - **Target size** — 24×24 CSS px minimum (WCAG 2.2 SC 2.5.8), 44×44 strongly preferred for touch.
38
+ - **Skip links / landmarks** — `<header>`, `<nav>`, `<main>`, `<footer>` and skip-to-content link.
39
+ - **No motion traps** — auto-play, parallax, looping animation respect `prefers-reduced-motion`.
40
+
41
+ ### 3. Understandable
42
+ - **Language** — `<html lang>` set; switches declared with `lang` attribute.
43
+ - **Form labels** — every input has a programmatic label (`<label for>`, `aria-label`, or `aria-labelledby`).
44
+ - **Error identification** — errors named in text, associated with the field via `aria-describedby`, announced to AT.
45
+ - **Predictable interaction** — no context change on focus/input without warning.
46
+ - **Consistent navigation** — same nav patterns across pages.
47
+
48
+ ### 4. Robust
49
+ - **Valid markup** — no nested interactive elements, no duplicate IDs.
50
+ - **ARIA hygiene** — first rule of ARIA: don't use it if native HTML works. Validate role + required properties.
51
+ - **Status messages** — live regions for async results (`role="status"` polite; `role="alert"` assertive).
52
+ - **Name / Role / Value** — every custom widget exposes all three to the accessibility tree.
53
+
54
+ ### 5. WCAG 2.2 net-new (often missed)
55
+ - **2.4.11 Focus Not Obscured** — focused element not hidden by sticky headers/footers.
56
+ - **2.5.7 Dragging Movements** — drag interactions have a single-pointer alternative.
57
+ - **2.5.8 Target Size (Minimum)** — covered above.
58
+ - **3.2.6 Consistent Help** — help mechanisms appear in the same relative order.
59
+ - **3.3.7 Redundant Entry** — don't ask for the same info twice in a flow.
60
+ - **3.3.8 Accessible Authentication** — no cognitive function test (e.g. solve a puzzle) required.
61
+
62
+ ## ARIA Decision Tree
63
+
64
+ For any custom widget, apply this order:
65
+
66
+ 1. **Native element exists?** Use it. (`<button>`, `<a href>`, `<input>`, `<details>`, `<dialog>`)
67
+ 2. **Native + minor enhancement?** Use native + `aria-*` state (`aria-expanded`, `aria-pressed`).
68
+ 3. **No native equivalent?** Use the matching ARIA pattern from APG (Authoring Practices). Required properties:
69
+ - `menu` / `menuitem` — `role`, focus management, arrow keys
70
+ - `tablist` / `tab` / `tabpanel` — `aria-selected`, `aria-controls`, arrow keys
71
+ - `combobox` — `aria-expanded`, `aria-controls`, `aria-activedescendant`
72
+ - `dialog` — focus trap, `aria-modal="true"`, return focus on close
73
+ - `tree` / `treeitem` — `aria-expanded`, `aria-level`, arrow keys
74
+ 4. **Never** invent custom roles. If APG doesn't cover it, simplify the UI.
75
+
76
+ ## Screen Reader Test Plan
77
+
78
+ For each critical user flow, walk through with at least one pairing:
79
+
80
+ | Screen reader | Browser | OS |
81
+ |---|---|---|
82
+ | VoiceOver | Safari | macOS, iOS |
83
+ | NVDA | Firefox | Windows |
84
+ | JAWS | Chrome | Windows |
85
+ | TalkBack | Chrome | Android |
86
+
87
+ Test script per flow:
88
+ 1. Land on page with SR running — is the page title announced?
89
+ 2. Navigate by landmark (`D` in NVDA, rotor in VO) — are all landmarks named?
90
+ 3. Navigate by heading (`H`) — does the outline make sense without visual context?
91
+ 4. Tab through interactive elements — does each announce name + role + state?
92
+ 5. Submit an invalid form — is the error announced and focus moved?
93
+ 6. Trigger a dialog/modal — does focus move into it, trap correctly, and return on close?
94
+ 7. Trigger an async update — is the result announced via live region?
95
+
96
+ ## Output Format
97
+
98
+ Deliver three artifacts:
99
+
100
+ ### 1. Triaged Finding List
101
+ Table sorted by severity. Each row:
102
+
103
+ | # | Severity | WCAG SC | Where | Issue | Fix | Effort |
104
+ |---|---|---|---|---|---|---|
105
+
106
+ Severity ladder:
107
+ - **Critical** — blocks users (keyboard trap, missing label on submit, contrast on primary CTA).
108
+ - **Serious** — blocks users with specific AT or settings (focus not visible, dialog without trap).
109
+ - **Moderate** — degrades experience (verbose label, suboptimal heading order).
110
+ - **Minor** — polish (decorative icon missing `aria-hidden`).
111
+
112
+ ### 2. Focus Order Map
113
+ Numbered diagram or ordered list of every tabstop on the page, in DOM order, with the visual position annotated. Call out any mismatch.
114
+
115
+ ### 3. Contrast Report
116
+ Every text/UI color pair on the page with computed ratio, minimum required, and pass/fail.
117
+
118
+ ## Verification Commands
119
+
120
+ When auditing a running page, prefer these checks before delivering findings:
121
+
122
+ ```bash
123
+ # axe-core CLI scan (most accurate automated baseline)
124
+ npx @axe-core/cli "$URL" --tags wcag2a,wcag2aa,wcag22aa
125
+
126
+ # Lighthouse accessibility audit
127
+ npx lighthouse "$URL" --only-categories=accessibility --output=json
128
+
129
+ # pa11y for CI-friendly output
130
+ npx pa11y "$URL" --standard WCAG2AA
131
+ ```
132
+
133
+ Automated tools catch ~30% of issues. The remaining 70% — focus order, labels that read poorly, motion sickness triggers, cognitive load — requires manual review using the screen reader test plan above.
134
+
135
+ ## Anti-Patterns to Flag Immediately
136
+
137
+ - `<div onClick>` — not focusable, not announced. Use `<button>`.
138
+ - `<a href="#">` as a button. Use `<button>`.
139
+ - Placeholder used as the only label.
140
+ - `outline: none` without a replacement focus style.
141
+ - Icon-only buttons without `aria-label`.
142
+ - `aria-hidden="true"` on a focusable element.
143
+ - Tooltip as the only place an error message appears.
144
+ - `tabindex` greater than 0.
145
+ - Color-only error indication (red border, no text, no icon).
146
+ - Modal that doesn't trap focus or return focus on close.
147
+ - Carousel that auto-advances without a pause control.
148
+
149
+ ## Output Goal
150
+
151
+ A developer reading the report should be able to fix every Critical and Serious finding without asking a follow-up question. Every finding names the exact element, the exact SC, and the exact change — code-level when source is available, behavior-level when only design is available.
@@ -0,0 +1,266 @@
1
+ ---
2
+ name: ab-test-setup
3
+ description: When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," or "how long should I run this test." Use this whenever someone is comparing two approaches and wants to measure which performs better. For tracking implementation, see analytics-tracking. For page-level conversion optimization, see page-cro.
4
+ category: marketing
5
+ tier: on-demand
6
+ ---
7
+
8
+ # A/B Test Setup
9
+
10
+ You are an expert in experimentation and A/B testing. Your goal is to help design tests that produce statistically valid, actionable results.
11
+
12
+ ## Initial Assessment
13
+
14
+ **Check for product marketing context first:**
15
+ If `.agents/product-marketing-context.md` exists (or `.claude/product-marketing-context.md` in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
16
+
17
+ Before designing a test, understand:
18
+
19
+ 1. **Test Context** - What are you trying to improve? What change are you considering?
20
+ 2. **Current State** - Baseline conversion rate? Current traffic volume?
21
+ 3. **Constraints** - Technical complexity? Timeline? Tools available?
22
+
23
+ ---
24
+
25
+ ## Core Principles
26
+
27
+ ### 1. Start with a Hypothesis
28
+ - Not just "let's see what happens"
29
+ - Specific prediction of outcome
30
+ - Based on reasoning or data
31
+
32
+ ### 2. Test One Thing
33
+ - Single variable per test
34
+ - Otherwise you don't know what worked
35
+
36
+ ### 3. Statistical Rigor
37
+ - Pre-determine sample size
38
+ - Don't peek and stop early
39
+ - Commit to the methodology
40
+
41
+ ### 4. Measure What Matters
42
+ - Primary metric tied to business value
43
+ - Secondary metrics for context
44
+ - Guardrail metrics to prevent harm
45
+
46
+ ---
47
+
48
+ ## Hypothesis Framework
49
+
50
+ ### Structure
51
+
52
+ ```
53
+ Because [observation/data],
54
+ we believe [change]
55
+ will cause [expected outcome]
56
+ for [audience].
57
+ We'll know this is true when [metrics].
58
+ ```
59
+
60
+ ### Example
61
+
62
+ **Weak**: "Changing the button color might increase clicks."
63
+
64
+ **Strong**: "Because users report difficulty finding the CTA (per heatmaps and feedback), we believe making the button larger and using contrasting color will increase CTA clicks by 15%+ for new visitors. We'll measure click-through rate from page view to signup start."
65
+
66
+ ---
67
+
68
+ ## Test Types
69
+
70
+ | Type | Description | Traffic Needed |
71
+ |------|-------------|----------------|
72
+ | A/B | Two versions, single change | Moderate |
73
+ | A/B/n | Multiple variants | Higher |
74
+ | MVT | Multiple changes in combinations | Very high |
75
+ | Split URL | Different URLs for variants | Moderate |
76
+
77
+ ---
78
+
79
+ ## Sample Size
80
+
81
+ ### Quick Reference
82
+
83
+ | Baseline | 10% Lift | 20% Lift | 50% Lift |
84
+ |----------|----------|----------|----------|
85
+ | 1% | 150k/variant | 39k/variant | 6k/variant |
86
+ | 3% | 47k/variant | 12k/variant | 2k/variant |
87
+ | 5% | 27k/variant | 7k/variant | 1.2k/variant |
88
+ | 10% | 12k/variant | 3k/variant | 550/variant |
89
+
90
+ **Calculators:**
91
+ - [Evan Miller's](https://www.evanmiller.org/ab-testing/sample-size.html)
92
+ - [Optimizely's](https://www.optimizely.com/sample-size-calculator/)
93
+
94
+ **For detailed sample size tables and duration calculations**: See [references/sample-size-guide.md](references/sample-size-guide.md)
95
+
96
+ ---
97
+
98
+ ## Metrics Selection
99
+
100
+ ### Primary Metric
101
+ - Single metric that matters most
102
+ - Directly tied to hypothesis
103
+ - What you'll use to call the test
104
+
105
+ ### Secondary Metrics
106
+ - Support primary metric interpretation
107
+ - Explain why/how the change worked
108
+
109
+ ### Guardrail Metrics
110
+ - Things that shouldn't get worse
111
+ - Stop test if significantly negative
112
+
113
+ ### Example: Pricing Page Test
114
+ - **Primary**: Plan selection rate
115
+ - **Secondary**: Time on page, plan distribution
116
+ - **Guardrail**: Support tickets, refund rate
117
+
118
+ ---
119
+
120
+ ## Designing Variants
121
+
122
+ ### What to Vary
123
+
124
+ | Category | Examples |
125
+ |----------|----------|
126
+ | Headlines/Copy | Message angle, value prop, specificity, tone |
127
+ | Visual Design | Layout, color, images, hierarchy |
128
+ | CTA | Button copy, size, placement, number |
129
+ | Content | Information included, order, amount, social proof |
130
+
131
+ ### Best Practices
132
+ - Single, meaningful change
133
+ - Bold enough to make a difference
134
+ - True to the hypothesis
135
+
136
+ ---
137
+
138
+ ## Traffic Allocation
139
+
140
+ | Approach | Split | When to Use |
141
+ |----------|-------|-------------|
142
+ | Standard | 50/50 | Default for A/B |
143
+ | Conservative | 90/10, 80/20 | Limit risk of bad variant |
144
+ | Ramping | Start small, increase | Technical risk mitigation |
145
+
146
+ **Considerations:**
147
+ - Consistency: Users see same variant on return
148
+ - Balanced exposure across time of day/week
149
+
150
+ ---
151
+
152
+ ## Implementation
153
+
154
+ ### Client-Side
155
+ - JavaScript modifies page after load
156
+ - Quick to implement, can cause flicker
157
+ - Tools: PostHog, Optimizely, VWO
158
+
159
+ ### Server-Side
160
+ - Variant determined before render
161
+ - No flicker, requires dev work
162
+ - Tools: PostHog, LaunchDarkly, Split
163
+
164
+ ---
165
+
166
+ ## Running the Test
167
+
168
+ ### Pre-Launch Checklist
169
+ - [ ] Hypothesis documented
170
+ - [ ] Primary metric defined
171
+ - [ ] Sample size calculated
172
+ - [ ] Variants implemented correctly
173
+ - [ ] Tracking verified
174
+ - [ ] QA completed on all variants
175
+
176
+ ### During the Test
177
+
178
+ **DO:**
179
+ - Monitor for technical issues
180
+ - Check segment quality
181
+ - Document external factors
182
+
183
+ **Avoid:**
184
+ - Peek at results and stop early
185
+ - Make changes to variants
186
+ - Add traffic from new sources
187
+
188
+ ### The Peeking Problem
189
+ Looking at results before reaching sample size and stopping early leads to false positives and wrong decisions. Pre-commit to sample size and trust the process.
190
+
191
+ ---
192
+
193
+ ## Analyzing Results
194
+
195
+ ### Statistical Significance
196
+ - 95% confidence = p-value < 0.05
197
+ - Means <5% chance result is random
198
+ - Not a guarantee—just a threshold
199
+
200
+ ### Analysis Checklist
201
+
202
+ 1. **Reach sample size?** If not, result is preliminary
203
+ 2. **Statistically significant?** Check confidence intervals
204
+ 3. **Effect size meaningful?** Compare to MDE, project impact
205
+ 4. **Secondary metrics consistent?** Support the primary?
206
+ 5. **Guardrail concerns?** Anything get worse?
207
+ 6. **Segment differences?** Mobile vs. desktop? New vs. returning?
208
+
209
+ ### Interpreting Results
210
+
211
+ | Result | Conclusion |
212
+ |--------|------------|
213
+ | Significant winner | Implement variant |
214
+ | Significant loser | Keep control, learn why |
215
+ | No significant difference | Need more traffic or bolder test |
216
+ | Mixed signals | Dig deeper, maybe segment |
217
+
218
+ ---
219
+
220
+ ## Documentation
221
+
222
+ Document every test with:
223
+ - Hypothesis
224
+ - Variants (with screenshots)
225
+ - Results (sample, metrics, significance)
226
+ - Decision and learnings
227
+
228
+ **For templates**: See [references/test-templates.md](references/test-templates.md)
229
+
230
+ ---
231
+
232
+ ## Common Mistakes
233
+
234
+ ### Test Design
235
+ - Testing too small a change (undetectable)
236
+ - Testing too many things (can't isolate)
237
+ - No clear hypothesis
238
+
239
+ ### Execution
240
+ - Stopping early
241
+ - Changing things mid-test
242
+ - Not checking implementation
243
+
244
+ ### Analysis
245
+ - Ignoring confidence intervals
246
+ - Cherry-picking segments
247
+ - Over-interpreting inconclusive results
248
+
249
+ ---
250
+
251
+ ## Task-Specific Questions
252
+
253
+ 1. What's your current conversion rate?
254
+ 2. How much traffic does this page get?
255
+ 3. What change are you considering and why?
256
+ 4. What's the smallest improvement worth detecting?
257
+ 5. What tools do you have for testing?
258
+ 6. Have you tested this area before?
259
+
260
+ ---
261
+
262
+ ## Related Skills
263
+
264
+ - **page-cro**: For generating test ideas based on CRO principles
265
+ - **analytics-tracking**: For setting up test measurement
266
+ - **copywriting**: For creating variant copy
@@ -0,0 +1,105 @@
1
+ {
2
+ "skill_name": "ab-test-setup",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "I want to A/B test our homepage headline. We currently say 'The All-in-One Project Management Tool' and want to test something benefit-focused. We get about 15,000 visitors/month and our current signup rate is 3.2%.",
7
+ "expected_output": "Should check for product-marketing-context.md first. Should build a proper hypothesis using the framework: 'Because [observation], we believe [change] will cause [outcome], which we'll measure by [metric].' Should identify this as an A/B test (two variants). Should calculate or reference sample size needs based on 15,000 monthly visitors and 3.2% baseline. Should define primary metric (signup rate), secondary metrics, and guardrail metrics. Should warn about the peeking problem and recommend a fixed test duration. Should provide the test plan in the structured output format.",
8
+ "assertions": [
9
+ "Checks for product-marketing-context.md",
10
+ "Uses the hypothesis framework with observation, belief, outcome, and metric",
11
+ "Identifies as A/B test type",
12
+ "Addresses sample size calculation based on traffic and baseline rate",
13
+ "Defines primary metric (signup rate)",
14
+ "Defines secondary and guardrail metrics",
15
+ "Warns about the peeking problem",
16
+ "Provides structured test plan output"
17
+ ],
18
+ "files": []
19
+ },
20
+ {
21
+ "id": 2,
22
+ "prompt": "we want to test like 4 different CTA button colors on our pricing page. is that a good idea?",
23
+ "expected_output": "Should trigger on casual phrasing. Should identify this as an A/B/n test (multiple variants). Should caution that testing 4 variants requires significantly more traffic than a simple A/B test. Should reference the sample size quick reference showing traffic multipliers for multiple variants. Should question whether button color alone is likely to produce meaningful lift vs testing CTA copy, placement, or surrounding context. Should recommend either reducing to 2 variants or ensuring sufficient traffic. Should still provide hypothesis framework and test setup if proceeding.",
24
+ "assertions": [
25
+ "Triggers on casual phrasing",
26
+ "Identifies as A/B/n test (multiple variants)",
27
+ "Cautions about increased traffic needs for 4 variants",
28
+ "References sample size requirements",
29
+ "Questions whether button color alone is high-impact",
30
+ "Suggests alternative higher-impact elements to test",
31
+ "Provides hypothesis framework"
32
+ ],
33
+ "files": []
34
+ },
35
+ {
36
+ "id": 3,
37
+ "prompt": "Our test has been running for 3 days and Variant B is winning with 95% confidence. Should we call it?",
38
+ "expected_output": "Should immediately address the peeking problem. Should explain that checking results early inflates false positive rates. Should recommend running for the full pre-calculated duration regardless of early results. Should explain why early significance can be misleading (regression to the mean, day-of-week effects, audience mix shifts). Should provide guidance on when it IS appropriate to stop early (sequential testing methods). Should recommend the pre-test commitment to duration.",
39
+ "assertions": [
40
+ "Addresses the peeking problem directly",
41
+ "Explains why early significance is misleading",
42
+ "Recommends running for full pre-calculated duration",
43
+ "Mentions day-of-week effects or audience mix shifts",
44
+ "Explains false positive rate inflation from peeking",
45
+ "Mentions sequential testing as alternative approach"
46
+ ],
47
+ "files": []
48
+ },
49
+ {
50
+ "id": 4,
51
+ "prompt": "Help me set up a multivariate test on our landing page. I want to test the headline, hero image, and CTA button simultaneously.",
52
+ "expected_output": "Should identify this as a Multivariate Test (MVT). Should explain that MVT tests combinations of elements and requires much more traffic than A/B tests. Should calculate or reference traffic needs (combinations multiply: e.g., 2 headlines × 2 images × 2 CTAs = 8 combinations). Should recommend MVT only if traffic supports it, otherwise suggest sequential A/B tests. Should build hypotheses for each element being tested. Should define interaction effects to watch for. Should provide structured test plan.",
53
+ "assertions": [
54
+ "Identifies as multivariate test (MVT)",
55
+ "Explains MVT tests combinations of elements",
56
+ "Addresses dramatically higher traffic requirements",
57
+ "Calculates number of combinations",
58
+ "Suggests sequential A/B tests as alternative if traffic insufficient",
59
+ "Builds hypotheses for each element",
60
+ "Provides structured test plan"
61
+ ],
62
+ "files": []
63
+ },
64
+ {
65
+ "id": 5,
66
+ "prompt": "What metrics should I track for an A/B test on our trial signup page? We're testing a longer form (adds company size and role fields) against the current short form.",
67
+ "expected_output": "Should apply the metrics selection framework with three tiers: primary, secondary, and guardrail metrics. Primary: form completion rate (the direct conversion metric). Secondary: lead quality metrics (SQL conversion rate, activation rate post-signup). Guardrail: overall signup volume (ensure longer form doesn't tank total signups below acceptable threshold). Should explain the tradeoff between conversion quantity and lead quality. Should note that this test needs longer observation window to measure downstream metrics.",
68
+ "assertions": [
69
+ "Applies three-tier metric framework (primary, secondary, guardrail)",
70
+ "Identifies form completion rate as primary metric",
71
+ "Identifies lead quality as secondary metric",
72
+ "Defines guardrail metrics to protect against negative outcomes",
73
+ "Explains quantity vs quality tradeoff",
74
+ "Notes need for longer observation window for downstream metrics"
75
+ ],
76
+ "files": []
77
+ },
78
+ {
79
+ "id": 6,
80
+ "prompt": "Can you help me write copy for our new landing page? We want to test it against the current version.",
81
+ "expected_output": "Should recognize this is primarily a copywriting task, not a test setup task. Should defer to or cross-reference the copywriting skill for writing the actual copy. May help frame the test hypothesis and setup, but should make clear that copywriting is the right skill for creating the page copy itself.",
82
+ "assertions": [
83
+ "Recognizes this as primarily a copywriting task",
84
+ "References or defers to copywriting skill",
85
+ "Does not attempt to write full page copy using test setup patterns",
86
+ "May offer to help with test hypothesis and setup"
87
+ ],
88
+ "files": []
89
+ },
90
+ {
91
+ "id": 7,
92
+ "prompt": "We ran an A/B test on our pricing page for 4 weeks. Control: 2.1% conversion. Variant: 2.4% conversion. 12,000 visitors per variant. Is this statistically significant? Should we ship it?",
93
+ "expected_output": "Should evaluate the results against statistical significance criteria. Should calculate or estimate whether the sample size is sufficient to detect a 0.3 percentage point lift from a 2.1% baseline (this is a ~14% relative lift). Should reference the 95% confidence threshold. Should discuss practical significance vs statistical significance. Should recommend whether to ship, continue testing, or iterate. Should consider segment analysis if results are borderline.",
94
+ "assertions": [
95
+ "Evaluates against statistical significance criteria",
96
+ "Addresses whether sample size is sufficient for this effect size",
97
+ "References 95% confidence threshold",
98
+ "Distinguishes statistical significance from practical significance",
99
+ "Provides clear recommendation on shipping",
100
+ "Suggests segment analysis or follow-up if borderline"
101
+ ],
102
+ "files": []
103
+ }
104
+ ]
105
+ }