@leejungkiin/awkit 1.1.4 → 1.1.7

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 (48) hide show
  1. package/README.md +15 -0
  2. package/VERSION +1 -1
  3. package/bin/awk.js +21 -55
  4. package/core/GEMINI.md +45 -7
  5. package/package.json +2 -2
  6. package/skills/CATALOG.md +11 -3
  7. package/skills/ab-test-store-listing/SKILL.md +220 -0
  8. package/skills/android-aso/SKILL.md +197 -0
  9. package/skills/app-analytics/SKILL.md +210 -0
  10. package/skills/app-clips/SKILL.md +163 -0
  11. package/skills/app-icon-optimization/SKILL.md +170 -0
  12. package/skills/app-launch/SKILL.md +153 -0
  13. package/skills/app-marketing-context/SKILL.md +129 -0
  14. package/skills/app-store-featured/SKILL.md +213 -0
  15. package/skills/apple-search-ads/SKILL.md +205 -0
  16. package/skills/asc-metrics/SKILL.md +157 -0
  17. package/skills/aso-audit/SKILL.md +179 -0
  18. package/skills/code-review/SKILL.md +125 -0
  19. package/skills/codex-conductor/SKILL.md +337 -0
  20. package/skills/competitor-analysis/SKILL.md +163 -0
  21. package/skills/competitor-tracking/SKILL.md +185 -0
  22. package/skills/crash-analytics/SKILL.md +181 -0
  23. package/skills/in-app-events/SKILL.md +176 -0
  24. package/skills/keyword-research/SKILL.md +141 -0
  25. package/skills/localization/SKILL.md +165 -0
  26. package/skills/market-movers/SKILL.md +137 -0
  27. package/skills/market-pulse/SKILL.md +170 -0
  28. package/skills/metadata-optimization/SKILL.md +170 -0
  29. package/skills/monetization-strategy/SKILL.md +175 -0
  30. package/skills/onboarding-optimization/SKILL.md +194 -0
  31. package/skills/orchestrator/SKILL.md +297 -25
  32. package/skills/press-and-pr/SKILL.md +204 -0
  33. package/skills/rating-prompt-strategy/SKILL.md +184 -0
  34. package/skills/retention-optimization/SKILL.md +165 -0
  35. package/skills/review-management/SKILL.md +154 -0
  36. package/skills/screenshot-optimization/SKILL.md +167 -0
  37. package/skills/seasonal-aso/SKILL.md +141 -0
  38. package/skills/spec-gate/SKILL.md +312 -0
  39. package/skills/subscription-lifecycle/SKILL.md +206 -0
  40. package/skills/swiftui-pro/references/design.md +44 -0
  41. package/skills/symphony-enforcer/SKILL.md +101 -9
  42. package/skills/systematic-debugging/SKILL.md +199 -0
  43. package/skills/ua-campaign/SKILL.md +207 -0
  44. package/skills/verification-gate/SKILL.md +151 -0
  45. package/skills/writing-skills/SKILL.md +110 -0
  46. package/workflows/conductor-codex.md +125 -0
  47. package/workflows/lifecycle/code.md +28 -1
  48. package/workflows/lifecycle/debug.md +34 -14
@@ -29,3 +29,47 @@ Prefer to place standard fonts, sizes, colors, stack spacing, padding, rounding,
29
29
  - Avoid hard-coded values for padding and stack spacing unless specifically requested.
30
30
  - Avoid UIKit colors (`UIColor`) in SwiftUI code; use SwiftUI `Color` or asset catalog colors.
31
31
  - The font size `.caption2` is extremely small, and is generally best avoided. Even the font size `.caption` is on the small side, and should be used carefully.
32
+
33
+
34
+ ## Dark Mode Color Safety Rules
35
+
36
+ These rules prevent common dark mode bugs that are invisible in light mode development.
37
+
38
+ ### 1. Never use hardcoded `Color.white` or `Color.black` for backgrounds or fills
39
+ - **Bad**: `.fill(Color.white)`, `.background(Color.black)`
40
+ - **Good**: `.fill(ColorPalette.darkCard)`, `.background(ColorPalette.backgroundPrimary)`
41
+ - **Exception**: White/black on a NON-adaptive surface (e.g., white icon on a camera viewfinder that is always dark, or text on a green gradient button where the gradient is the same in both modes).
42
+
43
+ ### 2. Never pair `.foregroundColor(.white)` with an adaptive fill
44
+ - If a button uses an adaptive fill like `ColorPalette.textPrimary` (which flips between dark/light), the text MUST also use an adaptive color that provides contrast in BOTH modes.
45
+ - **Bad**: `.fill(ColorPalette.textPrimary)` + `.foregroundColor(.white)` — in dark mode, textPrimary ≈ #EDEDED and .white = #FFFFFF → invisible text!
46
+ - **Good**: `.fill(ColorPalette.textPrimary)` + `.foregroundColor(ColorPalette.backgroundPrimary)` — backgroundPrimary is always the opposite of textPrimary.
47
+ - **Rule of thumb**: If fill is adaptive, text color MUST be its inverse adaptive token.
48
+
49
+ ### 3. Static background images (PNG/JPG) don't adapt to dark mode
50
+ - Background images with light themes (e.g., food illustrations on white/cream) will always render light, breaking dark mode.
51
+ - **Fix options**:
52
+ - Provide dark variants in the Asset catalog and use `@Environment(\.colorScheme)` to switch.
53
+ - Reduce opacity in dark mode: `.opacity(colorScheme == .dark ? 0.08 : 1.0)`.
54
+ - Apply a dark overlay or color multiply blend.
55
+ - **Exception**: Screenshot/mockup images displayed inside a dark phone frame (the frame provides context).
56
+
57
+ ### 4. Always verify contrast between text and its immediate background
58
+ - When reading code, mentally resolve what every color token becomes in BOTH modes.
59
+ - Common trap: Card background = `#272727` (dark gray in dark mode), button fill = `#EDEDED` (light in dark mode), text on button = `.white` → barely visible.
60
+ - **Paired tokens for high contrast**:
61
+ - Fill: `textPrimary` ↔ Text: `backgroundPrimary`
62
+ - Fill: `darkCard` ↔ Text: `textPrimary`
63
+ - Fill: `primaryGreen` ↔ Text: `.white` (green is always green)
64
+
65
+ ### 5. Shadow colors must be adaptive
66
+ - **Bad**: `.shadow(color: Color.black.opacity(0.1), ...)`
67
+ - **Good**: `.shadow(color: ColorPalette.shadowLight, ...)` or `.shadow(color: ColorPalette.textPrimary.opacity(0.08), ...)`
68
+ - In dark mode, black shadows on dark backgrounds are invisible; use lighter shadow tokens or skip shadows entirely.
69
+
70
+ ### 6. Quick dark mode audit checklist
71
+ When writing or reviewing any SwiftUI view:
72
+ 1. `grep -n 'Color\.white\|Color\.black\|\.white\b' FileName.swift` — find all hardcoded colors.
73
+ 2. For each hit, ask: "Does this element sit on an adaptive background?" If yes → replace with adaptive token.
74
+ 3. Check all `Image("asset_name")` — are any light-themed images used as backgrounds? If yes → add dark mode handling.
75
+ 4. For every button: verify fill color + text color provide 4.5:1 contrast ratio in BOTH modes.
@@ -4,10 +4,10 @@ description: |
4
4
  Mandatory Symphony checkpoint system. Ensures AI never forgets to create,
5
5
  update, or complete tasks in Symphony. Enforces progress reporting at every
6
6
  milestone and auto-detects task completion without waiting for user confirmation.
7
- v3.1: Pre-Plan Gate, Auto-Lifecycle, Auto-Next, Atomic Git Commits.
7
+ v3.3: Completion Status Protocol, Search-Before-Building, Boil-the-Lake.
8
8
  metadata:
9
9
  stage: core
10
- version: "3.1"
10
+ version: "3.3"
11
11
  replaces: "v2.0"
12
12
  requires: symphony-orchestrator
13
13
  tags: [symphony, enforcement, checkpoint, task-lifecycle, core, spec-first, auto-next]
@@ -24,14 +24,16 @@ invocation-type: auto
24
24
  priority: 1
25
25
  ---
26
26
 
27
- # Symphony Enforcer v3.1Spec-First + Auto-Lifecycle + Auto-Next + Atomic Commits
27
+ # Symphony Enforcer v3.3Completion Status Protocol + Gstack Principles
28
28
 
29
29
  > **Purpose:** Đảm bảo AI KHÔNG BAO GIỜ quên cập nhật Symphony.
30
- > **Key Changes v3.1:**
30
+ > **Key Changes v3.3:**
31
+ > - **Completion Status Protocol**: 4-status (DONE/DONE_WITH_CONCERNS/BLOCKED/NEEDS_CONTEXT)
32
+ > - **Design Compliance (TP1.5)**: Đối chiếu schema changes vs approved design doc
31
33
  > - **Pre-Plan Gate**: Đọc spec trước khi plan, hỏi user về constraints
32
34
  > - **Auto-Lifecycle**: Liên kết task_boundary ↔ Symphony tự động
33
35
  > - **Auto-Next**: BẮT BUỘC gợi ý next steps sau mỗi task done
34
- > - **Atomic Git Commits**: Tự động commit sau mỗi task done (NEW v3.1)
36
+ > - **Atomic Git Commits**: Tự động commit sau mỗi task done
35
37
  > **Principle:** AI tự detect completion — user KHÔNG CẦN nói "xong".
36
38
 
37
39
  ---
@@ -168,7 +170,48 @@ symphony_report_progress(
168
170
 
169
171
  ---
170
172
 
171
- ### TP2: Task CompleteAuto-detect
173
+ ### TP1.5: Design Compliance Check (NEW v3.2 Gate 4 Enforcement)
174
+
175
+ **Khi nào:** Mỗi khi AI sửa file liên quan đến DB/Model/Schema trong EXECUTION mode.
176
+
177
+ **Trigger signals:**
178
+ ```
179
+ File patterns:
180
+ - **/models/**, **/entities/**, **/schemas/**
181
+ - **Migration*, **Schema*, **Model*
182
+ - *.entity.*, *.model.*, *.schema.*
183
+ - Database.swift, AppDatabase.swift, schema.prisma, etc.
184
+ ```
185
+
186
+ **Action:**
187
+ ```
188
+ 1. Kiểm tra: docs/architecture/<feature>_design.md tồn tại?
189
+ → KHÔNG → ⚠️ Warning: "Đang sửa model file nhưng chưa có approved design.
190
+ Recommend chạy spec-gate trước."
191
+ → Nếu COMPLEX task → ⛔ DỪNG, enforce Gate 2
192
+ → Nếu TRIVIAL/MODERATE → Warning only, tiếp tục
193
+
194
+ 2. Đối chiếu thay đổi vs approved design:
195
+ → Thêm field KHÔNG có trong design? → ⛔ DỪNG
196
+ → Đổi type khác design? → ⛔ DỪNG
197
+ → Xóa field trong design? → ⛔ DỪNG
198
+ → Thêm field CÓ trong design? → ✅ OK
199
+
200
+ 3. Khi DỪNG:
201
+ → Thông báo: "Schema change ngoài approved design detected.
202
+ [field_name] không có trong docs/architecture/<feature>_design.md.
203
+ Quay lại Gate 2 để update design trước nhé."
204
+ → Kích hoạt spec-gate skill để update design doc
205
+ → Sau khi re-approve → tiếp tục code
206
+ ```
207
+
208
+ **Enforcement:**
209
+ - ❌ KHÔNG tự ý thêm cột/bảng ngoài approved design cho COMPLEX tasks
210
+ - ✅ NÊN ghi lại mọi deviation attempt vào NeuralMemory cho future reference
211
+
212
+ ---
213
+
214
+ ### TP2: Task Complete — Completion Status Protocol
172
215
 
173
216
  **Khi nào:** AI detect ≥2/4 completion signals:
174
217
 
@@ -179,13 +222,62 @@ Signal 3: Tất cả checklist items trong task.md đã [x]
179
222
  Signal 4: Verification pass (tests OK, build OK)
180
223
  ```
181
224
 
182
- **Action:**
225
+ **Completion Status Protocol (4 statuses):**
226
+
227
+ ```
228
+ DONE:
229
+ Điều kiện: Verification pass, không caveats.
230
+ Action: symphony_complete_task với evidence.
231
+ Format: "✅ DONE — {summary}. Build: ✅. Tests: ✅ N/N."
232
+
233
+ DONE_WITH_CONCERNS:
234
+ Điều kiện: Code hoạt động nhưng có caveats/risks cần biết.
235
+ Action: Complete task NHƯNG ghi rõ concerns.
236
+ Format: "⚠️ DONE_WITH_CONCERNS — {summary}.
237
+ Concerns: [list cụ thể]
238
+ Risk: [mức độ ảnh hưởng]
239
+ Recommendation: [đề xuất xử lý]"
240
+ Ví dụ: "Feature works nhưng chưa handle offline mode."
241
+ Ví dụ: "API call thành công nhưng chưa có retry logic."
242
+
243
+ BLOCKED:
244
+ Điều kiện: Không thể tiếp tục vì external dependency/blocker.
245
+ Action: KHÔNG complete task. Report + list attempts.
246
+ Format: "🚫 BLOCKED — {reason}.
247
+ Attempted: [list things đã thử]
248
+ Needs: [what's needed to unblock]"
249
+ Ví dụ: "API endpoint return 500, đã retry 3 lần."
250
+
251
+ NEEDS_CONTEXT:
252
+ Điều kiện: Thiếu thông tin từ user để tiếp tục.
253
+ Action: KHÔNG complete task. Hỏi user cụ thể.
254
+ Format: "❓ NEEDS_CONTEXT — {what's missing}.
255
+ Question: [câu hỏi cụ thể]
256
+ Options: [list options nếu có]"
257
+ Ví dụ: "Cần user clarify: offline-first hay online-only?"
258
+ ```
259
+
260
+ ⛔ **KHÔNG BAO GIỜ report DONE nếu thực tế là DONE_WITH_CONCERNS hoặc BLOCKED.**
261
+
262
+ **Action (cho DONE status):**
183
263
  ```
264
+ 0. ⚡ VERIFICATION GATE (BẮT BUỘC — Iron Law):
265
+ - IDENTIFY: What command proves this task is done?
266
+ - RUN: Execute verification (build, test, lint)
267
+ - READ: Full output, check exit code
268
+ - VERIFY: Does output confirm completion?
269
+ - If NO → FIX trước, KHÔNG complete task
270
+ - If YES → Proceed with evidence
271
+ ⛔ Skip verification = VI PHẠM (xem verification-gate skill)
272
+
184
273
  1. symphony_complete_task(
185
274
  task_id=current_task,
186
- summary="mô tả ngắn kết quả"
275
+ summary="mô tả ngắn + STATUS + VERIFICATION EVIDENCE"
276
+ // ✅ "DONE — Implemented X. Build: ✅ exit 0. Tests: ✅ 47/47."
277
+ // ✅ "DONE_WITH_CONCERNS — Implemented X. Build: ✅. Concerns: no offline support."
278
+ // ❌ "Implemented X" (không status, không evidence)
187
279
  )
188
- 2. Hiển thị: "✅ SYM #sym-XYZ — Done"
280
+ 2. Hiển thị: "✅ SYM #sym-XYZ — {STATUS}"
189
281
  3. → TRIGGER TP2.5 (Atomic Git Commit)
190
282
  4. → TRIGGER TP4 (Auto-Next) NGAY LẬP TỨC
191
283
  ```
@@ -0,0 +1,199 @@
1
+ ---
2
+ name: systematic-debugging
3
+ description: Use for ANY technical issue - bugs, test failures, build errors, crashes. Enforces 4-phase root cause process before any fix attempts. Auto-triggers on /debug, error detection, test failures.
4
+ ---
5
+
6
+ # Systematic Debugging
7
+
8
+ ## Overview
9
+
10
+ Random fixes waste time and create new bugs. Quick patches mask underlying issues.
11
+
12
+ **Core principle:** ALWAYS find root cause before attempting fixes. Symptom fixes are failure.
13
+
14
+ ## The Iron Law
15
+
16
+ ```
17
+ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
18
+ ```
19
+
20
+ If you haven't completed Phase 1, you CANNOT propose fixes.
21
+
22
+ ## When to Use
23
+
24
+ Use for ANY technical issue:
25
+ - Test failures
26
+ - Runtime crashes / EXC_BAD_ACCESS / ANR
27
+ - Unexpected behavior
28
+ - Performance problems
29
+ - Build failures (Xcode, Gradle, npm)
30
+ - Integration issues (API, SDK, Firebase)
31
+
32
+ **Use this ESPECIALLY when:**
33
+ - Under time pressure (emergencies make guessing tempting)
34
+ - "Just one quick fix" seems obvious
35
+ - You've already tried multiple fixes
36
+ - Previous fix didn't work
37
+ - You don't fully understand the issue
38
+
39
+ ## The Four Phases
40
+
41
+ You MUST complete each phase before proceeding to the next.
42
+
43
+ ### Phase 1: Root Cause Investigation (BEFORE ANY FIX)
44
+
45
+ 1. **Read Error Messages Carefully**
46
+ - Don't skip past errors or warnings
47
+ - Read stack traces COMPLETELY — they often contain the exact answer
48
+ - Note line numbers, file paths, error codes
49
+ - For iOS: read the full crash log, not just the top frame
50
+ - For Android: read logcat with proper filters
51
+
52
+ 2. **Reproduce Consistently**
53
+ - Can you trigger it reliably? What are the exact steps?
54
+ - If not reproducible → gather more data, DON'T guess
55
+ - For intermittent: add diagnostic logging at component boundaries
56
+
57
+ 3. **Check Recent Changes**
58
+ - `git diff` — what changed?
59
+ - Recent commits, new dependencies, config changes
60
+ - Environmental differences (device, OS version, network)
61
+
62
+ 4. **Gather Evidence in Multi-Component Systems**
63
+ ```
64
+ For EACH component boundary:
65
+ - Log what data enters component
66
+ - Log what data exits component
67
+ - Verify environment/config propagation
68
+ - Check state at each layer
69
+
70
+ Run once to gather evidence showing WHERE it breaks
71
+ THEN analyze evidence to identify failing component
72
+ THEN investigate that specific component
73
+ ```
74
+
75
+ 5. **Trace Data Flow**
76
+ - Where does the bad value originate?
77
+ - What called this with the bad value?
78
+ - Keep tracing UP until you find the source
79
+ - **Fix at source, not at symptom**
80
+
81
+ ### Phase 2: Pattern Analysis
82
+
83
+ 1. **Find Working Examples** — Locate similar working code in same codebase
84
+ 2. **Compare Against References** — Read reference implementation COMPLETELY (don't skim)
85
+ 3. **Identify Differences** — List EVERY difference, however small
86
+ 4. **Understand Dependencies** — What components, settings, config does this need?
87
+
88
+ ### Phase 3: Hypothesis & Testing
89
+
90
+ 1. **Form Single Hypothesis** — "I think X is the root cause because Y"
91
+ 2. **Test Minimally** — SMALLEST possible change. One variable at a time
92
+ 3. **Verify Before Continuing** — Worked? → Phase 4. Didn't? → NEW hypothesis
93
+ 4. **When You Don't Know** — Say "I don't understand X". Don't pretend. Research more
94
+
95
+ ### Phase 4: Implementation
96
+
97
+ 1. **Create Failing Test Case** — Simplest possible reproduction. MUST have before fixing
98
+ 2. **Implement Single Fix** — ONE change at a time. No "while I'm here" improvements
99
+ 3. **Verify Fix** — Test passes? No other tests broken? Issue actually resolved?
100
+
101
+ ## The 3-Strike Escalation Protocol
102
+
103
+ ```
104
+ If 3+ fixes have FAILED → STOP. ESCALATE. NO EXCEPTIONS.
105
+
106
+ This is NOT a failed hypothesis.
107
+ This is a WRONG ARCHITECTURE.
108
+ ```
109
+
110
+ **Escalation Protocol (BẮT BUỘC sau 3 failed attempts):**
111
+
112
+ ```
113
+ 1. STOP — Không thử fix thứ 4.
114
+ 2. REPORT full context cho user:
115
+ 🚫 ESCALATION — 3 fix attempts failed
116
+ ─────────────────────────────────────
117
+ Attempt 1: {what tried} → {why failed}
118
+ Attempt 2: {what tried} → {why failed}
119
+ Attempt 3: {what tried} → {why failed}
120
+
121
+ Root Cause Hypothesis: {current best guess}
122
+ Architectural Concern: {pattern detected}
123
+
124
+ Recommended: [refactor approach | seek expert | alternative solution]
125
+ ─────────────────────────────────────
126
+ 3. WAIT for user decision — do NOT proceed autonomously.
127
+ ```
128
+
129
+ **Pattern indicating architectural problem:**
130
+ - Each fix reveals new shared state/coupling
131
+ - Fixes require "massive refactoring" to implement
132
+ - Each fix creates new symptoms elsewhere
133
+
134
+ ## Scope Freeze During Debug
135
+
136
+ ```
137
+ Khi đang debug một issue:
138
+ - KHÔNG sửa bug khác "tiện tay"
139
+ - KHÔNG refactor code xung quanh
140
+ - KHÔNG thêm feature "nhân tiện"
141
+ - CHỈ tập trung vào root cause hiện tại
142
+
143
+ Violation → revert side changes, focus on current scope
144
+ ```
145
+
146
+ ## Red Flags — STOP and Return to Phase 1
147
+
148
+ If you catch yourself thinking:
149
+ - "Quick fix for now, investigate later"
150
+ - "Just try changing X and see if it works"
151
+ - "It's probably X, let me fix that"
152
+ - "I don't fully understand but this might work"
153
+ - "Here are the main problems: [lists fixes without investigation]"
154
+ - Proposing solutions before tracing data flow
155
+ - **"One more fix attempt" (when already tried 2+)**
156
+ - **Each fix reveals new problem in different place**
157
+
158
+ **ALL of these mean: STOP. Return to Phase 1.**
159
+
160
+ ## Anti-Rationalization Table
161
+
162
+ | Excuse | Reality |
163
+ |--------|---------|
164
+ | "Issue is simple, don't need process" | Simple issues have root causes too. Process is fast for simple bugs |
165
+ | "Emergency, no time for process" | Systematic debugging is FASTER than guess-and-check |
166
+ | "Just try this first, then investigate" | First fix sets the pattern. Do it right from the start |
167
+ | "I'll write test after confirming fix" | Untested fixes don't stick. Test first proves it |
168
+ | "Multiple fixes at once saves time" | Can't isolate what worked. Causes new bugs |
169
+ | "I see the problem, let me fix it" | Seeing symptoms ≠ understanding root cause |
170
+ | "One more fix attempt" (after 2+) | 3+ failures = architectural problem. Question pattern |
171
+ | "Reference too long, I'll adapt" | Partial understanding guarantees bugs. Read completely |
172
+
173
+ ## Quick Reference
174
+
175
+ | Phase | Key Activities | Success Criteria |
176
+ |-------|---------------|------------------|
177
+ | **1. Root Cause** | Read errors, reproduce, check changes, gather evidence | Understand WHAT and WHY |
178
+ | **2. Pattern** | Find working examples, compare | Identify differences |
179
+ | **3. Hypothesis** | Form theory, test minimally | Confirmed or new hypothesis |
180
+ | **4. Implementation** | Create test, fix, verify | Bug resolved, tests pass |
181
+
182
+ ## NeuralMemory Integration
183
+
184
+ After fixing a bug:
185
+ 1. `nmem_remember` the root cause, fix, and pattern — tag with projectId
186
+ 2. Before debugging NEW bugs: `nmem_recall` for similar past issues
187
+ 3. Saves hours on recurring patterns
188
+
189
+ ## Integration
190
+
191
+ **Related skills:**
192
+ - **verification-gate** — Verify fix worked before claiming success
193
+ - **single-flow-task-execution** — For structured task execution
194
+ - **symphony-enforcer** — Report debug progress to Symphony
195
+
196
+ **Related workflows:**
197
+ - `/debug` — Primary trigger workflow
198
+ - `/bug-hunter` — Automated bug hunting
199
+ - `/hotfix` — Production emergency (still follows 4-phase!)
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: ua-campaign
3
+ description: When the user wants to plan or optimize paid user acquisition campaigns. Also use when the user mentions "Apple Search Ads", "user acquisition", "paid ads", "UA", "ad campaign", "install campaign", "Facebook ads for apps", "TikTok ads", or "cost per install". For organic growth, see aso-audit. For launch-specific UA, see app-launch.
4
+ metadata:
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # User Acquisition Campaigns
9
+
10
+ You are an expert in mobile app user acquisition across all major ad platforms. Your goal is to help the user plan, launch, and optimize paid campaigns that drive profitable installs.
11
+
12
+ ## Initial Assessment
13
+
14
+ 1. Check for `app-marketing-context.md` — read it for context
15
+ 2. Ask for **monthly UA budget** (this determines channel strategy)
16
+ 3. Ask for **target CPI** (cost per install) or **target ROAS**
17
+ 4. Ask for **current LTV** (lifetime value per user)
18
+ 5. Ask for **target audience** (demographics, interests, behaviors)
19
+ 6. Ask for **target countries**
20
+ 7. Ask for **app category** (affects channel selection)
21
+
22
+ ## Channel Selection
23
+
24
+ ### Budget-Based Recommendations
25
+
26
+ | Monthly Budget | Recommended Channels |
27
+ |---------------|---------------------|
28
+ | < $1K | Apple Search Ads (Basic) only |
29
+ | $1K-$5K | Apple Search Ads (Advanced) + 1 social channel |
30
+ | $5K-$20K | ASA + Meta + Google UAC |
31
+ | $20K-$100K | ASA + Meta + Google + TikTok + testing new channels |
32
+ | $100K+ | All channels + programmatic + influencer |
33
+
34
+ ### Channel Comparison
35
+
36
+ | Channel | Avg CPI | Intent | Best For | Complexity |
37
+ |---------|---------|--------|----------|------------|
38
+ | **Apple Search Ads** | $1-3 | Very High | All iOS apps | Low |
39
+ | **Google UAC** | $0.5-2 | Medium | Android + broad reach | Medium |
40
+ | **Meta (FB/IG)** | $1-4 | Low-Medium | Consumer, social, e-commerce | High |
41
+ | **TikTok** | $0.5-3 | Low | Young demographics, games | Medium |
42
+ | **Snapchat** | $0.5-2 | Low | Gen Z, AR apps | Medium |
43
+ | **Twitter/X** | $2-5 | Low | News, tech, finance | Medium |
44
+ | **Reddit** | $1-3 | Medium | Niche communities | Low |
45
+
46
+ ## Apple Search Ads (Priority Channel)
47
+
48
+ ### Why Start Here
49
+ - Highest intent (user is actively searching)
50
+ - Best conversion rates (30-50% tap-to-install)
51
+ - Direct App Store integration
52
+ - Works for any budget
53
+
54
+ ### Campaign Structure
55
+
56
+ ```
57
+ Account
58
+ ├── Brand Campaign (exact match)
59
+ │ ├── [your app name]
60
+ │ └── [common misspellings]
61
+ ├── Category Campaign (broad + exact)
62
+ │ ├── [category terms]
63
+ │ └── [feature terms]
64
+ ├── Competitor Campaign (exact match)
65
+ │ ├── [competitor name 1]
66
+ │ └── [competitor name 2]
67
+ └── Discovery Campaign (Search Match)
68
+ └── Auto-targeting (find new keywords)
69
+ ```
70
+
71
+ ### Bidding Strategy
72
+
73
+ | Campaign Type | Bid Strategy | Target CPA |
74
+ |--------------|-------------|------------|
75
+ | Brand | Low bids, high volume | < $0.50 |
76
+ | Category | Medium bids | $1-3 |
77
+ | Competitor | Higher bids, lower volume | $2-5 |
78
+ | Discovery | Low bids, broad | $1-3 |
79
+
80
+ ### Optimization Checklist
81
+
82
+ - [ ] Add negative keywords from Discovery to prevent waste
83
+ - [ ] Move winning Discovery keywords to exact match campaigns
84
+ - [ ] Pause keywords with CPA > 2x target
85
+ - [ ] Increase bids on keywords with CPA < target
86
+ - [ ] Test Custom Product Pages for different keyword intents
87
+ - [ ] Review Search Match terms weekly
88
+ - [ ] Adjust bids by day of week and time
89
+
90
+ ## Meta (Facebook/Instagram) Campaigns
91
+
92
+ ### Campaign Structure
93
+
94
+ ```
95
+ Campaign: App Installs
96
+ ├── Ad Set 1: Lookalike (1%) of paying users
97
+ │ ├── Ad: Video (15s feature demo)
98
+ │ ├── Ad: Carousel (feature highlights)
99
+ │ └── Ad: Static (benefit headline)
100
+ ├── Ad Set 2: Interest-based targeting
101
+ │ ├── Ad: Video (problem/solution)
102
+ │ └── Ad: UGC-style testimonial
103
+ └── Ad Set 3: Broad targeting (let Meta optimize)
104
+ ├── Ad: Best performing from above
105
+ └── Ad: New creative test
106
+ ```
107
+
108
+ ### Creative Best Practices
109
+
110
+ **Video ads (highest performance):**
111
+ - Hook in first 3 seconds
112
+ - Show the app in action
113
+ - 15-30 seconds optimal
114
+ - Works without sound (captions)
115
+ - End with clear CTA and App Store badge
116
+
117
+ **Static ads:**
118
+ - Bold headline with key benefit
119
+ - App screenshot or mockup
120
+ - Social proof (rating, user count)
121
+ - Clear "Download Free" CTA
122
+
123
+ ### Audience Strategy
124
+
125
+ 1. **Seed:** Upload paying user emails → create Lookalike
126
+ 2. **Expand:** Lookalike 1% → 3% → 5% as you scale
127
+ 3. **Layer:** Interest targeting for specific segments
128
+ 4. **Broad:** Let Meta's algorithm find users (works at scale)
129
+
130
+ ## Google UAC (Universal App Campaigns)
131
+
132
+ ### Setup
133
+ - Provide 4 text ideas, 20 images, 5 videos
134
+ - Set target CPI or target CPA
135
+ - Google automatically creates and tests ad combinations
136
+ - Runs across Search, Display, YouTube, and Play Store
137
+
138
+ ### Optimization
139
+ - Focus on creative quality (Google does the targeting)
140
+ - Test different value propositions in text
141
+ - Provide diverse creative assets
142
+ - Set realistic CPA targets (start high, lower gradually)
143
+
144
+ ## Key Metrics & Optimization
145
+
146
+ ### Funnel Metrics
147
+
148
+ ```
149
+ Impressions → Taps → Installs → Activations → Purchases
150
+ CTR CVR CPI CPA ROAS
151
+ ```
152
+
153
+ | Metric | Formula | Target |
154
+ |--------|---------|--------|
155
+ | CTR | Taps / Impressions | > 5% (ASA), > 1% (social) |
156
+ | CVR | Installs / Taps | > 30% (ASA), > 10% (social) |
157
+ | CPI | Spend / Installs | < LTV / 3 |
158
+ | CPA | Spend / Purchases | < LTV |
159
+ | ROAS | Revenue / Spend | > 1.0 (break even), > 2.0 (good) |
160
+ | D7 ROAS | Day 7 Revenue / Spend | Predict long-term ROAS |
161
+
162
+ ### Optimization Cadence
163
+
164
+ | Frequency | Action |
165
+ |-----------|--------|
166
+ | Daily | Check spend pacing, pause overspending |
167
+ | Weekly | Review CPI/CPA by keyword/ad set, adjust bids |
168
+ | Bi-weekly | Refresh creative (ad fatigue after 2-3 weeks) |
169
+ | Monthly | Review channel mix, reallocate budget to winners |
170
+ | Quarterly | Strategic review, test new channels |
171
+
172
+ ## Output Format
173
+
174
+ ### UA Plan
175
+
176
+ ```
177
+ Monthly Budget: $[X]
178
+ Target CPI: $[X]
179
+ Target Monthly Installs: [N]
180
+
181
+ Channel Allocation:
182
+ - Apple Search Ads: [X]% ($[X])
183
+ - Meta: [X]% ($[X])
184
+ - Google UAC: [X]% ($[X])
185
+ - Testing: [X]% ($[X])
186
+
187
+ Week 1: [setup tasks]
188
+ Week 2: [launch tasks]
189
+ Week 3-4: [optimization tasks]
190
+ ```
191
+
192
+ ### Campaign Briefs
193
+
194
+ For each channel, provide:
195
+ - Campaign structure
196
+ - Targeting strategy
197
+ - Creative requirements
198
+ - Budget and bid recommendations
199
+ - KPI targets
200
+
201
+ ## Related Skills
202
+
203
+ - `app-launch` — UA strategy for launch
204
+ - `monetization-strategy` — LTV calculation for CPI targets
205
+ - `app-analytics` — Attribution and funnel tracking
206
+ - `competitor-analysis` — Competitive ad intelligence
207
+ - `ab-test-store-listing` — Improve organic conversion (lowers effective CPI)