app-growth-design 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 bixxter
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ # app-growth-design
2
+
3
+ A Claude Code skill for the decisions that actually move an app: **onboarding, paywalls, pricing, retention, gamification, growth loops and screen-level craft.**
4
+
5
+ It is not another "be a helpful product expert" prompt. It is a knowledge base — 5.7 hours of teardowns from [Tim Gabe's YouTube channel](https://www.youtube.com/@TimGabe) compressed into six playbooks where every non-obvious claim carries a `[NN]` marker back to the video it came from, and every case study keeps its numbers.
6
+
7
+ ```bash
8
+ npx github:bixxter/app-growth-design
9
+ ```
10
+
11
+ That's it. Pick user-wide or project-only, restart Claude Code, and the skill loads itself whenever you're working on one of those problems.
12
+
13
+ ---
14
+
15
+ ## What changes when it's installed
16
+
17
+ Without it, ask Claude *"my paywall converts at 2%, what do I test first?"* and you get sensible, generic advice: try annual vs monthly, test your copy, add social proof.
18
+
19
+ With it, the same question routes into `monetization-paywalls.md` and comes back with an ordering that has evidence attached:
20
+
21
+ > Structure out-tests price, always. Ranked LTV uplift across the corpus: locale 62.3% > trial structure 59.6% > plan duration 58.7% > plan count 57.1% > **price 45.5%** > visuals 34.6%. Adding a free trial to a *weekly* plan took 12-month LTV from $7.40 to $54.50 (+636%) — no price test does that. `[06]`
22
+ >
23
+ > But first check which layer you're on: 57.7% of new apps never cross $1,000 in revenue. Below the top decile this isn't a monetization problem. `[06]`
24
+
25
+ Same for the rest:
26
+
27
+ | You're working on | It routes to | Sample of what's in there |
28
+ |---|---|---|
29
+ | First-run flow, quiz vs. short flow, time-to-value, activation | `onboarding-activation.md` | Granola ships value in 2 screens ($1.5B); Cal AI runs a 20+ step quiz ($35M year one); Noom runs 113 screens. Length is only justified if it buys visible personalization or a buyer filter. |
30
+ | Paywall layout, trials, plan count, price tiers | `monetization-paywalls.md` | Weekly plans convert 1.7–7.4× better than annual at every price tier. 82–89% of trial starts happen on install day. |
31
+ | Streaks, leaderboards, badges, churn, reward ceremonies | `retention-gamification.md` | A 35-intervention meta-analysis: gamification lifts autonomy (g=0.638) and relatedness (g=1.776) but barely touches competence (g=0.277). Depth is non-monotonic — past a point the fix is cutting. |
32
+ | *Why* users behave this way — identity, dopamine, loss aversion | `behavioral-psychology.md` | Build Mirror → Label → Flex. Exit question: if a user left today, what would they rebuild from scratch? "Nothing much" = no moat. |
33
+ | Positioning vs. an incumbent, moats, share loops, landing pages | `growth-marketing.md` | Design the share *artifact*, not the share button. Fuse share with invite at a 1-friend threshold. Attachment before virality. |
34
+ | Type scale, spacing, color budget, motion, microcopy | `design-craft.md` | The countable craft checklist, the subtraction pass, the five-criterion screen audit. |
35
+
36
+ **243 named products** are indexed with what each one exemplifies, so the model can reach for a real citation instead of inventing a plausible one.
37
+
38
+ ---
39
+
40
+ ## Install
41
+
42
+ ```bash
43
+ # interactive — asks user-wide or project-only
44
+ npx github:bixxter/app-growth-design
45
+
46
+ # non-interactive
47
+ npx github:bixxter/app-growth-design --user # ~/.claude/skills/app-growth-design
48
+ npx github:bixxter/app-growth-design --project # ./.claude/skills/app-growth-design
49
+ npx github:bixxter/app-growth-design --dir ~/some/skills
50
+
51
+ # later
52
+ npx github:bixxter/app-growth-design --force # update in place
53
+ npx github:bixxter/app-growth-design --uninstall
54
+ ```
55
+
56
+ Node 18+. No dependencies — the installer is one file that copies `skill/` into your skills directory and nothing else.
57
+
58
+ Prefer to do it by hand? `cp -r skill ~/.claude/skills/app-growth-design`. It works in anything that reads the [Agent Skills](https://code.claude.com/docs/en/skills) format.
59
+
60
+ ---
61
+
62
+ ## How it was built
63
+
64
+ The short version. The long version — every decision and the two things that went wrong — is in **[docs/PROCESS.md](docs/PROCESS.md)**.
65
+
66
+ The problem with turning a YouTube channel into agent knowledge is that the naive path fails twice. Dumping raw captions gives you 220k words of rolling-window duplicates, most of it filler. And a design channel is the worst possible case for captions alone: the man is *pointing at a screen*. "Look at how they did this" is the entire claim, and the audio carries none of it.
67
+
68
+ So the pipeline is built around one idea: **the frames are not decoration, they are the missing half of the content.**
69
+
70
+ ```
71
+ 30 videos (5.7 h)
72
+
73
+ 1 ──┤ yt-dlp: captions only, 6-wide → 2.6 MB VTT / 220,498 words
74
+
75
+ 2 ──┤ dedupe rolling captions, regroup → 49,629 words, ~30s blocks
76
+ │ into ~30s timestamped blocks (4.4× smaller, addressable)
77
+
78
+ 3 ──┤ yt-dlp: 480p video, 3-wide → 510 MB, deleted after stage 4
79
+
80
+ 4 ──┤ ONE AGENT PER VIDEO, in parallel: → 30 notes / 118,660 words
81
+ │ read transcript → find the moments 1,161 frames extracted
82
+ │ where meaning is on screen, not in 476 described in-line
83
+ │ the audio → ffmpeg those timestamps
84
+ │ → actually LOOK at the frames →
85
+ │ write a structured note
86
+ │ ↓
87
+ │ second agent re-reads each note against the transcript and
88
+ │ fixes what's missing — unresolved "this screen", dropped numbers,
89
+ │ verbatim bloat, vague filler rules
90
+
91
+ 5 ──┤ SIX AGENTS, one per theme, each → 6 playbooks / 55,241 words
92
+ │ reading across all 30 notes: + SKILL.md router (2,378 words)
93
+ │ merge, resolve contradictions,
94
+ │ keep every number and product name
95
+ ```
96
+
97
+ Note what happens to the word count at stage 4: the notes come out **more than twice the size of the speech**. That's the whole point — 1,161 screenshots put back what the captions lost.
98
+
99
+ Three details that turned out to matter more than expected:
100
+
101
+ - **Captions lag the screen by a beat.** Frames get extracted 2–4 seconds *after* he starts describing something, or you capture the previous slide.
102
+ - **The verify pass is where quality comes from.** The single most common defect was a note that still said "the example shown here" — a reference the downstream agent can't use. Verification agents re-extract the frame, look at it, and write in what was actually there.
103
+ - **`[NN]` markers everywhere.** Every claim in the playbooks points back at a source video. That's what makes the skill arguable rather than oracular — you can check it, and so can the model.
104
+
105
+ ---
106
+
107
+ ## Rebuild it for a different channel
108
+
109
+ Everything needed is in [`pipeline/`](pipeline/), and the whole thing is channel-agnostic — swap `pipeline/manifest.tsv` for your own list of videos and re-run. See [pipeline/README.md](pipeline/README.md) for the exact commands.
110
+
111
+ ```
112
+ pipeline/
113
+ ├── manifest.tsv num ⇥ video_id ⇥ title ⇥ duration_s — the only input you change
114
+ ├── 1-fetch-subs.sh captions, 6 parallel
115
+ ├── 2-clean-vtt.py dedupe + regroup into ~30s timestamped blocks
116
+ ├── 3-fetch-video.sh 480p, 3 parallel
117
+ ├── 3b-retry-video.sh sweep for what YouTube throttled
118
+ ├── 4-enrich.workflow.js one agent per video: frames + note, then verify
119
+ ├── 5-synthesize.workflow.js six agents: notes → playbooks → SKILL.md
120
+ └── recover.workflow.js the lean rewrite of stage 4, after the first run
121
+ burned itself out (see docs/PROCESS.md)
122
+ ```
123
+
124
+ Stages 4–5 are [Claude Code Workflow](https://code.claude.com/docs/en/claude-code) scripts — deterministic orchestration over parallel subagents. Stages 1–3 need `yt-dlp` and `ffmpeg`.
125
+
126
+ ---
127
+
128
+ ## Honesty section
129
+
130
+ **This is one practitioner's opinionated view, not settled fact.** Nearly every mechanic in the corpus is asserted from survivorship-selected case studies. There are essentially no before/after deltas attributable to a specific change. Treat the cases that carry real numbers as evidence and the rest as hypotheses worth testing.
131
+
132
+ **The corpus contradicts itself**, and the playbooks say so rather than papering over it — short vs. long onboarding, friction-removal vs. friction-as-amplifier, design-as-moat vs. design-is-not-the-moat. Each reference file ends with **Anti-patterns**, **Contradictions** and **Caveats**. Read them before advising anyone.
133
+
134
+ **Agency promos are flagged.** Tim runs a design agency and pitches it 2–4 times per video; several case studies are his own unaudited client work. Those segments are marked as promotional. Use the mechanics, never the implied results.
135
+
136
+ ---
137
+
138
+ ## Attribution & licensing
139
+
140
+ All the underlying insight belongs to **[Tim Gabe](https://www.youtube.com/@TimGabe)** — if this is useful to you, go watch the source videos. Every `[NN]` marker in the skill links to one.
141
+
142
+ This repo ships **structured, synthesized notes, not republished transcripts.** No captions, no video, no screenshots are included here; the pipeline that produces them from public YouTube content is included so you can reproduce the work yourself.
143
+
144
+ The pipeline code is MIT ([LICENSE](LICENSE)). The distilled playbooks in `skill/` are commentary on publicly published material — use them, and keep the attribution.
145
+
146
+ Not affiliated with, endorsed by, or reviewed by Tim Gabe.
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ // Installs the app-growth-design skill into a Claude Code skills directory.
3
+ // Zero dependencies, Node 18+. Copies files; it never writes outside the chosen target.
4
+ import { createInterface } from 'node:readline/promises'
5
+ import { fileURLToPath } from 'node:url'
6
+ import fs from 'node:fs/promises'
7
+ import os from 'node:os'
8
+ import path from 'node:path'
9
+ import process from 'node:process'
10
+
11
+ const SKILL = 'app-growth-design'
12
+ const PKG_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
13
+ const SRC = path.join(PKG_ROOT, 'skill')
14
+
15
+ const tty = process.stdout.isTTY && !process.env.NO_COLOR
16
+ const c = (code, s) => (tty ? `\x1b[${code}m${s}\x1b[0m` : s)
17
+ const bold = s => c('1', s)
18
+ const dim = s => c('2', s)
19
+ const green = s => c('32', s)
20
+ const cyan = s => c('36', s)
21
+ const red = s => c('31', s)
22
+
23
+ const HELP = `
24
+ ${bold('app-growth-design')} — install the skill into Claude Code
25
+
26
+ ${cyan('npx github:bixxter/app-growth-design')} pick a target interactively
27
+ ${cyan('npx github:bixxter/app-growth-design --user')} ~/.claude/skills/${SKILL}
28
+ ${cyan('npx github:bixxter/app-growth-design --project')} ./.claude/skills/${SKILL}
29
+
30
+ Options
31
+ --user, --global install for every project on this machine (default)
32
+ --project install into the current project only
33
+ --dir <path> install into a specific skills directory
34
+ --force overwrite an existing install without asking
35
+ --yes, -y never prompt; take the defaults
36
+ --uninstall remove a previously installed copy
37
+ -h, --help this text
38
+ `
39
+
40
+ function parseArgs(argv) {
41
+ const o = { target: null, dir: null, force: false, yes: false, uninstall: false, help: false }
42
+ for (let i = 0; i < argv.length; i++) {
43
+ const a = argv[i]
44
+ if (a === '--user' || a === '--global') o.target = 'user'
45
+ else if (a === '--project' || a === '--local') o.target = 'project'
46
+ else if (a === '--dir') { o.dir = argv[++i]; o.target = 'custom' }
47
+ else if (a === '--force' || a === '-f') o.force = true
48
+ else if (a === '--yes' || a === '-y') o.yes = true
49
+ else if (a === '--uninstall' || a === '--remove') o.uninstall = true
50
+ else if (a === '--help' || a === '-h') o.help = true
51
+ else if (a.startsWith('-')) { console.error(red(`Unknown option: ${a}`)); process.exit(2) }
52
+ }
53
+ if (o.dir && !o.dir.trim()) { console.error(red('--dir needs a path')); process.exit(2) }
54
+ return o
55
+ }
56
+
57
+ const exists = async p => !!(await fs.stat(p).catch(() => null))
58
+
59
+ async function copyDir(src, dest) {
60
+ await fs.mkdir(dest, { recursive: true })
61
+ let files = 0
62
+ for (const entry of await fs.readdir(src, { withFileTypes: true })) {
63
+ if (entry.name === '.DS_Store') continue
64
+ const from = path.join(src, entry.name)
65
+ const to = path.join(dest, entry.name)
66
+ if (entry.isDirectory()) files += await copyDir(from, to)
67
+ else { await fs.copyFile(from, to); files++ }
68
+ }
69
+ return files
70
+ }
71
+
72
+ async function ask(question, fallback) {
73
+ if (!process.stdin.isTTY) return fallback
74
+ const rl = createInterface({ input: process.stdin, output: process.stdout })
75
+ try { return (await rl.question(question)).trim() } finally { rl.close() }
76
+ }
77
+
78
+ async function resolveTarget(opts) {
79
+ const userDir = path.join(os.homedir(), '.claude', 'skills')
80
+ const projectDir = path.join(process.cwd(), '.claude', 'skills')
81
+ if (opts.target === 'custom') return path.resolve(opts.dir)
82
+ if (opts.target === 'user') return userDir
83
+ if (opts.target === 'project') return projectDir
84
+ if (opts.yes || !process.stdin.isTTY) return userDir
85
+
86
+ console.log(`\n Where should ${bold(SKILL)} go?\n`)
87
+ console.log(` ${bold('1')} ${userDir} ${dim('(all projects — default)')}`)
88
+ console.log(` ${bold('2')} ${projectDir} ${dim('(this project only)')}\n`)
89
+ const answer = await ask(' 1 or 2: ', '1')
90
+ return answer === '2' ? projectDir : userDir
91
+ }
92
+
93
+ async function main() {
94
+ const opts = parseArgs(process.argv.slice(2))
95
+ if (opts.help) { console.log(HELP); return }
96
+
97
+ if (!(await exists(SRC))) {
98
+ console.error(red(`Cannot find the skill source at ${SRC}`))
99
+ process.exit(1)
100
+ }
101
+
102
+ const skillsDir = await resolveTarget(opts)
103
+ const dest = path.join(skillsDir, SKILL)
104
+
105
+ if (opts.uninstall) {
106
+ if (!(await exists(dest))) { console.log(dim(`\n Nothing at ${dest}\n`)); return }
107
+ await fs.rm(dest, { recursive: true, force: true })
108
+ console.log(`\n ${green('Removed')} ${dest}\n`)
109
+ return
110
+ }
111
+
112
+ if (await exists(dest)) {
113
+ if (!opts.force && !opts.yes) {
114
+ const answer = await ask(`\n ${dest} already exists. Overwrite? ${dim('[Y/n]')} `, 'y')
115
+ if (answer && !/^y(es)?$/i.test(answer)) { console.log(dim('\n Cancelled.\n')); return }
116
+ }
117
+ await fs.rm(dest, { recursive: true, force: true })
118
+ }
119
+
120
+ const files = await copyDir(SRC, dest)
121
+
122
+ console.log(`
123
+ ${green('Installed')} ${bold(SKILL)} ${dim(`(${files} files)`)}
124
+ ${dim('→')} ${dest}
125
+
126
+ ${bold('Use it')} — restart Claude Code, then just describe the problem:
127
+
128
+ ${cyan('"audit my onboarding flow"')}
129
+ ${cyan('"my paywall converts at 2%, what should I test first?"')}
130
+ ${cyan('"design a streak that does not backfire"')}
131
+
132
+ The skill loads itself when the topic matches. To force it: ${cyan(`/${SKILL}`)}
133
+ ${dim('Uninstall: npx github:bixxter/app-growth-design --uninstall')}
134
+ `)
135
+ }
136
+
137
+ main().catch(err => {
138
+ console.error(red(`\n Install failed: ${err.message}\n`))
139
+ process.exit(1)
140
+ })
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "app-growth-design",
3
+ "version": "1.0.0",
4
+ "description": "Claude Code skill: app onboarding, paywalls, pricing, retention, gamification and growth — distilled from 30 Tim Gabe teardowns into six source-marked playbooks.",
5
+ "type": "module",
6
+ "bin": {
7
+ "app-growth-design": "bin/install.mjs"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "skill",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "install-skill": "node bin/install.mjs"
17
+ },
18
+ "keywords": [
19
+ "claude",
20
+ "claude-code",
21
+ "claude-skill",
22
+ "agent-skill",
23
+ "ai-agent",
24
+ "app-growth",
25
+ "onboarding",
26
+ "paywall",
27
+ "pricing",
28
+ "retention",
29
+ "gamification",
30
+ "product-design",
31
+ "ux"
32
+ ],
33
+ "author": "bixxter",
34
+ "license": "MIT",
35
+ "homepage": "https://github.com/bixxter/app-growth-design#readme",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/bixxter/app-growth-design.git"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/bixxter/app-growth-design/issues"
42
+ },
43
+ "engines": {
44
+ "node": ">=18"
45
+ }
46
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: app-growth-design
3
+ description: Use when designing or auditing app onboarding and activation flows, paywalls and free-trial structure, subscription pricing and plan packaging, retention and gamification mechanics (streaks, leaderboards, badges, reward ceremonies), share and referral loops, landing-page conversion, screen-level UI/UX craft, or when positioning an app against an incumbent and planning app growth — routes to a distilled knowledge base of 30 Tim Gabe app teardowns with named case studies and source-marked rules.
4
+ ---
5
+
6
+ # App Growth & Design Playbook
7
+
8
+ ## What this is
9
+
10
+ A knowledge base distilled from the 30 most recent videos on **Tim Gabe's YouTube channel**
11
+ (https://www.youtube.com/@TimGabe), covering app psychology, onboarding, paywalls and pricing,
12
+ retention and gamification, growth and positioning, and design craft. The six thematic playbooks in
13
+ `references/` hold the depth; the `[NN]` markers throughout resolve against the **Source index** at
14
+ the bottom of this file, which links each number back to the original video.
15
+
16
+ **This is one practitioner's opinionated view, not settled fact.** Almost every mechanic in the corpus
17
+ is asserted from survivorship-selected case studies, not measured — there are essentially no
18
+ before/after deltas attributable to a specific mechanic. Prefer cases that carry real numbers, and
19
+ present the rest as hypotheses to test. Each reference file ends with **Anti-patterns**,
20
+ **Contradictions** and **Caveats** sections: read them before advising, because the corpus contradicts
21
+ itself in several load-bearing places (short vs. long onboarding, friction removal vs. friction as
22
+ amplifier, design-as-moat vs. design-is-not-the-moat).
23
+
24
+ **Agency promos are flagged.** Tim runs a design agency (Zipsa / Zipzap) and pitches "free design
25
+ strategy calls" 2–4 times per video; several case studies (Freecash, Game Blazers, SolCard, Spark) are
26
+ his own unaudited client work. The playbooks mark those segments as promotional. Use the mechanics,
27
+ never the implied results.
28
+
29
+ ## How to use
30
+
31
+ Route by the situation, then cite the `[NN]` source marker back to the video it came from.
32
+
33
+ | The user is working on… | Read |
34
+ |---|---|
35
+ | First-run flow, permission screens, quiz-vs-short-flow decision, time-to-value, aha moment, activation | `references/onboarding-activation.md` |
36
+ | Paywall layout, trial structure, plan count and duration, price tiers, coin/credit economies, converting existing free users | `references/monetization-paywalls.md` |
37
+ | Streaks, leaderboards, badges, challenges, reward ceremonies, habit loops, churn, done-states | `references/retention-gamification.md` |
38
+ | *Why* users behave this way — identity, dopamine, loss aversion, social proof, sunk cost — plus ethical and regulatory exposure | `references/behavioral-psychology.md` |
39
+ | Screen-level craft: type scale, spacing, color budget, motion, microcopy, emotional feedback, design review | `references/design-craft.md` |
40
+ | Positioning against an incumbent, moat selection, growth loops, share artifacts, landing pages, AI/agent disruption | `references/growth-marketing.md` |
41
+ | Finding a citable example fast | **Case index** below → then the named reference file |
42
+
43
+ Most questions touch two files (e.g. onboarding + monetization for session-zero conversion). Read both
44
+ rather than guessing across the gap.
45
+
46
+ ## Highest-leverage rules
47
+
48
+ The rules across the whole corpus most likely to change a founder's decision.
49
+
50
+ 1. **Diagnose the layer before optimizing it.** 57.7% of new apps never cross $1,000 in revenue; below
51
+ the top decile "this isn't a monetization problem" — it's distribution or product. Paywall tactics
52
+ that work at the 95th percentile don't apply at the 40th. `[06]`
53
+ 2. **Optimize time-to-tangible-value, not screen count.** Granola ships value in 2 screens ($1.5B);
54
+ Cal AI runs a 20+ step quiz ($35M year one); Noom runs 113 screens ($3.7B). Length is only justified
55
+ if it buys (a) personalization that is *visible on the first post-onboarding screen*, or (b) a buyer
56
+ filter. If it buys neither, it is tax and it shows up in D3. `[05]`
57
+ 3. **Trust, not brevity, is the binding constraint in session zero.** 82–89% of trial starts happen on
58
+ install day and never recover after day 7 — which is why a 28-screen flow can beat a 3-screen one.
59
+ Top-decile apps' edge is at *trial start* (20.3% vs 6.2% median), not trial→paid. `[06]`
60
+ 4. **Commitment size beats total cost.** Weekly plans convert **1.7–7.4x better than annual at every
61
+ price tier**, despite being a far worse deal. Annual revenue is deferred, not lost. `[06]`
62
+ 5. **Structure out-tests price, always.** Ranked LTV uplift: locale 62.3% > trial structure 59.6% >
63
+ plan duration 58.7% > plan count 57.1% > price 45.5% > visuals 34.6%. Adding a free trial to a weekly
64
+ plan took 12-month LTV from $7.40 to $54.50 (**+636%**) — no price test does that. `[06]`
65
+ 6. **Transparency is a conversion mechanism, not a softness tax.** Blinkist added one "how your free
66
+ trial works" timeline with an absolute charge date and tap-by-tap cancel steps: **+23% conversion,
67
+ −55% complaints, zero churn change.** `[06]` `[23]`
68
+ 7. **Repackage before you rebuild.** Every lift in the SaaS-tricks corpus came from copy, packaging or
69
+ visibility — no new features, no price changes: Mobbin +35% free-to-paid from stamping PRO labels on
70
+ already-locked content; Moonly +39% from removing the trial from the monthly plan. `[23]`
71
+ 8. **Fire the ask at the emotional peak, never at a session boundary.** ReelShort paywalls the
72
+ cliffhanger so paying reads as *relief*; Starcrossed paywalls immediately before the reveal. The
73
+ common failure is showing paywalls and tutorials while users are confused. `[08]` `[01]` `[15]`
74
+ 9. **Deliver rewards as gifts, not receipts.** Anticipation → weighted reveal → afterglow. Most apps
75
+ ship stage two only. N results delivered at once = one dopamine event; revealed one at a time = N.
76
+ Spotify Wrapped hit 200M users in 24 hours because it is a ceremony, not a report. `[10]`
77
+ 10. **A leaderboard is a surface; social comparison is the engine.** Diagnostic: does a user leave
78
+ believing a *specific named person* is beating them? Winnability predicts motivation — localize the
79
+ cohort (Strava segments, ~5–12 visible rivals) instead of adding rows to a global board. `[03]` `[07]`
80
+ 11. **Points, badges and leaderboards are the scoreboard, not the game.** A 35-intervention
81
+ meta-analysis: gamification lifts autonomy (g=0.638) and relatedness (g=1.776) but barely touches
82
+ **competence** (g=0.277) — the need tied to long-term motivation. And depth is non-monotonic: if
83
+ you're running streaks + points + badges + challenges + leaderboards at once you are past the peak,
84
+ and the fix is cutting. LinkedIn, Foursquare and Google News all retreated from badges. `[07]`
85
+ 12. **Identity is the only retention nobody churns out of.** Build Mirror → Label → Flex; ship one
86
+ identity metric computed from data users can't get elsewhere (Whoop Age). The exit question:
87
+ *if a user left today, what would they have to rebuild from scratch?* "Nothing much" = no moat.
88
+ `[01]` `[11]` `[13]`
89
+ 13. **Design the share artifact, not the share button — and sequence attachment before virality.**
90
+ Fuse share with invite at a **1-friend** threshold (Airbuds), pre-render for the destination
91
+ (Duolingo's square card), make it travel as plain text (Wordle). A referral program bolted onto a
92
+ product with no flex "does zero." `[01]` `[17]`
93
+ 14. **Count exit ramps, not screens — but friction has a sweet spot, not a floor.** Netflix's mobile
94
+ flow has ≥6 decision points before playback; ReelShort's player has none (35.7 vs 24.8 min/day).
95
+ Yet too little friction and users are never guided to value. Remove unnecessary UI; don't bury
96
+ controls four levels deep. `[08]` `[16]` `[15]`
97
+ 15. **Craft is arithmetic before it is taste.** Grade screens on copywriting → visuals → colors → fonts
98
+ → spacing. Seniors use ~4 font sizes / 2 weights, spacing divisible by 8, a 60/30/10
99
+ neutral/complementary/brand color budget, outer radius = inner radius + padding, and exactly one
100
+ saturated CTA (18,000+ landing pages: 1 CTA 13.5%, 2 CTAs 11.9%, 3 CTAs 10.5%). `[30]` `[12]` `[27]`
101
+
102
+ Two cross-cutting cautions: **shame is a retention mechanic that poisons your data** (MacroFactor's
103
+ no-streak, no-red-alert design is a data-quality argument, not a kindness one) `[02]`, and several
104
+ mechanics here carry live legal exposure — Robinhood paid $7.5M over trade confetti, Nevada sued
105
+ Snapchat over streaks, and the EU Digital Fairness Act draft names streaks and infinite scroll
106
+ explicitly `[07]` `[10]`.
107
+
108
+ ## Case index
109
+
110
+ | Product | Exemplifies | Notes |
111
+ |---|---|---|
112
+ | Cal AI | Long personalization quiz that earns its length; camera-as-homepage; 3 dedicated trial screens | `[05]` `[06]` `[02]` |
113
+ | Granola | The 2-screen pole: permission-only onboarding, value inside an already-scheduled meeting | `[05]` |
114
+ | Noom | 113-screen progressive commitment before the paywall | `[05]` |
115
+ | Blinkist | The honest trial paywall (timeline, absolute date, cancel steps) | `[06]` `[23]` |
116
+ | Mobbin / Moonly / Headspace / Busuu / Slopes | Packaging-only conversion lifts with no product or price change | `[23]` |
117
+ | Yazio / Lose It! | Structure-first paywalls; outcome promise above the plan grid | `[06]` |
118
+ | Uber | Certainty effect (single price beats a range); the reference *ending* design | `[23]` `[19]` |
119
+ | ReelShort | Graduated gate (attention → effort → money); chromeless player; anti-calculator pricing (dark pattern) | `[08]` |
120
+ | Tinder | Aha in <60s; double-blind matching removes emotional risk; contextual upsells after attachment | `[21]` |
121
+ | Netflix | Skip Intro, 1,300 micro-genres, "97% Match"; also the exit-ramp counter-example | `[16]` `[08]` |
122
+ | Spotify Wrapped / Discover Weekly | Gated data as ceremony; Trojan Horse — complex tech in a familiar container | `[10]` `[17]` |
123
+ | Strava | Hyper-local segment cohorts, kudos, feed of *other people*; identity moat | `[03]` `[07]` `[09]` `[11]` |
124
+ | Peloton | Live leaderboard + name callouts; uncapped milestone wall with visible unearned rungs | `[03]` `[07]` `[09]` |
125
+ | Duolingo | Emotional feedback layer, streak wrapped in agency, pre-rendered share card | `[26]` `[07]` `[10]` |
126
+ | Freecash / Game Blazers | Accumulating-asset streaks; case-spinner and pack-opening ceremonies *(agency clients — no independent data)* | `[09]` `[14]` `[10]` |
127
+ | Finch | Nested variable-ratio rewards that never resolve | `[09]` |
128
+ | Habitica | The over-gamification failure case (overload zone) | `[07]` |
129
+ | LinkedIn / Foursquare / Google News | Three platform retreats from points-badges-leaderboards | `[07]` |
130
+ | Snapchat streaks / Robinhood confetti | Potency vs. regulatory exposure | `[07]` `[10]` |
131
+ | Whoop | The identity metric (Whoop Age, weekly Pace of Aging) | `[11]` |
132
+ | Oura / Midjourney / Ramp vs Brex | Accumulating per-user intelligence as the moat; the exit question | `[13]` |
133
+ | MacroFactor | No-shame design as a data-quality moat | `[02]` |
134
+ | Tiimo | Niche depth by changing the interface's *shape*, not its theme | `[02]` |
135
+ | Ladder | Cohort calendar; the acquire-mechanic vs retain-mechanic split | `[02]` |
136
+ | Carrot Weather / Day One / Forest | Indie beats incumbent by conceding the commodity layer and winning the envelope | `[04]` |
137
+ | Raycast | Distribution as a design problem; the feature-unlocks-feature growth loop | `[28]` |
138
+ | Starcrossed / 16 Personalities / Airbuds / Wordle | The identity stack: Mirror → Label → Flex | `[01]` |
139
+ | Apple | Habit training with no tutorial; ceremony engineered into packaging | `[18]` `[10]` |
140
+ | Ahead | Peak–end done without guilt mechanics; the self-constructing personalized brief | `[19]` |
141
+ | Phantom / Revolut | Polish as a trust signal in intimidating categories; price and perceived quality track together | `[26]` |
142
+ | Intercom Fin / Dia | Outcome pricing (per resolved ticket); invisible UI and outcome-verb navigation | `[20]` |
143
+ | Kraftful / Unbounce | One-CTA landing pages; proof placed where hesitation happens | `[27]` |
144
+ | Discord / Stompers | Ambient social proof; Zeigarnik open loops as the whole screen | `[24]` |
145
+
146
+ ## Reference files
147
+
148
+ - `references/behavioral-psychology.md` — 20 principles + 11 playbooks on the "why humans do this" layer: effort justification, dopamine anticipation, variable reward, identity, social comparison, loss aversion, peak–end, plus the ethical and regulatory limits.
149
+ - `references/onboarding-activation.md` — first-run shapes (Granola vs Cal AI vs Noom), the two-justification test for length, permission-screen patterns, quiz templates, aha-moment design, and where the corpus contradicts itself on brevity.
150
+ - `references/monetization-paywalls.md` — paywall audit order, trial-structure playbooks, weekly-vs-annual commitment data, plan-structure decoys, graduated gates for non-subscription products, and experimentation cadence.
151
+ - `references/retention-gamification.md` — streaks, leaderboards, cohort sizing, competence feedback, reward ceremonies, done-state audits, community architecture, and the over-gamification overload zone.
152
+ - `references/growth-marketing.md` — distribution-as-design, positioning against incumbents, the five moats, agent-era disruption audit, share/flex loops, and landing-page conversion rebuilds.
153
+ - `references/design-craft.md` — the countable craft checklist (type, spacing, color, radii), the subtraction pass, motion and emotional feedback, microcopy repair, and the five-criterion screen audit.
154
+
155
+ ## Source index
156
+
157
+ Every `[NN]` marker in this file and in `references/` points here. All credit to Tim Gabe.
158
+
159
+ - `[01]` The Twisted Psychology Behind Top 1% Apps — https://www.youtube.com/watch?v=nQKWYmrixCU
160
+ - `[02]` The Weird Design Playbook of 6 App Outliers — https://www.youtube.com/watch?v=HA4yB_sd62Q
161
+ - `[03]` Why Leaderboards Kill App Retention (How To Fix It) — https://www.youtube.com/watch?v=BxhsCu9hNpY
162
+ - `[04]` How Top 1% Indie Apps Beats Giants — https://www.youtube.com/watch?v=MAvKHToGiVY
163
+ - `[05]` How To Solve The App Onboarding Paradox — https://www.youtube.com/watch?v=Aa89MC8jX2c
164
+ - `[06]` I Studied 10,000 Paywall Screens (THIS Makes People Pay) — https://www.youtube.com/watch?v=sYRhXB_ZcLI
165
+ - `[07]` I Studied 500+ Gamified Apps (Here's What Actually Works) — https://www.youtube.com/watch?v=LXX_qOA5D8E
166
+ - `[08]` How a Chinese Unicorn App Out-Addicts Netflix — https://www.youtube.com/watch?v=7dCZrtH15zc
167
+ - `[09]` How To Scientifically Design Addictive Apps — https://www.youtube.com/watch?v=yBpv5rZoBjA
168
+ - `[10]` The 3-Stage Trick Behind Every Addictive App — https://www.youtube.com/watch?v=uoLpH_20qKw
169
+ - `[11]` Why Most SaaS Companies Will Die in 2026 — https://www.youtube.com/watch?v=ZXWUg1e1PAs
170
+ - `[12]` Our World Class App Design Formula — https://www.youtube.com/watch?v=wmTkiF23GRQ
171
+ - `[13]` The New Way Apps Dominate in 2026 — https://www.youtube.com/watch?v=yYs7iv81Ppk
172
+ - `[14]` How Addictive Apps Are Made — https://www.youtube.com/watch?v=AnL49w4yIOw
173
+ - `[15]` Give Me 13 Minutes & I'll Grow Your App — https://www.youtube.com/watch?v=v1f9iYZ2GhQ
174
+ - `[16]` How Netflix Made Us All Binge (Design Breakdown) — https://www.youtube.com/watch?v=hIm3d3JAsPw
175
+ - `[17]` Viral Design Tricks from Spotify (Founder Playbook) — https://www.youtube.com/watch?v=Tpg0pxKHrCA
176
+ - `[18]` What Founders Can Learn From Apple's Design Domination — https://www.youtube.com/watch?v=doiaMtD80p8
177
+ - `[19]` The Tiny Design Rule Behind Top 1% Apps — https://www.youtube.com/watch?v=11h4H3TAGkM
178
+ - `[20]` The Future of App Design is Invisible — https://www.youtube.com/watch?v=zRUoPIwCxfw
179
+ - `[21]` How Tinder's Design Hacked Society — https://www.youtube.com/watch?v=4yKtlOWClhA
180
+ - `[22]` The Hidden App Growth Killer (How To Avoid It) — https://www.youtube.com/watch?v=55hDj88zKa8
181
+ - `[23]` Copy These SaaS Growth Tricks (It'll Blow Up Your Business) — https://www.youtube.com/watch?v=puldme__Ckk
182
+ - `[24]` How Top 1% Apps Keep You Hooked — https://www.youtube.com/watch?v=D9SXaj6qQIQ
183
+ - `[25]` Do Companies Really Need Designers Anymore? — https://www.youtube.com/watch?v=bOm9GDv96Tk
184
+ - `[26]` The Secret Behind Weirdly Addictive Apps — https://www.youtube.com/watch?v=Du2lkZ_cux8
185
+ - `[27]` Give Me 10 Minutes & I'll Boost Your Website Conversions — https://www.youtube.com/watch?v=TIfiy1fodDs
186
+ - `[28]` How Raycast Reached a $100M+ Valuation (As a Small Startup) — https://www.youtube.com/watch?v=eWGNjTLK84c
187
+ - `[29]` 5 Tools I Wish I Found Sooner (For Designers) — https://www.youtube.com/watch?v=qmJVN2158Mk
188
+ - `[30]` 4 levels of UI/UX design (and BIG mistakes to avoid) — https://www.youtube.com/watch?v=86PGRyQjdzQ