agy-superpowers 5.2.2 → 5.2.4

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 (231) hide show
  1. package/README.md +47 -150
  2. package/package.json +1 -1
  3. package/template/agent/rules/CLAUDE.md +80 -0
  4. package/template/agent/rules/code-styles.md +31 -32
  5. package/template/agent/rules/debug-confirmation-policy.md +2 -0
  6. package/template/agent/rules/file-length-policy.md +2 -0
  7. package/template/agent/rules/git-policy.md +7 -0
  8. package/template/agent/rules/language-matching.md +2 -0
  9. package/template/agent/rules/scratch-scripts.md +39 -0
  10. package/template/agent/rules/superpowers.md +8 -51
  11. package/template/agent/skills/executing-plans/SKILL.md +17 -0
  12. package/template/agent/skills/systematic-debugging/SKILL.md +16 -0
  13. package/template/agent/skills/test-driven-development/SKILL.md +16 -0
  14. package/template/agent/skills/verification-before-completion/SKILL.md +22 -0
  15. package/template/agent/skills/writing-plans/SKILL.md +16 -0
  16. package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
  17. package/template/agent/skills/analytics-setup/SKILL.md +0 -51
  18. package/template/agent/skills/api-design/SKILL.md +0 -193
  19. package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
  20. package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
  21. package/template/agent/skills/backend-developer/SKILL.md +0 -148
  22. package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
  23. package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
  24. package/template/agent/skills/community-manager/SKILL.md +0 -115
  25. package/template/agent/skills/content-marketer/SKILL.md +0 -111
  26. package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
  27. package/template/agent/skills/cto-architect/SKILL.md +0 -133
  28. package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
  29. package/template/agent/skills/data-analyst/SKILL.md +0 -147
  30. package/template/agent/skills/devops-engineer/SKILL.md +0 -117
  31. package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
  32. package/template/agent/skills/game-design/SKILL.md +0 -194
  33. package/template/agent/skills/game-developer/SKILL.md +0 -175
  34. package/template/agent/skills/growth-hacker/SKILL.md +0 -122
  35. package/template/agent/skills/idea-validator/SKILL.md +0 -55
  36. package/template/agent/skills/indie-legal/SKILL.md +0 -53
  37. package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
  38. package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
  39. package/template/agent/skills/launch-strategist/SKILL.md +0 -62
  40. package/template/agent/skills/market-researcher/SKILL.md +0 -53
  41. package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
  42. package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
  43. package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
  44. package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
  45. package/template/agent/skills/real-time-features/SKILL.md +0 -194
  46. package/template/agent/skills/retention-specialist/SKILL.md +0 -123
  47. package/template/agent/skills/rust-developer/SKILL.md +0 -281
  48. package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
  49. package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
  50. package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
  51. package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
  52. package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
  53. package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
  54. package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
  55. package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
  56. package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
  57. package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
  58. package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
  59. package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
  60. package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
  61. package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
  62. package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
  63. package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
  64. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
  65. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
  66. package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
  67. package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
  68. package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
  69. package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
  70. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
  71. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
  72. package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
  73. package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
  74. package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
  75. package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
  76. package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
  77. package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
  78. package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
  79. package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
  80. package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
  81. package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
  82. package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
  83. package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
  84. package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
  85. package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
  86. package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
  87. package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
  88. package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
  89. package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
  90. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
  91. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
  92. package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
  93. package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
  94. package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
  95. package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
  96. package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
  97. package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
  98. package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
  99. package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
  100. package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
  101. package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
  102. package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
  103. package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
  104. package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
  105. package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
  106. package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
  107. package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
  108. package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
  109. package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
  110. package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
  111. package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
  112. package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
  113. package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
  114. package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
  115. package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
  116. package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
  117. package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
  118. package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
  119. package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
  120. package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
  121. package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
  122. package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
  123. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
  124. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
  125. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
  126. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
  127. package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
  128. package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
  129. package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
  130. package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
  131. package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
  132. package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
  133. package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
  134. package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
  135. package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
  136. package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
  137. package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
  138. package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
  139. package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
  140. package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
  141. package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
  142. package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
  143. package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
  144. package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
  145. package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
  146. package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
  147. package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
  148. package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
  149. package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
  150. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
  151. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
  152. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
  153. package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
  154. package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
  155. package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
  156. package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
  157. package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
  158. package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
  159. package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
  160. package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
  161. package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
  162. package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
  163. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
  164. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
  165. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
  166. package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
  167. package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
  168. package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
  169. package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
  170. package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
  171. package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
  172. package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
  173. package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
  174. package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
  175. package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
  176. package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
  177. package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
  178. package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
  179. package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
  180. package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
  181. package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
  182. package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
  183. package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
  184. package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
  185. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
  186. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
  187. package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
  188. package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
  189. package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
  190. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
  191. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
  192. package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
  193. package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
  194. package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
  195. package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
  196. package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
  197. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
  198. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
  199. package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
  200. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
  201. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
  202. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
  203. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
  204. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
  205. package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
  206. package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
  207. package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
  208. package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
  209. package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
  210. package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
  211. package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
  212. package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
  213. package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
  214. package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
  215. package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
  216. package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
  217. package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
  218. package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
  219. package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
  220. package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
  221. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
  222. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
  223. package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
  224. package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
  225. package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
  226. package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
  227. package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
  228. package/template/agent/skills/saas-architect/SKILL.md +0 -139
  229. package/template/agent/skills/security-engineer/SKILL.md +0 -133
  230. package/template/agent/skills/seo-specialist/SKILL.md +0 -130
  231. package/template/agent/skills/solo-founder-ops/SKILL.md +0 -56
@@ -1,164 +0,0 @@
1
- ---
2
- name: email-infrastructure
3
- description: Use when setting up transactional email, managing deliverability, configuring SPF/DKIM/DMARC, building email templates, or debugging email delivery issues
4
- ---
5
-
6
- # Email Infrastructure Lens
7
-
8
- > **Philosophy:** Deliverability is a reputation game. One spam complaint can blacklist your domain for weeks.
9
- > Transactional email is infrastructure — it must be reliable, observable, and tenant-isolated.
10
-
11
- ---
12
-
13
- ## Core Instincts
14
-
15
- - **Domain reputation is fragile** — separate transactional from marketing; don't let bulk mail ruin auth emails
16
- - **Sending ≠ delivering** — always verify delivery via bounce/open tracking and suppression lists
17
- - **Never send from your root domain** — use a subdomain (`mail.yourdomain.com`) to protect your primary domain's reputation
18
- - **Warm up new IPs/domains** — cold domains go to spam; ramp gradually
19
- - **Unsubscribes are legal obligations** — CAN-SPAM, GDPR require easy opt-out
20
-
21
- ---
22
-
23
- ## Email Type Separation
24
-
25
- | Type | Examples | Volume | Sender domain | Provider pool |
26
- |------|----------|--------|---------------|--------------|
27
- | **Transactional** | Password reset, invoice, welcome | Low | `mail.yourdomain.com` | Dedicated / transactional |
28
- | **Lifecycle / product** | Trial ending, usage nudges | Medium | `mail.yourdomain.com` | Dedicated / transactional |
29
- | **Marketing / newsletters** | Product updates, promotions | High | `newsletter.yourdomain.com` | Separate / marketing |
30
-
31
- ❗ **Critical:** Marketing and transactional must use separate sending pools. A spam complaint on a newsletter should never affect password reset delivery.
32
-
33
- ---
34
-
35
- ## DNS Authentication (Must Have)
36
-
37
- ```
38
- SPF (Sender Policy Framework)
39
- → Declares which IPs are allowed to send email from your domain
40
- → Add to DNS: TXT record on yourdomain.com
41
- → Example: "v=spf1 include:sendgrid.net include:resend.com ~all"
42
- → Max 10 DNS lookups (hard limit); use flattening tools if exceeded
43
-
44
- DKIM (DomainKeys Identified Mail)
45
- → Cryptographic signature proving email wasn't tampered with
46
- → Your ESP generates CNAME records; add to DNS
47
- → Check: "selector._domainkey.yourdomain.com"
48
-
49
- DMARC (Domain-based Message Authentication)
50
- → Policy: what to do with emails that fail SPF/DKIM
51
- → Start: p=none (monitor) → move to p=quarantine → p=reject
52
- → Add: _dmarc.yourdomain.com TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com"
53
- → DMARC aggregate reports tell you who's failing and why
54
-
55
- Required order: SPF → DKIM → DMARC
56
- Without all three: Google/Yahoo bulk sender requirements (2024) → emails rejected
57
- ```
58
-
59
- ---
60
-
61
- ## Deliverability Rules
62
-
63
- | Rule | Why |
64
- |------|-----|
65
- | Spam complaint rate < **0.08%** | Google/Yahoo threshold; above = Gmail blocks |
66
- | Hard bounce rate < **2%** | Remove bounced emails immediately |
67
- | List hygiene: unverified emails | Never send to addresses that haven't confirmed |
68
- | Unsubscribe link required | CAN-SPAM (US) + GDPR (EU) legal requirement |
69
- | One-click unsubscribe (RFC 8058) | Gmail requires for bulk senders (> 5K/day) |
70
- | Text version alongside HTML | Many spam filters penalize HTML-only |
71
-
72
- ---
73
-
74
- ## Email Queue Architecture
75
-
76
- ```
77
- ❌ NEVER send email synchronously in request handler:
78
- POST /reset-password → send email → respond
79
-
80
- ✅ Queue email jobs:
81
- POST /reset-password → create job in queue → respond 200
82
- ↓ (async)
83
- Worker picks up job → send via ESP → log result
84
-
85
- Why: Email sending can take 1–3 seconds; timeouts → duplicate sends → user frustration
86
- Queue retry: 3 attempts with exponential backoff (1s, 5s, 30s)
87
- ```
88
-
89
- ---
90
-
91
- ## Template Best Practices
92
-
93
- ```
94
- Structure:
95
- - Max width: 600px (renders correctly in all clients)
96
- - Always include plaintext alternative
97
- - Inline CSS only (Gmail strips <style> blocks)
98
- - Images: always include alt text; assume images are blocked
99
- - CTA button: use table-based HTML (VML for Outlook)
100
-
101
- Testing:
102
- - Litmus / Email on Acid for client rendering
103
- - SpamAssassin score < 2 (most spam filters use SA)
104
- - Check: mail-tester.com (free quick test)
105
- ```
106
-
107
- ---
108
-
109
- ## ❌ Anti-Patterns to Avoid
110
-
111
- | ❌ NEVER DO | Why | ✅ DO INSTEAD |
112
- |------------|-----|--------------|
113
- | Send from root domain | Spam complaints = root domain blacklisted | Use `mail.yourdomain.com` subdomain |
114
- | Marketing + transactional same pool | Marketing spam rates kill auth email delivery | Separate sender pools |
115
- | No SPF/DKIM/DMARC | Emails rejected by Gmail/Yahoo (2024 policy) | Configure all three before launch |
116
- | Retry email without checking bounces | Sending to bounced emails = reputation damage | Remove hard bounces immediately |
117
- | Suppress all email on one unsubscribe | User unsubscribes from marketing, loses auth emails | Separate marketing vs transactional opt-out lists |
118
- | Send email synchronously in API handler | Timeouts → duplicate sends → user sees email twice | Job queue always |
119
-
120
- ---
121
-
122
- ## Questions You Always Ask
123
-
124
- **When setting up email:**
125
- - Are SPF, DKIM, and DMARC configured? (Check: `mxtoolbox.com`)
126
- - Are transactional and marketing emails on separate sending pools?
127
- - Is email sending queued (not synchronous in the request)?
128
- - What happens when an email bounces? Is the address suppressed?
129
-
130
- **When debugging delivery issues:**
131
- - What does the ESP delivery log show? Was it accepted or rejected?
132
- - Is the DMARC report showing authentication failures?
133
- - What's the spam complaint rate this week?
134
-
135
- ---
136
-
137
- ## Red Flags
138
-
139
- **Must fix:**
140
- - [ ] No DKIM/SPF/DMARC configured (emails fail Gmail/Yahoo)
141
- - [ ] Transactional and marketing sent from same pool
142
- - [ ] Bounced addresses not being suppressed
143
- - [ ] Email sent synchronously in request handler
144
-
145
- **Should fix:**
146
- - [ ] No plaintext version of HTML emails
147
- - [ ] No DMARC report monitoring
148
- - [ ] Unsubscribe doesn't work within 10 seconds (CAN-SPAM requirement)
149
-
150
- ---
151
-
152
- ## Who to Pair With
153
- - `backend-developer` — for queue implementation and webhook handling
154
- - `security-engineer` — for email token security (reset links, magic links)
155
- - `devops-engineer` — for DNS configuration and monitoring
156
-
157
- ---
158
-
159
- ## Tools
160
- **ESP:** Resend · SendGrid · Postmark · AWS SES
161
- **Testing:** mail-tester.com · Litmus · Email on Acid
162
- **DNS check:** MXToolbox · DMARC Analyzer
163
- **Templates:** React Email · MJML
164
- **Queue:** BullMQ / Inngest / Trigger.dev
@@ -1,194 +0,0 @@
1
- ---
2
- name: game-design
3
- description: Use when designing game mechanics, core loops, progression systems, monetization for games, difficulty curves, tutorial design, or player psychology
4
- ---
5
-
6
- # Game Design Lens
7
-
8
- > **Philosophy:** Game design is the art of making decisions fun. Every system should answer: "Is this engaging?"
9
- > The best games feel instantly playable and endlessly deep.
10
-
11
- ---
12
-
13
- ## Core Instincts
14
-
15
- - **Core loop first** — if the core action isn't fun by itself, no meta-game will save it
16
- - **Feel before balance** — a perfectly balanced but bad-feeling game fails; great feel forgives imbalance
17
- - **Teach through play** — tutorials are a design failure if players need to read them
18
- - **Intrinsic over extrinsic motivation** — players who play for rewards quit when rewards stop
19
- - **Every system must serve the fantasy** — if a mechanic doesn't reinforce the core fantasy, cut it
20
-
21
- ---
22
-
23
- ## Game Loop Hierarchy
24
-
25
- ```
26
- Core Loop (seconds): The primary action (shoot, match, tap, build)
27
- Meta Loop (minutes): Progression within a session (upgrade, complete level)
28
- Outer Loop (days): Long-term progression (unlock, prestige, story)
29
-
30
- Addiction comes from nested loops where each satisfies before feeding into the next.
31
-
32
- Example: Clash Royale
33
- Core: Battle (3 min)
34
- Meta: Earn chest, open chest, get cards
35
- Outer: Climb trophies, unlock arenas, seasonal ladder
36
- ```
37
-
38
- ---
39
-
40
- ## Player Motivation (Bartle Types)
41
-
42
- | Type | Motivation | Engage with |
43
- |------|-----------|-------------|
44
- | **Achiever** | Goals, completion, rewards | Achievements, leaderboards, progress bars |
45
- | **Explorer** | Discovery, secrets, lore | Hidden content, procedural worlds, narrative |
46
- | **Socializer** | Connection, competition, cooperation | Guilds, co-op, chat, gifting |
47
- | **Killer** | Competition, dominance | PvP, rankings, bragging rights |
48
-
49
- **Indie hacker tip:** Mobile casual games are mostly Achievers. Design clear goals and visible progress.
50
-
51
- ---
52
-
53
- ## Difficulty Curve Design
54
-
55
- ```
56
- Flow State (Csikszentmihalyi):
57
- Too hard → frustration → quit
58
- Too easy → boredom → quit
59
- Balanced → flow → engagement
60
-
61
- Difficulty progression rule:
62
- Introduce mechanic (easy) → test mechanic (medium) → combine mechanics (hard)
63
- Never introduce two new mechanics simultaneously
64
-
65
- Rubber-band difficulty:
66
- Dynamic difficulty adjustment (DDA): losing players get slight boost
67
- Winning players face slight increase
68
- Keeps sessions competitive without feeling rigged
69
- ```
70
-
71
- ---
72
-
73
- ## Monetization Design for Games
74
-
75
- | Model | Player experience | Retention impact | Revenue potential |
76
- |-------|------------------|-----------------|------------------|
77
- | **Premium** (one-time) | ✅ No friction | ✅ High | 🔴 Capped |
78
- | **IAP — cosmetics only** | ✅ No frustration | ✅ Good | 🟡 Medium |
79
- | **IAP — progression** | ⚠️ Pay-to-win risk | ⚠️ Can harm f2p | 🟡 Medium |
80
- | **Rewarded ads** | ✅ Player-initiated | ✅ Good if not forced | 🟡 Medium |
81
- | **Battle pass** | ✅ FOMO + value | ✅ High (retention driver) | 🟢 High |
82
- | **Subscriptions** | ✅ Predictable | ✅ Good | 🟢 High |
83
- | **Gacha / loot boxes** | ⚠️ Controversy | ⚠️ Can be predatory | 🟢 High |
84
-
85
- **Indie hacker safe defaults:** Rewarded ads + battle pass + cosmetic IAP.
86
- **Avoid:** Pay-to-win IAP — destroys community trust and long-term retention.
87
-
88
- ---
89
-
90
- ## Onboarding / Tutorial Design Rules
91
-
92
- ```
93
- Rule 1: Show, don't tell — demonstrate mechanics, don't explain them
94
- Rule 2: Force the action — don't ask "do you want a tutorial?"; just do it
95
- Rule 3: Reward immediately — first tutorial action must give satisfying feedback
96
- Rule 4: FTUE (First-Time User Experience) must complete in < 3 minutes
97
- Rule 5: Every tutorial step has exactly ONE objective
98
- Rule 6: Remove all failure states during tutorial — frustration at minute 1 = uninstall
99
- Rule 7: No text walls — max 2 lines of instruction; ideally zero
100
- ```
101
-
102
- ---
103
-
104
- ## Game Balance Framework
105
-
106
- ```
107
- Dominant strategy = game is solved → players get bored
108
- No viable strategy = game is frustrating → players quit
109
-
110
- Balanced game: multiple viable strategies, each with clear strengths and weaknesses
111
-
112
- Rock-Paper-Scissors model:
113
- A beats B, B beats C, C beats A
114
- No single dominant option; strategy matters
115
-
116
- Formulas:
117
- DPS = Damage / Attack Speed
118
- TTK (Time to Kill) = Target HP / DPS
119
- Win rate = (Wins) / (Wins + Losses) — target ~50% ± 5% for PvP balance
120
- ```
121
-
122
- ---
123
-
124
- ## Game Metrics (KPIs)
125
-
126
- | Metric | Definition | Target |
127
- |--------|-----------|--------|
128
- | D1 Retention | % players returning on day 1 | > 35% |
129
- | D7 Retention | % players returning on day 7 | > 15% |
130
- | D28 Retention | % players returning on day 28 | > 7% |
131
- | Session length | Average time per session | 5–15 min (casual), 20–60 min (core) |
132
- | Sessions per DAU | Average sessions per daily user | > 2 |
133
- | ARPDAU | Revenue per daily active user | Varies; $0.05–$0.20 mobile casual |
134
- | IPM (Installs per Mille) | Ad creative installs / 1K impressions | > 3 for performance |
135
- | Day 0 tutorial completion | % who finish tutorial | > 70% |
136
-
137
- ---
138
-
139
- ## ❌ Anti-Patterns to Avoid
140
-
141
- | ❌ NEVER DO | Why | ✅ DO INSTEAD |
142
- |------------|-----|--------------|
143
- | Skip the core loop to build meta first | Meta can't save a bad core loop | Fun core loop in < 2 weeks prototype |
144
- | Pay-to-win IAP | Destroys PvP balance, harms f2p players | Cosmetics, convenience (not power) |
145
- | Energy/timer gates early in FTUE | Players quit before experiencing value | First gate after player is hooked (> D3) |
146
- | Tutorial that can be failed | Guaranteed failure = guaranteed uninstall | Guided, railroaded tutorial with no lose state |
147
- | Random difficulty spikes | Perceived unfairness = rage quit | Smooth curve with intentional "boss" moments |
148
- | Introducing 2 mechanics at once | Cognitive overload | One mechanic per level/screen |
149
- | Rewarded ads forced (not voluntary) | Players hate interruption | Rewarded only — player initiates |
150
-
151
- ---
152
-
153
- ## Questions You Always Ask
154
-
155
- **When designing a new mechanic:**
156
- - Is this fun by itself? (Test with just the mechanic, no rewards)
157
- - Does it reinforce the core fantasy of the game?
158
- - How does a new player encounter this for the first time?
159
-
160
- **When reviewing a level/system:**
161
- - Does the difficulty curve make sense? No sudden spikes?
162
- - What's the win rate data? (If PvP or competitive)
163
- - What's the tutorial completion rate for this flow?
164
-
165
- ---
166
-
167
- ## Red Flags
168
-
169
- **Must fix:**
170
- - [ ] Tutorial can be failed or skipped with no guidance
171
- - [ ] First session longer than 5 minutes before first reward
172
- - [ ] Pay-to-win mechanics that affect PvP balance
173
- - [ ] No distinct core loop (what does the player DO every 30 seconds?)
174
-
175
- **Should fix:**
176
- - [ ] No audio/haptic feedback on primary action
177
- - [ ] Difficulty spikes without escalation curve
178
- - [ ] Monetization gating content needed to progress (not convenience)
179
-
180
- ---
181
-
182
- ## Who to Pair With
183
- - `game-developer` — for technical implementation of mechanics
184
- - `mobile-developer` — for mobile UX and platform guidelines
185
- - `monetization-strategist` — for IAP pricing and revenue modeling
186
- - `retention-specialist` — for D1/D7/D28 funnel analysis
187
-
188
- ---
189
-
190
- ## Reference Frameworks
191
- - **MDA Framework** (Mechanics → Dynamics → Aesthetics) — Hunicke, LeBlanc, Zubek
192
- - **Bartle's Player Types** — motivation segmentation for multiplayer
193
- - **Flow State** — Csikszentmihalyi's challenge/skill balance
194
- - **Octalysis** — Yu-kai Chou's gamification framework (8 core drives)
@@ -1,175 +0,0 @@
1
- ---
2
- name: game-developer
3
- description: Use when working on mobile app features, reviewing mobile code, or making architecture decisions — regardless of platform (React Native, Flutter, iOS, Android)
4
- ---
5
-
6
- # Game Developer Lens
7
-
8
- > **Philosophy:** Games are real-time, frame-budget-constrained simulations. Every millisecond counts.
9
- > Fun is the product. Performance is the enabler. Both must ship together.
10
-
11
- ---
12
-
13
- ## ⚠️ ASK BEFORE ASSUMING
14
-
15
- | What | Why it matters |
16
- |------|----------------|
17
- | **Platform?** Mobile / PC / Console / Web | Frame budget, input model, distribution channel all differ |
18
- | **Engine?** Unity / Unreal / Godot / custom | Determines every technical pattern |
19
- | **Genre?** Puzzle / RPG / Action / Idle | Core loop architecture differs fundamentally |
20
- | **Online?** Singleplayer / Multiplayer / MMO | Networking complexity changes everything |
21
-
22
- When unspecified, assume Unity + C# + mobile (iOS + Android).
23
-
24
- ---
25
-
26
- ## Frame Budget
27
-
28
- ```
29
- Target frame rate → frame budget → time per frame
30
- 60 FPS = 16.67ms per frame (mobile standard)
31
- 30 FPS = 33.33ms per frame (minimum acceptable mobile)
32
- 120 FPS = 8.33ms per frame (high-refresh displays)
33
-
34
- Budget allocation guideline (16.67ms total):
35
- CPU (game logic + physics): ~6ms
36
- CPU (rendering commands): ~4ms
37
- GPU (draw calls + shaders): ~6ms
38
- Headroom (OS, audio, GC): ~0.67ms
39
-
40
- If any system consistently exceeds budget → frame drops → player frustration
41
- ```
42
-
43
- ---
44
-
45
- ## Engine Decision Tree
46
-
47
- ```
48
- What engine?
49
- ├── AAA budget + PC/Console + team → Unreal Engine (C++)
50
- ├── Mobile + fast iteration + mid-size → Unity (C#)
51
- ├── Indie + open source + 2D/3D → Godot (GDScript or C#)
52
- ├── Browser target → Phaser.js / Babylon.js / Three.js
53
- └── Existing engine in codebase → match codebase
54
- ```
55
-
56
- ---
57
-
58
- ## Core Instincts
59
-
60
- - **The game loop is sacred** — Input → Update → Render, every frame, on time
61
- - **Object pooling over instantiation** — `Instantiate()` at runtime = GC spike = frame drop
62
- - **Draw calls are the enemy** — batch sprites, use atlases, instanced rendering
63
- - **Physics runs on a fixed timestep** — decouple physics from render frame rate
64
- - **GC pauses kill games** — allocate in `Start()`/`Awake()`, never in `Update()`
65
- - **Profiler first, optimize second** — never guess what's slow
66
-
67
- ---
68
-
69
- ## Performance Thresholds (Mobile)
70
-
71
- | Metric | Good | Investigate |
72
- |--------|------|-------------|
73
- | Frame rate (gameplay) | 60 FPS sustained | < 45 FPS |
74
- | Frame rate (menus/UI) | 60 FPS | < 30 FPS |
75
- | Draw calls per frame | < 100 | > 200 |
76
- | Texture memory | < 256MB | > 512MB |
77
- | APK / IPA size | < 100MB | > 200MB (impacts conversion) |
78
- | RAM usage (mid-range device) | < 300MB | > 500MB (OS kills app) |
79
- | Load time (initial) | < 5s | > 10s |
80
- | GC allocation per frame | 0B | > 0B (any = risk) |
81
-
82
- ---
83
-
84
- ## ❌ Anti-Patterns to Avoid
85
-
86
- | ❌ NEVER DO | Why | ✅ DO INSTEAD |
87
- |------------|-----|--------------|
88
- | `Instantiate()`/`Destroy()` in `Update()` | GC spike = frame drop | Object pooling |
89
- | `GameObject.Find()` in `Update()` | Expensive search every frame | Cache reference in `Start()` |
90
- | Non-atlased sprites | 1 draw call per sprite = explosion | Sprite Atlas / texture packing |
91
- | `string` concatenation in `Update()` | String allocation = GC | `StringBuilder` or avoid |
92
- | Unnecessary `GetComponent<>()` per frame | Expensive reflection | Cache in `Awake()/Start()` |
93
- | Physics on non-fixed timestep | Non-deterministic simulation | Use `FixedUpdate()` for physics |
94
- | Uncompressed audio | Large bundle, high memory | OGG for music, WAV for short SFX only |
95
- | `Debug.Log()` in build | CPU overhead, even in release | Strip with `#if UNITY_EDITOR` or Conditional |
96
-
97
- ---
98
-
99
- ## Platform Considerations
100
-
101
- | Concern | iOS | Android |
102
- |---------|-----|---------|
103
- | Max texture size | 4096×4096 | 4096×4096 |
104
- | Graphics API | Metal | Vulkan / OpenGL ES 3.0 |
105
- | Target FPS API | `Application.targetFrameRate = 60` | Same |
106
- | Memory kill threshold | ~1.5GB | Varies by device (256MB–4GB) |
107
- | App size limit (OTA) | 200MB cellular cap | No cap (varies by store) |
108
- | Haptic feedback | `UnityEngine.iOS.Device.SetNoBackupFlag` / Core Haptics | Vibration API |
109
-
110
- ---
111
-
112
- ## Multi-Scene / Asset Loading Pattern
113
-
114
- ```csharp
115
- // Async scene loading (never use sync — it freezes)
116
- async void LoadScene(string sceneName) {
117
- var op = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
118
- op.allowSceneActivation = false;
119
- while (op.progress < 0.9f) {
120
- loadingBar.value = op.progress;
121
- await Task.Yield();
122
- }
123
- op.allowSceneActivation = true;
124
- }
125
-
126
- // Addressables for asset streaming (don't include everything in build)
127
- var handle = Addressables.LoadAssetAsync<GameObject>("enemies/boss");
128
- await handle.Task;
129
- ```
130
-
131
- ---
132
-
133
- ## Questions You Always Ask
134
-
135
- **When designing a system:**
136
- - Does any allocation happen inside `Update()`? (GC risk)
137
- - Is this system tested on a low-end Android device (Qualcomm 450-class)?
138
- - What's the draw call count before and after this change?
139
- - Does this work at 30 FPS? (Not just 60 FPS in editor)
140
-
141
- **When reviewing code:**
142
- - Are expensive operations cached?
143
- - Is physics logic in `FixedUpdate()`, not `Update()`?
144
- - Are textures atlased and compressed?
145
-
146
- ---
147
-
148
- ## Red Flags in Code Review
149
-
150
- **Must fix:**
151
- - [ ] Allocations happening inside `Update()` loop
152
- - [ ] `Find()` or `GetComponent<>()` called per frame without caching
153
- - [ ] Unatlased sprite renderers (high draw call count)
154
- - [ ] Synchronous scene loading
155
-
156
- **Should fix:**
157
- - [ ] No object pooling for frequently spawned objects
158
- - [ ] Uncompressed audio assets
159
- - [ ] Debug.Log calls in production build paths
160
-
161
- ---
162
-
163
- ## Who to Pair With
164
- - `game-design` — for game loop, balance, and player psychology
165
- - `mobile-developer` — for mobile platform constraints and store distribution
166
- - `monetization-strategist` — for IAP and ad monetization strategy
167
- - `app-store-optimizer` — for App Store/Google Play listing
168
-
169
- ---
170
-
171
- ## Tools
172
- **Engines:** Unity · Unreal Engine · Godot
173
- **Profiling:** Unity Profiler · Xcode Instruments · Android GPU Inspector · RenderDoc
174
- **Asset pipeline:** TexturePacker (atlasing) · Addressables (Unity) · FMOD / Wwise (audio)
175
- **Analytics:** Unity Analytics · GameAnalytics · Firebase (games)
@@ -1,122 +0,0 @@
1
- ---
2
- name: growth-hacker
3
- description: Use when planning user acquisition, building viral loops, designing activation funnels, or running growth experiments — for any product type
4
- ---
5
-
6
- # Growth Hacker Lens
7
-
8
- > **Philosophy:** Growth is a system, not a campaign. Build loops, not one-time spikes.
9
- > Optimize activation before acquisition. A leaky bucket can't be filled by pouring more water.
10
-
11
- ---
12
-
13
- ## Core Instincts
14
-
15
- - **Fix the funnel before filling it** — acquisition without retention is burning money
16
- - **North Star first** — all growth work should connect to one metric that captures delivered value
17
- - **Build loops, not funnels** — sustainable growth is self-reinforcing (referral, content, product virality)
18
- - **Kill ideas fast** — run the simplest possible test before investing in a full build
19
- - **Pre-PMF: qualitative; post-PMF: quantitative**
20
-
21
- ---
22
-
23
- ## AARRR Framework (Pirate Metrics)
24
-
25
- | Stage | Key Question | Metric |
26
- |-------|-------------|--------|
27
- | **Acquisition** | Where do users come from? | CAC, channel attribution |
28
- | **Activation** | Do users experience value quickly? | % hitting "aha moment" in session 1 |
29
- | **Retention** | Do users come back? | D1/D7/D30 retention rates |
30
- | **Revenue** | Do users pay? | Conversion rate, ARPU, MRR |
31
- | **Referral** | Do users tell others? | Viral coefficient K, NPS |
32
-
33
- **Indie hacker priority order: Retention → Activation → Revenue → Acquisition → Referral**
34
- (Fix retention first — everything else is downstream.)
35
-
36
- ---
37
-
38
- ## Viral Coefficient
39
-
40
- ```
41
- K = i × c
42
- i = average invites sent per user
43
- c = conversion rate of those invites (0–1)
44
-
45
- K > 1 = viral (exponential growth)
46
- K = 0.5 + strong acquisition = sustainable growth
47
- K < 0.1 = product-led growth isn't working; use other channels
48
- ```
49
-
50
- ---
51
-
52
- ## Activation Benchmarks
53
-
54
- | Metric | Good | Great |
55
- |--------|------|-------|
56
- | Day 1 retention (mobile) | > 30% | > 45% |
57
- | Activation rate (hit aha moment) | > 40% | > 60% |
58
- | Time to first value | < 5 min | < 2 min |
59
- | Onboarding completion | > 60% | > 80% |
60
-
61
- **Aha moment** = the specific action that most correlates with long-term retention. Find it via cohort analysis: what do retained users do that churned users don't?
62
-
63
- ---
64
-
65
- ## ❌ Anti-Patterns to Avoid
66
-
67
- | ❌ NEVER DO | Why | ✅ DO INSTEAD |
68
- |------------|-----|--------------|
69
- | Scale acquisition pre-PMF | Filling a leaky bucket | Get to K=0.5+ / 40% D30 retention first |
70
- | Run experiments without hypothesis | Results are uninterpretable | Document hypothesis before every experiment |
71
- | Celebrate signup numbers | Signups are vanity; activation and retention are sanity | Track activated users, not total signups |
72
- | One-time launch spike as "growth" | Not repeatable, not a system | Build channels with compounding returns |
73
- | Change multiple variables in one test | Can't attribute the result | One variable at a time |
74
- | Scale a channel before unit economics work | CAC > LTV = faster bankruptcy | LTV:CAC ≥ 3:1 before scaling spend |
75
-
76
- ---
77
-
78
- ## Questions You Always Ask
79
-
80
- **When diagnosing growth:**
81
- - Where is the biggest drop in the AARRR funnel right now?
82
- - What does the aha moment look like, and how fast do users get there?
83
- - Is this a retention problem (fix product) or an acquisition problem (optimize funnel)?
84
-
85
- **When planning experiments:**
86
- - What's the hypothesis? What would prove it wrong?
87
- - What's the minimum sample size for statistical significance?
88
- - How long does the experiment need to run? (Avoid stopping early)
89
-
90
- ---
91
-
92
- ## Red Flags
93
-
94
- **Must address:**
95
- - [ ] D30 retention < 10% and team is focused on acquisition
96
- - [ ] No defined aha moment / activation event
97
- - [ ] Growth experiments running without documented hypothesis
98
- - [ ] CAC > LTV (actively destroying value)
99
-
100
- **Should address:**
101
- - [ ] No referral mechanism in product
102
- - [ ] Acquisition fully dependent on paid (no organic loop)
103
- - [ ] Onboarding completion < 50%
104
-
105
- ---
106
-
107
- ## Who to Pair With
108
- - `product-manager` — for activation and aha moment definition
109
- - `data-analyst` — for cohort analysis and experiment significance
110
- - `retention-specialist` — for fixing the funnel before scaling
111
-
112
- ---
113
-
114
- ## Key Formulas
115
-
116
- ```
117
- CAC = total acquisition spend / new customers acquired
118
- LTV = ARPU × (1 / monthly_churn_rate)
119
- LTV:CAC = should be ≥ 3:1 (ideally > 5:1)
120
- Payback = CAC / monthly_gross_margin_per_customer (target < 12 months)
121
- K = invites_per_user × invite_conversion_rate
122
- ```