opencode-skills-collection 4.0.69 → 4.0.71

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 (187) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +40 -1
  2. package/bundled-skills/api-integration-architect/SKILL.md +241 -0
  3. package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
  4. package/bundled-skills/apify-integration-development/SKILL.md +168 -0
  5. package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
  6. package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
  7. package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
  8. package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
  9. package/bundled-skills/architecture-review/README.md +42 -0
  10. package/bundled-skills/architecture-review/SKILL.md +77 -0
  11. package/bundled-skills/architecture-review/examples.md +11 -0
  12. package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
  13. package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
  14. package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
  15. package/bundled-skills/architecture-review/reference/graph.md +15 -0
  16. package/bundled-skills/architecture-review/reference/mcp.md +14 -0
  17. package/bundled-skills/architecture-review/reference/workflow.md +15 -0
  18. package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
  19. package/bundled-skills/code-review-sensei/SKILL.md +177 -0
  20. package/bundled-skills/codebase-onboarding/README.md +42 -0
  21. package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
  22. package/bundled-skills/codebase-onboarding/examples.md +11 -0
  23. package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
  24. package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
  25. package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
  26. package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
  27. package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
  28. package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
  29. package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
  30. package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
  31. package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
  32. package/bundled-skills/dependency-analysis/README.md +42 -0
  33. package/bundled-skills/dependency-analysis/SKILL.md +76 -0
  34. package/bundled-skills/dependency-analysis/examples.md +11 -0
  35. package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
  36. package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
  37. package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
  38. package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
  39. package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
  40. package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
  41. package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
  42. package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
  43. package/bundled-skills/eas-app-stores/SKILL.md +197 -0
  44. package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
  45. package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
  46. package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
  47. package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
  48. package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
  49. package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
  50. package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
  51. package/bundled-skills/eas-hosting/SKILL.md +448 -0
  52. package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
  53. package/bundled-skills/eas-observe/SKILL.md +75 -0
  54. package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
  55. package/bundled-skills/eas-observe/references/metrics.md +98 -0
  56. package/bundled-skills/eas-observe/references/queries.md +403 -0
  57. package/bundled-skills/eas-observe/references/setup.md +476 -0
  58. package/bundled-skills/eas-observe/references/third-party.md +136 -0
  59. package/bundled-skills/eas-simulator/SKILL.md +251 -0
  60. package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
  61. package/bundled-skills/eas-simulator/references/controllers.md +135 -0
  62. package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
  63. package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
  64. package/bundled-skills/eas-workflows/SKILL.md +119 -0
  65. package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
  66. package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
  67. package/bundled-skills/expo-animation/LICENSE +21 -0
  68. package/bundled-skills/expo-animation/RECIPES.md +385 -0
  69. package/bundled-skills/expo-animation/SKILL.md +295 -0
  70. package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
  71. package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
  72. package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
  73. package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
  74. package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
  75. package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
  76. package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1834 -0
  77. package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +378 -0
  78. package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
  79. package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
  80. package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
  81. package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
  82. package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
  83. package/bundled-skills/gpt-taste/SKILL.md +8 -1
  84. package/bundled-skills/hf-cli/SKILL.md +263 -0
  85. package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
  86. package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
  87. package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
  88. package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
  89. package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
  90. package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
  91. package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
  92. package/bundled-skills/jev-social/SKILL.md +184 -0
  93. package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
  94. package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
  95. package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
  96. package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
  97. package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
  98. package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
  99. package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
  100. package/bundled-skills/longbridge-quant/SKILL.md +151 -0
  101. package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
  102. package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
  103. package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
  104. package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
  105. package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
  106. package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
  107. package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
  108. package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
  109. package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
  110. package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
  111. package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
  112. package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
  113. package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
  114. package/bundled-skills/longbridge-research/SKILL.md +187 -0
  115. package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
  116. package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
  117. package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
  118. package/bundled-skills/longbridge-research/references/consensus.md +92 -0
  119. package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
  120. package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
  121. package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
  122. package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
  123. package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
  124. package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
  125. package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
  126. package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
  127. package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
  128. package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
  129. package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
  130. package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
  131. package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
  132. package/bundled-skills/longbridge-research/references/investors.md +87 -0
  133. package/bundled-skills/longbridge-research/references/onchain.md +70 -0
  134. package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
  135. package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
  136. package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
  137. package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
  138. package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
  139. package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
  140. package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
  141. package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
  142. package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
  143. package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
  144. package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
  145. package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
  146. package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
  147. package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
  148. package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
  149. package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
  150. package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
  151. package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
  152. package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
  153. package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
  154. package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
  155. package/bundled-skills/marketing-mindset/SKILL.md +98 -0
  156. package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
  157. package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
  158. package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
  159. package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
  160. package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
  161. package/bundled-skills/remotion-captions/SKILL.md +57 -0
  162. package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
  163. package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
  164. package/bundled-skills/remotion-captions/display-captions.md +190 -0
  165. package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
  166. package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
  167. package/bundled-skills/remotion-create/SKILL.md +106 -0
  168. package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
  169. package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
  170. package/bundled-skills/remotion-create/tailwind.md +11 -0
  171. package/bundled-skills/remotion-create/video-layout.md +9 -0
  172. package/bundled-skills/remotion-docs/SKILL.md +67 -0
  173. package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
  174. package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
  175. package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
  176. package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
  177. package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
  178. package/bundled-skills/remotion-render/SKILL.md +48 -0
  179. package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
  180. package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
  181. package/bundled-skills/remotion-render/transparent-videos.md +106 -0
  182. package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
  183. package/bundled-skills/score-eval/SKILL.md +35 -0
  184. package/bundled-skills/ui-ux-pro-max/scripts/design_system.py +2 -1
  185. package/bundled-skills/writing-guidelines/SKILL.md +60 -0
  186. package/package.json +1 -1
  187. package/skills_index.json +1013 -3
@@ -0,0 +1,547 @@
1
+ # Makepad 2.0 Widget Catalog
2
+
3
+ Complete reference for all built-in widgets in Makepad 2.0. All widgets are defined using `script_mod!` blocks and used in Splash DSL syntax.
4
+
5
+ ---
6
+
7
+ ## View Containers
8
+
9
+ All View variants inherit from `ViewBase`. Views are the fundamental layout containers.
10
+
11
+ ### Base View
12
+
13
+ | Widget | Background | Shape | Notes |
14
+ |--------|-----------|-------|-------|
15
+ | `View` | none | - | Invisible layout container. Setting `show_bg: true` shows an ugly green default; use SolidView instead for colored backgrounds |
16
+ | `SolidView` | flat color | rectangle | Basic colored rectangle |
17
+ | `RoundedView` | color | rounded rect | `draw_bg.border_radius` (uniform float, default 2.5) |
18
+ | `RoundedAllView` | color | per-corner radius | `draw_bg.border_radius` is `vec4` (top-left, top-right, bottom-right, bottom-left) |
19
+ | `RoundedXView` | color | left/right radius | `draw_bg.border_radius` is `vec2` (left radius, right radius) |
20
+ | `RoundedYView` | color | top/bottom radius | `draw_bg.border_radius` is `vec2` (top radius, bottom radius) |
21
+ | `RectView` | color | rectangle with border | Supports border_size, border_color, border_inset, gradient |
22
+ | `RectShadowView` | color + shadow | rectangle | clip_x/clip_y default false for shadow overflow |
23
+ | `RoundedShadowView` | color + shadow | rounded rect | clip_x/clip_y default false for shadow overflow |
24
+ | `CircleView` | color | circle | `draw_bg.border_radius` overrides auto-calculated radius |
25
+ | `HexagonView` | color | hexagon | `draw_bg.border_radius.x` sets explicit radius (vec2) |
26
+ | `GradientXView` | horizontal gradient | rectangle | Set `draw_bg.color` and `draw_bg.color_2` |
27
+ | `GradientYView` | vertical gradient | rectangle | Set `draw_bg.color` and `draw_bg.color_2` |
28
+ | `CachedView` | texture-cached | rectangle | `texture_caching: true`; renders children to texture |
29
+ | `CachedRoundedView` | texture-cached | rounded rect | Texture-cached with rounded corners and optional border |
30
+
31
+ ### Scrollable Views
32
+
33
+ | Widget | Scrolls | Notes |
34
+ |--------|---------|-------|
35
+ | `ScrollXYView` | both axes | Horizontal and vertical scroll bars |
36
+ | `ScrollXView` | horizontal only | Horizontal scroll bar only |
37
+ | `ScrollYView` | vertical only | Vertical scroll bar only |
38
+
39
+ ### View Properties (from ViewBase struct)
40
+
41
+ **Layout properties** (set directly on widget):
42
+ - `width`, `height` - Size values: `Fill`, `Fit`, fixed pixels (e.g., `100`), or `100.0`
43
+ - `flow` - Layout direction: `Down`, `Right`, `Overlay`, `Right {wrap: true}`
44
+ - `spacing` - Gap between children (pixels)
45
+ - `padding` - Inner padding: single value or `Inset{left: 0. right: 0. top: 0. bottom: 0.}`
46
+ - `margin` - Outer margin: same format as padding
47
+ - `align` - Child alignment: `Center`, `TopLeft`, `Align{x: 0.5 y: 0.5}`
48
+ - `clip_x`, `clip_y` - Clip overflow (default depends on widget)
49
+
50
+ **Display properties:**
51
+ - `show_bg` - Whether to draw the background (default `false` for View)
52
+ - `visible` - Widget visibility (default `true`)
53
+ - `new_batch` - Force new GPU draw batch (CRITICAL for text-over-background)
54
+ - `cursor` - Mouse cursor: `MouseCursor.Hand`, `MouseCursor.Default`, etc.
55
+ - `grab_key_focus` - Whether view captures keyboard focus (default `true`)
56
+ - `capture_overload` - Capture pointer events even when scrolling
57
+
58
+ **draw_bg properties (for views with show_bg: true):**
59
+ - `color` - Primary fill color (instance)
60
+ - `color_2` - Secondary color for gradients (instance, default `vec4(-1)` = disabled)
61
+ - `border_size` - Border thickness (uniform)
62
+ - `border_radius` - Corner rounding (type varies by widget)
63
+ - `border_color` - Border color (instance)
64
+ - `border_color_2` - Secondary border gradient color (instance)
65
+ - `border_inset` - Border inset (uniform vec4)
66
+ - `shadow_color` - Shadow color (instance, shadow views only)
67
+ - `shadow_radius` - Shadow blur radius (uniform, shadow views only)
68
+ - `shadow_offset` - Shadow offset (uniform vec2, shadow views only)
69
+ - `color_dither` - Dithering amount (uniform, default 1.0)
70
+ - `gradient_fill_horizontal` - Fill gradient direction: 0.0 = vertical, 1.0 = horizontal (uniform)
71
+ - `gradient_border_horizontal` - Border gradient direction (uniform)
72
+
73
+ ---
74
+
75
+ ## Text Widgets
76
+
77
+ ### Labels and Headings
78
+
79
+ | Widget | Style | Notes |
80
+ |--------|-------|-------|
81
+ | `Label` | Regular text | Default: `width: Fit, height: Fit`. Does NOT support animator or cursor! |
82
+ | `Labelbold` | Bold text | Bold font variant of Label |
83
+ | `LabelGradientX` | Horizontal gradient text | Set `draw_text.color` and `draw_text.color_2` |
84
+ | `LabelGradientY` | Vertical gradient text | Set `draw_text.color` and `draw_text.color_2` |
85
+ | `TextBox` | Paragraph text | `width: Fill`, uses `theme.font_size_p` |
86
+ | `P` | Paragraph | Same as TextBox |
87
+ | `Pbold` | Bold paragraph | Bold font variant |
88
+ | `Pitalic` | Italic paragraph | Italic font variant |
89
+ | `Pbolditalic` | Bold italic paragraph | Combined bold italic |
90
+ | `H1` | Heading 1 | `width: Fill`, `theme.font_size_1`, bold, `theme.color_text_hl` |
91
+ | `H1italic` | Heading 1 italic | Bold italic variant |
92
+ | `H2` | Heading 2 | `theme.font_size_2`, bold |
93
+ | `H2italic` | Heading 2 italic | Bold italic variant |
94
+ | `H3` | Heading 3 | `theme.font_size_3`, bold |
95
+ | `H3italic` | Heading 3 italic | Bold italic variant |
96
+ | `H4` | Heading 4 | `theme.font_size_4`, bold |
97
+ | `H4italic` | Heading 4 italic | Bold italic variant |
98
+ | `IconSet` | Icon font | Uses `theme.font_icons`, font_size 100 |
99
+
100
+ **CRITICAL:** Default text color is WHITE (`theme.color_label_outer`). You MUST set `draw_text.color` explicitly on light backgrounds, or text will be invisible.
101
+
102
+ **draw_text properties:**
103
+ - `color` - Text color (default: `theme.color_label_outer`, which is white/light)
104
+ - `color_2` - Secondary text color for gradient (default disabled)
105
+ - `text_style` - Font style: `theme.font_regular{font_size: 11}`, `theme.font_bold{...}`, `theme.font_italic{...}`, `theme.font_bold_italic{...}`
106
+ - `color_dither` - Dithering amount (uniform)
107
+ - `gradient_fill_horizontal` - Gradient direction (0.0 = vertical, 1.0 = horizontal)
108
+
109
+ ### Editable Text
110
+
111
+ | Widget | Notes |
112
+ |--------|-------|
113
+ | `TextInput` | Full-featured text input (themed with border and bevels) |
114
+ | `TextInputFlat` | Flat styled text input (base style) |
115
+
116
+ **TextInput properties:**
117
+ - `text` - The text content (String)
118
+ - `is_password` - Mask text as password (bool)
119
+ - `is_read_only` - Prevent editing (bool)
120
+ - `is_numeric_only` - Only allow numbers (bool)
121
+ - `empty_text` - Placeholder text when empty (String)
122
+ - `input_mode` - Keyboard input mode
123
+ - `autocapitalize` - Auto-capitalize behavior
124
+ - `autocorrect` - Auto-correct behavior
125
+ - `return_key_type` - Return key type
126
+
127
+ **TextInput draw_bg instances:** `hover`, `down`, `focus`, `disabled`, `empty`
128
+
129
+ ### Rich Text and Links
130
+
131
+ | Widget | Notes |
132
+ |--------|-------|
133
+ | `LinkLabel` | Clickable text link with hover/press states |
134
+ | `TextFlow` | Rich text container for mixed content (base for Markdown/Html) |
135
+ | `Markdown` | Markdown rendering (feature-gated with `pulldown-cmark`; set `body` property) |
136
+ | `Html` | HTML rendering (feature-gated; set `body` property) |
137
+
138
+ ---
139
+
140
+ ## Button Widgets
141
+
142
+ | Widget | Style | Notes |
143
+ |--------|-------|-------|
144
+ | `Button` | Standard themed button | Beveled with gradient |
145
+ | `ButtonFlat` | Flat button | Base button style, rounded corners |
146
+ | `ButtonFlatter` | Minimal button | Invisible/minimal background |
147
+ | `ButtonGradientX` | Horizontal gradient button | Gradient fill |
148
+ | `ButtonGradientY` | Vertical gradient button | Gradient fill |
149
+ | `ButtonIcon` | Button with icon | Icon + text |
150
+ | `ButtonFlatIcon` | Flat button with icon | |
151
+ | `ButtonFlatterIcon` | Minimal button with icon | |
152
+ | `ButtonGradientXIcon` | Gradient X with icon | |
153
+ | `ButtonGradientYIcon` | Gradient Y with icon | |
154
+
155
+ **Button properties:**
156
+ - `text` - Button label text (String)
157
+ - `draw_bg` - Background drawing
158
+ - `draw_text` - Text drawing
159
+ - `draw_icon` - SVG icon drawing
160
+ - `icon_walk` - Walk for icon sizing (default `Walk{width: 22.0, height: Fit}`)
161
+ - `label_walk` - Walk for label sizing
162
+ - `animator` - Animation states
163
+
164
+ **Button draw_bg instance variables:** `hover`, `down`, `focus`, `disabled`
165
+
166
+ **Color uniforms (draw_bg):**
167
+ - `color`, `color_hover`, `color_down`, `color_focus`, `color_disabled`
168
+ - `color_2`, `color_2_hover`, `color_2_down`, `color_2_focus`, `color_2_disabled`
169
+ - `border_color`, `border_color_hover`, `border_color_down`, `border_color_focus`, `border_color_disabled`
170
+ - `border_color_2`, `border_color_2_hover`, `border_color_2_down`, `border_color_2_focus`, `border_color_2_disabled`
171
+ - `border_size`, `border_radius`
172
+
173
+ **Button draw_text color variants:**
174
+ - `color`, `color_hover`, `color_down`, `color_focus`, `color_disabled`
175
+
176
+ ---
177
+
178
+ ## Toggle Widgets (CheckBox, Toggle, RadioButton)
179
+
180
+ ### CheckBox Variants
181
+
182
+ | Widget | Style | Notes |
183
+ |--------|-------|-------|
184
+ | `CheckBox` | Themed check box | Beveled, themed colors |
185
+ | `CheckBoxFlat` | Flat check box | Base style |
186
+ | `CheckBoxCustom` | Custom check box | For custom styling |
187
+
188
+ ### Toggle Variants
189
+
190
+ | Widget | Style | Notes |
191
+ |--------|-------|-------|
192
+ | `Toggle` | Themed toggle switch | Pill-shaped switch |
193
+ | `ToggleFlat` | Flat toggle switch | Base style |
194
+
195
+ ### RadioButton Variants
196
+
197
+ | Widget | Style | Notes |
198
+ |--------|-------|-------|
199
+ | `RadioButton` | Themed radio | Circular indicator |
200
+ | `RadioButtonFlat` | Flat radio | Base style |
201
+ | `RadioButtonFlatter` | Minimal radio | |
202
+ | `RadioButtonTabFlat` | Tab-style radio | Tab-like appearance |
203
+ | `RadioButtonTab` | Themed tab radio | |
204
+
205
+ **Toggle/CheckBox/RadioButton properties:**
206
+ - `text` - Label text
207
+ - `active` - Current on/off state (not directly settable; controlled by animator)
208
+ - `draw_bg` - Background drawing
209
+ - `draw_text` - Label text drawing
210
+ - `label_walk` - Label sizing
211
+ - `animator` - Animation states
212
+
213
+ **draw_bg instance variables:** `hover`, `down`, `focus`, `active`, `disabled`
214
+
215
+ **CheckBox-specific draw_bg uniforms:**
216
+ - `size` - Check box size in pixels (default 15.0)
217
+ - `mark_size` - Check mark scale (default 0.65)
218
+ - `mark_color`, `mark_color_hover`, `mark_color_down`, `mark_color_active`, `mark_color_active_hover`, `mark_color_focus`, `mark_color_disabled`
219
+ - Standard `color`, `border_color` variants (with `_hover`, `_down`, `_active`, `_focus`, `_disabled` suffixes)
220
+
221
+ ---
222
+
223
+ ## Input Widgets
224
+
225
+ ### Slider Variants
226
+
227
+ | Widget | Style | Notes |
228
+ |--------|-------|-------|
229
+ | `Slider` | Themed slider | Full-featured with bevels |
230
+ | `SliderFlat` | Flat slider | Base flat style |
231
+ | `SliderMinimal` | Minimal slider | Simplest style |
232
+ | `SliderMinimalFlat` | Minimal flat slider | |
233
+ | `SliderGradientX` | Gradient X slider | Horizontal gradient fill |
234
+ | `SliderGradientY` | Gradient Y slider | Vertical gradient fill |
235
+ | `SliderRound` | Round handle slider | Circular handle |
236
+ | `SliderRoundFlat` | Round flat slider | |
237
+ | `SliderRoundGradientX` | Round gradient X | |
238
+ | `SliderRoundGradientY` | Round gradient Y | |
239
+ | `Rotary` | Rotary knob | Circular dial control |
240
+ | `RotaryFlat` | Flat rotary knob | |
241
+ | `RotaryGradientY` | Gradient rotary knob | |
242
+
243
+ **Slider properties:**
244
+ - `min` - Minimum value (f64, default 0.0)
245
+ - `max` - Maximum value (f64, default 1.0)
246
+ - `step` - Step increment (f64, default 0.0 = continuous)
247
+ - `default` - Default/initial value (f64)
248
+ - `precision` - Decimal places to display (usize, default 2)
249
+ - `axis` - Drag direction: `DragAxis.Horizontal` (default) or `DragAxis.Vertical`
250
+ - `text` - Label text
251
+ - `bind` - Data binding path (String)
252
+ - `draw_bg`, `draw_text`, `label_walk`, `label_align`
253
+
254
+ **Slider draw_bg instance variables:** `hover`, `focus`, `drag`, `disabled`
255
+
256
+ **Slider-specific draw_bg uniforms:**
257
+ - `val_color`, `val_color_hover`, `val_color_focus`, `val_color_drag`, `val_color_disabled`
258
+ - `handle_color`, `handle_color_hover`, `handle_color_focus`, `handle_color_drag`, `handle_color_disabled`
259
+ - `handle_size`, `offset_y`
260
+ - Standard `color`, `border_color` variants with state suffixes
261
+
262
+ ### DropDown Variants
263
+
264
+ | Widget | Style | Notes |
265
+ |--------|-------|-------|
266
+ | `DropDown` | Themed dropdown | Full-featured with bevels |
267
+ | `DropDownFlat` | Flat dropdown | Base flat style |
268
+ | `DropDownGradientX` | Gradient X dropdown | |
269
+ | `DropDownGradientY` | Gradient Y dropdown | |
270
+
271
+ **DropDown properties:**
272
+ - `labels` - Array of string options (Vec<String>)
273
+ - `selected_item` - Currently selected index (usize)
274
+ - `bind` - Data binding path
275
+ - `bind_enum` - Enum data binding
276
+ - `popup_menu` - Popup menu configuration
277
+ - `draw_bg`, `draw_text`
278
+
279
+ **DropDown draw_bg instances:** `hover`, `focus`, `down`, `active`, `disabled`
280
+
281
+ ---
282
+
283
+ ## Media Widgets
284
+
285
+ | Widget | Notes |
286
+ |--------|-------|
287
+ | `Image` | Static/animated image. Default: `width: 100, height: 100` |
288
+ | `Video` | Video playback. Default: `width: 100, height: 100` |
289
+ | `Svg` | Renders external `.svg` files with optional animation and custom GPU shaders |
290
+ | `Icon` | SVG icon rendering |
291
+ | `IconGradientX` | Gradient X icon |
292
+ | `IconGradientY` | Gradient Y icon |
293
+ | `IconRotated` | Rotatable icon (draw_icon.rotation_angle) |
294
+ | `LoadingSpinner` | Animated circular loading indicator |
295
+ | `MathView` | LaTeX math rendering (requires `makepad_latex_math` crate) |
296
+ | `MapView` | Geographic map rendering (vector tile-based) |
297
+
298
+ ### Image Properties
299
+ - `fit` - How image fits container: `ImageFit.Stretch` (default), `ImageFit.Horizontal`, `ImageFit.Vertical`, `ImageFit.Smallest`, `ImageFit.Biggest`, `ImageFit.Size`
300
+ - `width_scale` - Scale factor for width (f64, default 1.0)
301
+ - `src` - Image source: `http_resource("url")` or `crate_resource("self:path")`
302
+ - `animation` - Animation mode: `ImageAnimation.Loop` (default), `.Stop`, `.Once`, `.Bounce`, `.Frame(f64)`, `.Factor(f64)`, `.OnceFps(f64)`, `.LoopFps(f64)`, `.BounceFps(f64)`
303
+ - `draw_bg.opacity` - Image opacity (0.0 to 1.0)
304
+ - `draw_bg.image_scale` - Scale vec2
305
+ - `draw_bg.image_pan` - Pan offset vec2
306
+
307
+ ### Svg Widget Properties
308
+
309
+ The `Svg{}` widget loads and renders external `.svg` files. It supports SVG gradients, filters, `<animate>` elements, and custom GPU shader effects.
310
+
311
+ **Properties:**
312
+ - `draw_svg` - The DrawSvg shader instance (inherits from DrawVector)
313
+ - `draw_svg.svg` - SVG resource: `crate_resource("self:path/to/file.svg")` or `http_resource("https://url/file.svg")`
314
+ - `draw_svg.color` - Tint color override. Default `vec4(-1,-1,-1,-1)` = use original SVG colors.
315
+ - `draw_svg.svg_scale` - GPU-side scale uniform `vec2` (default `1.0, 1.0`)
316
+ - `draw_svg.svg_offset` - GPU-side offset uniform `vec2` (default `0.0, 0.0`)
317
+ - `draw_svg.svg_time` - Animation time uniform (float, auto-updated when `animating: true`)
318
+ - `animating` - Enable per-frame time updates for SVG `<animate>` elements and custom shader effects (default `true`)
319
+ - `width`, `height` - Widget size (default `Fit`)
320
+
321
+ **Basic usage:**
322
+ ```
323
+ Svg{
324
+ width: 300 height: 300
325
+ draw_svg +: { svg: crate_resource("self:resources/my_icon.svg") }
326
+ }
327
+ ```
328
+
329
+ **Load from URL:**
330
+ ```
331
+ Svg{
332
+ width: 300 height: 100
333
+ draw_svg +: { svg: http_resource("https://example.com/logo.svg") }
334
+ }
335
+ ```
336
+
337
+ **With custom GPU shader effect:**
338
+ ```
339
+ Svg{
340
+ width: 600 height: 450
341
+ animating: true
342
+ draw_svg +: {
343
+ svg: crate_resource("self:resources/scene.svg")
344
+ get_color: fn() {
345
+ let base = self.eval_gradient();
346
+ let id = self.v_shape_id;
347
+ let t = self.svg_time;
348
+ if id < 0.5 { return base }
349
+ return mix(base, vec4(1.0, 0.0, 0.0, 1.0), sin(t) * 0.5 + 0.5);
350
+ }
351
+ }
352
+ }
353
+ ```
354
+
355
+ **Static SVG (no animation):**
356
+ ```
357
+ Svg{
358
+ width: 32 height: 32
359
+ animating: false
360
+ draw_svg +: { svg: crate_resource("self:resources/icons/icon_file.svg") }
361
+ }
362
+ ```
363
+
364
+ **IMPORTANT:** Use `draw_svg +:` (merge operator) to set svg and shader properties.
365
+
366
+ ### Icon Properties
367
+ - `draw_icon.svg` - SVG resource: `crate_resource("self:resources/icons/name.svg")`
368
+ - `draw_icon.color` - Icon tint color
369
+ - `icon_walk` - Walk for icon sizing (default `Walk{width: 17.5, height: Fit}`)
370
+ - `draw_bg.color` - Background color (instance)
371
+
372
+ ### MathView Properties
373
+ - `text` - LaTeX math expression (String)
374
+ - `font_size` - Font size (f64, default 11.0)
375
+ - `color` - Text color (default `#fff`)
376
+ - `baseline_offset` - Vertical baseline adjustment (default -2.0)
377
+
378
+ ### MapView Properties
379
+ - `center_lon` - Center longitude (f64, default 4.9041)
380
+ - `center_lat` - Center latitude (f64, default 52.3676)
381
+ - `zoom` - Zoom level (f64, default 14.0)
382
+ - `min_zoom` - Minimum zoom (f64, default 11.0)
383
+ - `max_zoom` - Maximum zoom (f64, default 17.0)
384
+ - `dark_theme` - Use dark map style (bool, default false)
385
+ - `use_network` - Enable network tile fetching (bool, default false)
386
+ - `use_local_mbtiles` - Use local mbtiles file (bool, default true)
387
+
388
+ **CRITICAL MapView rules:**
389
+ - MUST use fixed pixel height (e.g., `height: 400`). Never use `Fit` or `Fill` for height.
390
+ - MUST wrap in a container with `new_batch: true`.
391
+
392
+ ---
393
+
394
+ ## Layout Widgets
395
+
396
+ | Widget | Notes |
397
+ |--------|-------|
398
+ | `Hr` | Horizontal divider/rule. `width: Fill`, themed bevel line |
399
+ | `Vr` | Vertical divider/rule. `height: Fill`, themed bevel line |
400
+ | `Filler` | Empty spacer. `width: Fill, height: Fill` |
401
+ | `Splitter` | Resizable split pane with drag handle |
402
+ | `FoldHeader` | Collapsible section with header and body |
403
+ | `ScrollBar` | Scroll bar component (used internally by ScrollViews) |
404
+
405
+ ### Splitter Properties
406
+ - `axis` - Split direction: `SplitterAxis.Horizontal` (default) or `SplitterAxis.Vertical`
407
+ - `align` - Split position:
408
+ - `SplitterAlign.FromA(pixels)` - Fixed distance from start
409
+ - `SplitterAlign.FromB(pixels)` - Fixed distance from end
410
+ - `SplitterAlign.Weighted(ratio)` - Proportional (default 0.5)
411
+ - `a :=` / `b :=` - Named child slots for the two panes
412
+ - `size` - Splitter bar thickness (default 6.0)
413
+ - `min_horizontal`, `max_horizontal` - Horizontal drag limits (default 50.0)
414
+ - `min_vertical`, `max_vertical` - Vertical drag limits (default 50.0)
415
+
416
+ ### FoldHeader Properties
417
+ - `header :=` / `body :=` - Named child slots
418
+ - `body_walk` - Walk for body (default: `Walk{width: Fill, height: Fit}`)
419
+ - `animator.active` - Controls open/close state (@on = open, @off = closed)
420
+ - `opened` - Animation value (0.0 = closed, 1.0 = open)
421
+
422
+ ### ScrollBar Properties
423
+ - `bar_size` - Scroll bar width in pixels (default 10.0)
424
+ - `bar_side_margin` - Margin from edge (default 3.0)
425
+ - `min_handle_size` - Minimum handle size (default 30.0)
426
+
427
+ ---
428
+
429
+ ## List Widgets
430
+
431
+ | Widget | Notes |
432
+ |--------|-------|
433
+ | `PortalList` | Virtualized scrolling list (only renders visible items) |
434
+ | `FlatList` | Non-virtualized list (renders all items) |
435
+
436
+ ### PortalList Properties
437
+ - `flow` - Default `Down` (vertical list)
438
+ - `scroll_bar` - Scroll bar configuration: `ScrollBar{}`
439
+ - `capture_overload` - Default `true`
440
+ - Templates defined with `:=` syntax are stored in templates HashMap
441
+ - Driven programmatically from Rust via `draw_walk()` loop
442
+
443
+ ### FlatList Properties
444
+ - Similar to PortalList but renders all children
445
+ - Suitable for small, fixed-size lists
446
+
447
+ ---
448
+
449
+ ## Dock System
450
+
451
+ | Widget | Notes |
452
+ |--------|-------|
453
+ | `Dock` | Full-featured tabbed dock layout (themed with round corners) |
454
+ | `DockFlat` | Flat-styled dock layout |
455
+
456
+ ### Dock Sub-Types (DSL only)
457
+
458
+ | Type | Notes |
459
+ |------|-------|
460
+ | `DockSplitter` | Splits dock into two regions. Properties: `axis`, `align`, `a`, `b` |
461
+ | `DockTabs` | Tab container. Properties: `tabs` (array of DockTab), `selected`, `closable` |
462
+ | `DockTab` | Individual tab. Properties: `name`, `template`, `kind` |
463
+
464
+ ### Dock Properties
465
+ - `tab_bar` - Tab bar style (e.g., `TabBarGradientY{}`, `TabBarFlat{}`)
466
+ - `splitter` - Splitter style (e.g., `Splitter{}`)
467
+ - `root :=` - Root dock layout node (DockSplitter or DockTabs)
468
+ - Content templates defined with `:=` syntax
469
+
470
+ ---
471
+
472
+ ## Navigation Widgets
473
+
474
+ | Widget | Notes |
475
+ |--------|-------|
476
+ | `Modal` | Overlay dialog with dimmed background. Uses `content +:` for dialog content |
477
+ | `Tooltip` | Hover tooltip with positioned content |
478
+ | `PopupNotification` | Toast-style notification overlay (top-right aligned) |
479
+ | `SlidePanel` | Animated side panel with slide-in/out |
480
+ | `ExpandablePanel` | Draggable panel overlay with touch gesture |
481
+ | `PageFlip` | Page switching container (only one page visible at a time) |
482
+ | `StackNavigation` | iOS-style stack-based navigation with back button |
483
+
484
+ ### Modal Properties
485
+ - `content :=` - Dialog content container (View, default: `width: Fit, height: Fit, flow: Down`)
486
+ - `bg_view :=` - Background overlay (default: semi-transparent black `#000000B3`)
487
+ - `flow: Overlay` (default)
488
+ - Emits `ModalAction::Dismissed` on background click
489
+
490
+ ### SlidePanel Properties
491
+ - `side` - Slide direction: `SlideSide.Left` (default), `SlideSide.Right`, `SlideSide.Top`
492
+ - `active` - Animation position (0.0 = visible, 1.0 = hidden)
493
+ - `animator.active` - @on = slide in, @off = slide out
494
+
495
+ ### PageFlip Properties
496
+ - `active_page` - Currently visible page (LiveId)
497
+ - `lazy_init` - Whether to lazily initialize pages (default false)
498
+ - Pages defined as templates with `:=` syntax
499
+
500
+ ### StackNavigation
501
+ - Contains `StackNavigationView` children
502
+ - `StackViewHeader` - Pre-built header with back button and title
503
+ - `StackNavigationView` - Individual stack page (default: `visible: false`)
504
+
505
+ ---
506
+
507
+ ## Special Widgets
508
+
509
+ | Widget | Notes |
510
+ |--------|-------|
511
+ | `FileTree` | File hierarchy tree (programmatically driven from Rust) |
512
+ | `CachedWidget` | Cached rendering wrapper |
513
+ | `Vector` | SVG-like vector graphics drawing |
514
+ | `Window` | Application window container |
515
+ | `Root` | Root widget container |
516
+
517
+ ---
518
+
519
+ ## Draw Batching (new_batch)
520
+
521
+ Widgets using the same shader are batched into a single GPU draw call. This causes problems when text needs to appear on top of a background:
522
+
523
+ **Problem:** Text drawn in the same batch as a background quad will be rendered behind it, making text invisible.
524
+
525
+ **Solution:** Set `new_batch: true` on any View with `show_bg: true` that contains text children.
526
+
527
+ ```
528
+ my_card := RoundedView{
529
+ new_batch: true // CRITICAL: forces new draw batch
530
+ show_bg: true
531
+ draw_bg.color: #333
532
+
533
+ label := Label{
534
+ text: "This text is now visible"
535
+ }
536
+ }
537
+ ```
538
+
539
+ **When new_batch is required:**
540
+ - Any View with `show_bg: true` that contains Label, H1-H4, TextBox, P, or other text widgets
541
+ - Views with hover effects (draw_bg instance variables that change) containing text
542
+ - MapView containers (MUST have new_batch on parent)
543
+
544
+ **When new_batch is NOT needed:**
545
+ - View without show_bg (invisible layout containers)
546
+ - Views that only contain other Views (no direct text children)
547
+ - The innermost text widgets themselves
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: marketing-mindset
3
+ description: "Use when a user asks how to win first customers, whether doing X will produce Y, how to write an ad or judge a marketing test — a marketer's decision framework, not a tactic library."
4
+ category: marketing
5
+ risk: safe
6
+ source: https://github.com/axelfreeman/marketing-mindset
7
+ source_repo: axelfreeman/marketing-mindset
8
+ source_type: community
9
+ date_added: 2026-09-21
10
+ author: axelfreeman
11
+ tags: [marketing, growth, positioning, cold-email, decision-making]
12
+ tools: [claude-code, cursor, codex-cli, gemini-cli]
13
+ license: MIT
14
+ license_source: https://github.com/axelfreeman/marketing-mindset/blob/master/LICENSE
15
+ ---
16
+
17
+ # Marketing Mindset
18
+
19
+ ## Overview
20
+
21
+ Most agents answer a marketing question by reaching for a tactic: a hook template, a funnel diagram, a list of channels. That produces plausible text and no decision. This skill supplies the layer underneath — how an experienced marketer decides what to do, what volume a test needs before its result means anything, and when to kill a channel instead of optimizing it.
22
+
23
+ It is a pure reasoning skill. It reads the user's own context (product, offer, audience, budget, channel data) and returns a verdict with the reasoning attached, including the verdict "this is not worth doing". The full version lives at the source repository; this entry is adapted for this catalog.
24
+
25
+ ## When to Use
26
+
27
+ - The user asks where their first customers will come from, or how to get client #1
28
+ - The user asks "should I do X to get Y" and wants an opinion rather than a yes
29
+ - The user wants an ad, landing page, or cold outreach sequence written for a real offer
30
+ - The user shares test results and asks whether they are good
31
+ - The user is choosing between channels, or deciding whether to kill one
32
+ - The user asks how to position or launch a B2B or SaaS product
33
+ - Do not use for generating a tactic inventory with no decision attached, and do not use it to produce fabricated proof, testimonials, or case studies
34
+
35
+ ## How It Works
36
+
37
+ ### Step 1: Establish the exchange
38
+
39
+ Marketing is an exchange. Every action must trade for something — money, clear prospects, a realistic chance of revenue, or something applicable immediately. If the exchange is zero, say so and name the missing half. This is the filter that kills most requests before any tactic is chosen.
40
+
41
+ ### Step 2: Read the state of the business
42
+
43
+ Ask for the two numbers that decide everything else: how many paying clients exist today, and what channel produced them. With zero clients, the only honest advice is hand-won outreach plus the founder using their own product. Money is a scaling instrument, not a starting instrument — spend at zero clients buys noise.
44
+
45
+ ### Step 3: Ground the hypothesis in live competitors
46
+
47
+ Benchmark against companies working the same audience right now and making money from it, not against well-known companies with no current motion. Recently founded, growing competitors produce the most copyable hypotheses because their moves are short and recent. Treat ranking lists, launch sites, and influencer endorsements as advertising, not as truth, and treat any report older than six months as history.
48
+
49
+ ### Step 4: Size the test before judging it
50
+
51
+ Below a floor you are measuring randomness, not the market. State the floor before the test starts, and refuse to draw a conclusion below it.
52
+
53
+ | Channel | Minimum volume before a verdict |
54
+ |---|---|
55
+ | Cold email, deliverability smoke test | 50–100 sends |
56
+ | Cold email, reply-rate comparison | ~1,500–2,000 sends per variant |
57
+ | Subject-line test | 100–500 sends per version |
58
+ | Landing page smoke test | 100–200 targeted visitors |
59
+ | Paid ad | 1–3x target CPA over 48–72 hours |
60
+ | Strict A/B test | ~10,000 visitors and 300+ conversions per variation |
61
+
62
+ ### Step 5: Apply a kill rule, not a feeling
63
+
64
+ Decide in advance what result means keep, what means re-hook, and what means stop — and hold the decision at the pre-declared volume. Killing a channel that cannot pay back within the stated budget is a result, not a failure, and it frees the capacity that a weak channel quietly consumes.
65
+
66
+ ### Step 6: Write for attention, then for proof
67
+
68
+ Attention splits in two: a rational part that can be reached with numbers and a part that responds only to feeling. Both need to be addressed. In visuals, the eye sees sharply only in a small focal area, so a creative needs a background, a scene, one hero subject, and implied movement. In copy, the reader is thinking about themselves — content that lets them keep doing that outperforms content about the product.
69
+
70
+ ### Step 7: Return a verdict
71
+
72
+ End with a decision: run it, change one variable and rerun at the stated volume, or stop and do something else. Attach the reasoning and the number that settles the question. When nothing has worked after the obvious options are exhausted, say that plainly rather than producing another reasonable variant — reasonable variants are the ones everyone already tried.
73
+
74
+ ## Examples
75
+
76
+ ### Example 1: "Our cold email gets 0.4% reply rate — how do we optimize it?"
77
+
78
+ The response does not start with subject lines. It asks how many emails were sent. At 300 sends, 0.4% is one reply; the correct answer is to keep sending to the pre-declared floor before changing anything. At 4,000 sends across two variants, the reply rate is a real signal, and the useful move is offer and targeting, not wording.
79
+
80
+ ### Example 2: "We spent $2,000 on LinkedIn ads and got 3 signups. Should we increase the budget?"
81
+
82
+ The skill checks the spend against the target CPA and the pre-declared window. If $2,000 is below 1x target CPA and the campaign has run under 72 hours, the honest answer is that the data cannot support a decision yet. If spend has exceeded 3x target CPA with no conversion path, the answer is to stop and name what the campaign proved — that this channel, at this offer, does not pay back.
83
+
84
+ ### Example 3: "Write me a landing page for my new API product."
85
+
86
+ The skill asks for the client count and the offer. With zero clients, it redirects to hand outreach first and treats the page as supporting evidence rather than the acquisition engine. With paying clients, it writes the page around the offer that is already converting, in the customer's own language pulled from their replies.
87
+
88
+ ## Limitations
89
+
90
+ - This is a mindset and decision layer. It does not log into ad platforms, send email, or fetch analytics — it reasons over data the user provides.
91
+ - The volume floors are directional heuristics for early-stage B2B and SaaS work, not statistical guarantees, and they do not replace a properly powered experiment when the budget allows one.
92
+ - It does not produce fake social proof, invented case studies, or testimonials, and it will refuse requests framed that way.
93
+ - Channel economics differ by industry and average contract value; the kill rules depend on the target CPA and margin the user supplies.
94
+ - Scaling from 10 to 100+ clients is out of scope by design; this skill covers winning client #1 and the first ten.
95
+
96
+ ## Source and License
97
+
98
+ Adapted with permission-compatible terms from the MIT-licensed [Marketing Mindset](https://github.com/axelfreeman/marketing-mindset) skill by Axel Freeman.