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 +21 -0
- package/README.md +146 -0
- package/bin/install.mjs +140 -0
- package/package.json +46 -0
- package/skill/SKILL.md +188 -0
- package/skill/references/behavioral-psychology.md +644 -0
- package/skill/references/design-craft.md +390 -0
- package/skill/references/growth-marketing.md +678 -0
- package/skill/references/monetization-paywalls.md +285 -0
- package/skill/references/onboarding-activation.md +363 -0
- package/skill/references/retention-gamification.md +451 -0
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.
|
package/bin/install.mjs
ADDED
|
@@ -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
|