@leejungkiin/awkit 1.1.6 → 1.1.9

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 (84) hide show
  1. package/README.md +51 -1
  2. package/bin/awk.js +2 -2
  3. package/core/GEMINI.md +45 -7
  4. package/package.json +8 -5
  5. package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +14 -1
  6. package/skills/ab-test-store-listing/SKILL.md +220 -0
  7. package/skills/android-aso/SKILL.md +197 -0
  8. package/skills/app-analytics/SKILL.md +210 -0
  9. package/skills/app-clips/SKILL.md +163 -0
  10. package/skills/app-icon-optimization/SKILL.md +170 -0
  11. package/skills/app-launch/SKILL.md +153 -0
  12. package/skills/app-marketing-context/SKILL.md +129 -0
  13. package/skills/app-store-featured/SKILL.md +213 -0
  14. package/skills/apple-search-ads/SKILL.md +205 -0
  15. package/skills/asc-metrics/SKILL.md +157 -0
  16. package/skills/aso-audit/SKILL.md +179 -0
  17. package/skills/competitor-analysis/SKILL.md +163 -0
  18. package/skills/competitor-tracking/SKILL.md +185 -0
  19. package/skills/crash-analytics/SKILL.md +181 -0
  20. package/skills/gitnexus-intelligence/SKILL.md +224 -0
  21. package/skills/in-app-events/SKILL.md +176 -0
  22. package/skills/keyword-research/SKILL.md +141 -0
  23. package/skills/localization/SKILL.md +165 -0
  24. package/skills/market-movers/SKILL.md +137 -0
  25. package/skills/market-pulse/SKILL.md +170 -0
  26. package/skills/metadata-optimization/SKILL.md +170 -0
  27. package/skills/monetization-strategy/SKILL.md +175 -0
  28. package/skills/onboarding-optimization/SKILL.md +194 -0
  29. package/skills/orchestrator/SKILL.md +306 -25
  30. package/skills/press-and-pr/SKILL.md +204 -0
  31. package/skills/rating-prompt-strategy/SKILL.md +184 -0
  32. package/skills/retention-optimization/SKILL.md +165 -0
  33. package/skills/review-management/SKILL.md +154 -0
  34. package/skills/screenshot-optimization/SKILL.md +167 -0
  35. package/skills/seasonal-aso/SKILL.md +141 -0
  36. package/skills/spec-gate/SKILL.md +312 -0
  37. package/skills/subscription-lifecycle/SKILL.md +206 -0
  38. package/skills/swiftui-pro/references/design.md +44 -0
  39. package/skills/symphony-enforcer/SKILL.md +92 -11
  40. package/skills/symphony-orchestrator/SKILL.md +9 -7
  41. package/skills/systematic-debugging/SKILL.md +32 -7
  42. package/skills/ua-campaign/SKILL.md +207 -0
  43. package/skills/verification-gate/SKILL.md +23 -2
  44. package/workflows/gitnexus.md +123 -0
  45. package/symphony/LICENSE +0 -21
  46. package/symphony/README.md +0 -178
  47. package/symphony/app/api/agents/route.js +0 -152
  48. package/symphony/app/api/events/route.js +0 -22
  49. package/symphony/app/api/knowledge/route.js +0 -253
  50. package/symphony/app/api/locks/route.js +0 -29
  51. package/symphony/app/api/notes/route.js +0 -125
  52. package/symphony/app/api/preflight/route.js +0 -23
  53. package/symphony/app/api/projects/route.js +0 -116
  54. package/symphony/app/api/roles/route.js +0 -134
  55. package/symphony/app/api/skills/route.js +0 -82
  56. package/symphony/app/api/status/route.js +0 -18
  57. package/symphony/app/api/tasks/route.js +0 -157
  58. package/symphony/app/api/workflows/route.js +0 -61
  59. package/symphony/app/api/workspaces/route.js +0 -15
  60. package/symphony/app/globals.css +0 -2605
  61. package/symphony/app/layout.js +0 -20
  62. package/symphony/app/page.js +0 -2122
  63. package/symphony/cli/index.js +0 -1060
  64. package/symphony/core/agent-manager.js +0 -357
  65. package/symphony/core/context-bus.js +0 -100
  66. package/symphony/core/db.js +0 -223
  67. package/symphony/core/file-lock-manager.js +0 -154
  68. package/symphony/core/merge-pipeline.js +0 -234
  69. package/symphony/core/orchestrator.js +0 -236
  70. package/symphony/core/task-manager.js +0 -335
  71. package/symphony/core/workspace-manager.js +0 -168
  72. package/symphony/jsconfig.json +0 -7
  73. package/symphony/lib/core.mjs +0 -1034
  74. package/symphony/mcp/index.js +0 -29
  75. package/symphony/mcp/server.js +0 -110
  76. package/symphony/mcp/tools/context.js +0 -80
  77. package/symphony/mcp/tools/locks.js +0 -99
  78. package/symphony/mcp/tools/status.js +0 -82
  79. package/symphony/mcp/tools/tasks.js +0 -216
  80. package/symphony/mcp/tools/workspace.js +0 -143
  81. package/symphony/next.config.mjs +0 -7
  82. package/symphony/package.json +0 -53
  83. package/symphony/scripts/postinstall.js +0 -49
  84. package/symphony/symphony.config.js +0 -41
@@ -0,0 +1,181 @@
1
+ ---
2
+ name: crash-analytics
3
+ description: When the user wants to monitor, triage, or reduce their app's crash rate — including setting up Crashlytics, prioritizing which crashes to fix first, interpreting crash data, and understanding how crashes affect App Store ranking. Use when the user mentions "crash", "crashlytics", "crash rate", "ANR", "app not responding", "crash-free sessions", "crash-free users", "symbolication", "stability", "firebase crashes", "app crashing", or "crash report". For overall analytics setup, see app-analytics.
4
+ metadata:
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # Crash Analytics
9
+
10
+ You help triage, prioritize, and reduce app crashes — and understand how crash rate affects App Store discoverability and ratings.
11
+
12
+ ## Why Crash Rate Is an ASO Signal
13
+
14
+ - **App Store ranking** — Apple's algorithm penalizes apps with high crash rates
15
+ - **App Store featuring** — High crash rate disqualifies editorial consideration
16
+ - **Ratings** — Crashes are the #1 cause of 1-star reviews
17
+ - **Retention** — A crash in the first session destroys Day 1 retention
18
+
19
+ **Target:** crash-free sessions > 99.5% | crash-free users > 99%
20
+
21
+ ## Tools
22
+
23
+ | Tool | What it provides | Setup |
24
+ |------|-----------------|-------|
25
+ | **Firebase Crashlytics** | Real-time crashes, ANRs, symbolicated stack traces | Add `FirebaseCrashlytics` pod/SPM package |
26
+ | **App Store Connect** | Crash rate trend, crashes per session | Built-in, no code needed |
27
+ | **Xcode Organizer** | Aggregated crash logs from TestFlight + App Store | Xcode → Window → Organizer → Crashes |
28
+ | **MetricKit** | On-device diagnostics, hang rate, launch time | iOS 13+, automatic |
29
+
30
+ **Recommended:** Crashlytics (real-time alerts + search) + App Store Connect (trend validation)
31
+
32
+ ## Crashlytics Setup
33
+
34
+ ### iOS (Swift)
35
+
36
+ ```swift
37
+ // AppDelegate or @main App struct
38
+ import FirebaseCore
39
+ import FirebaseCrashlytics
40
+
41
+ @main
42
+ struct MyApp: App {
43
+ init() {
44
+ FirebaseApp.configure()
45
+ // Crashlytics is auto-initialized
46
+ }
47
+ }
48
+ ```
49
+
50
+ ### Non-fatal errors (track without crashing)
51
+
52
+ ```swift
53
+ // Log a non-fatal error
54
+ Crashlytics.crashlytics().record(error: error)
55
+
56
+ // Log a custom key for debugging context
57
+ Crashlytics.crashlytics().setCustomValue(userId, forKey: "user_id")
58
+ Crashlytics.crashlytics().setCustomValue(screenName, forKey: "current_screen")
59
+ ```
60
+
61
+ ### Android (Kotlin)
62
+
63
+ ```kotlin
64
+ // build.gradle (app)
65
+ implementation("com.google.firebase:firebase-crashlytics:18.x.x")
66
+
67
+ // No additional code needed — auto-captures unhandled exceptions
68
+ // For non-fatal:
69
+ FirebaseCrashlytics.getInstance().recordException(throwable)
70
+ ```
71
+
72
+ ## Triage Framework
73
+
74
+ Not all crashes are equal. Prioritize by impact:
75
+
76
+ **Priority Score = Crash Frequency × Affected Users × User Segment Weight**
77
+
78
+ | Priority | Criteria | Response time |
79
+ |----------|---------|---------------|
80
+ | P0 — Critical | Crashes on launch / checkout / core feature; >1% of sessions | Fix today |
81
+ | P1 — High | Crashes in common flows; >0.1% of sessions | Fix this release |
82
+ | P2 — Medium | Edge case crashes; <0.1% of sessions | Fix next release |
83
+ | P3 — Low | Rare, non-blocking crashes; <0.01% of sessions | Backlog |
84
+
85
+ ### Crashlytics Dashboard Triage
86
+
87
+ 1. Sort by **"Impact"** (unique users affected), not frequency
88
+ 2. Group: `onboarding`, `checkout`, `core feature`, `background`, `launch`
89
+ 3. Assign P0/P1 to the top 3–5 issues
90
+ 4. Set a **velocity alert** in Crashlytics for any issue affecting >0.5% of users
91
+
92
+ ## Reading a Crash Report
93
+
94
+ ```
95
+ Fatal Exception: com.example.NullPointerException
96
+ at com.example.UserProfileVC.loadData:87
97
+ at com.example.HomeVC.viewDidLoad:45
98
+
99
+ Keys:
100
+ user_id: 12345
101
+ current_screen: "home"
102
+ app_version: "2.3.1"
103
+ os_version: "iOS 17.3"
104
+ ```
105
+
106
+ **Steps to debug:**
107
+ 1. Open the file and line in Xcode (`UserProfileVC.swift:87`)
108
+ 2. Check what can be nil at that point
109
+ 3. Reproduce with the user context (OS version, device, screen)
110
+ 4. Write a failing test before fixing
111
+
112
+ ## Symbolication
113
+
114
+ Crashlytics auto-symbolicates if you upload dSYMs. If you see unsymbolicated traces:
115
+
116
+ ```bash
117
+ # Manually upload dSYMs
118
+ ./Pods/FirebaseCrashlytics/upload-symbols -gsp GoogleService-Info.plist -p ios MyApp.app.dSYM
119
+ ```
120
+
121
+ For Bitcode-enabled builds, download dSYMs from App Store Connect → Activity → Build → dSYMs.
122
+
123
+ ## App Store Connect Crash Data
124
+
125
+ - **App Store Connect → App Analytics → Crashes** — Crash rate trend per version
126
+ - Compare crash rate before and after each release
127
+ - A spike on a specific version = regression in that release
128
+
129
+ **Crash rate formula:** Crashes / Sessions × 100
130
+
131
+ ## Release Strategy to Minimize Blast Radius
132
+
133
+ Use phased releases to catch crashes before full rollout:
134
+
135
+ **iOS:** App Store Connect → Version → Phased Release (7-day rollout: 1% → 2% → 5% → 10% → 20% → 50% → 100%)
136
+
137
+ **Android:** Play Console → Production → Managed publishing → Rollout percentage
138
+
139
+ **Rule:** Monitor Crashlytics for 24 hours at each phase. If crash rate increases >0.2%, pause rollout.
140
+
141
+ ## Responding to Crash-Driven 1-Star Reviews
142
+
143
+ 1. Identify the app version where crash-related 1-stars appeared
144
+ 2. Fix the crash
145
+ 3. Reply to each crash-related review: "Fixed in version X.X — please update"
146
+ 4. After update ships, use `rating-prompt-strategy` to recover rating
147
+
148
+ ## Output Format
149
+
150
+ ### Crash Audit Report
151
+
152
+ ```
153
+ Stability Report — [App Name] v[version] ([period])
154
+
155
+ Crash-free sessions: [X]% (target: >99.5%)
156
+ Crash-free users: [X]% (target: >99%)
157
+ Top crash issues:
158
+
159
+ P0 Issues (fix immediately):
160
+ #1 [Exception type] — [X] users, [X]% of sessions
161
+ File: [filename:line]
162
+ Cause: [hypothesis]
163
+ Fix: [specific action]
164
+
165
+ P1 Issues (this release):
166
+ #2 [Exception type] — [X] users, [X]% of sessions
167
+ ...
168
+
169
+ Action Plan:
170
+ Today: Fix P0 issue #1 → release hotfix
171
+ This week: Fix P1 issues #2, #3 → include in v[X.X]
172
+ Monitoring: Set velocity alert at 0.5% session threshold
173
+ ```
174
+
175
+ ## Related Skills
176
+
177
+ - `app-analytics` — Full analytics stack; Crashlytics is one piece
178
+ - `rating-prompt-strategy` — Recover rating after fixing crash-driven 1-stars
179
+ - `review-management` — Respond to crash-related reviews
180
+ - `retention-optimization` — Crashes on Day 1 destroy retention metrics
181
+ - `app-store-featured` — Crash rate > 2% disqualifies editorial featuring
@@ -0,0 +1,224 @@
1
+ ---
2
+ name: gitnexus-intelligence
3
+ description: >-
4
+ Code intelligence via GitNexus knowledge graph. Auto-triggers on refactoring,
5
+ debugging, impact analysis, pre-commit checks, and codebase exploration.
6
+ Requires project to be indexed with `npx gitnexus analyze`.
7
+ metadata:
8
+ stage: core
9
+ version: "1.0"
10
+ tags: [gitnexus, code-intelligence, knowledge-graph, impact-analysis, refactoring]
11
+ agent: Orchestrator
12
+ trigger: auto
13
+ invocation-type: auto
14
+ priority: 5
15
+ ---
16
+
17
+ # GitNexus Intelligence v1.0 — Code-Aware Agent Skill
18
+
19
+ > **Purpose:** Cung cấp architectural awareness cho AI agent thông qua knowledge graph.
20
+ > GitNexus index codebase thành graph (symbols, relationships, execution flows),
21
+ > expose qua MCP tools để agent hiểu blast radius TRƯỚC khi edit.
22
+
23
+ ---
24
+
25
+ ## ⚡ Prerequisites
26
+
27
+ ```
28
+ CHECK: Project đã được index chưa?
29
+ → Tìm thư mục `.gitnexus/` trong project root
30
+ → Hoặc chạy: `npx gitnexus status`
31
+
32
+ CHƯA INDEX:
33
+ → Gợi ý user: "Project chưa được GitNexus index. Chạy `npx gitnexus analyze` trước nhé."
34
+ → KHÔNG dùng GitNexus tools khi chưa index.
35
+
36
+ INDEX STALE (tool trả warning):
37
+ → Cảnh báo: "GitNexus index đã cũ. Chạy `npx gitnexus analyze` để cập nhật."
38
+ ```
39
+
40
+ ---
41
+
42
+ ## 🎯 When to Activate
43
+
44
+ | Trigger | Action |
45
+ |---------|--------|
46
+ | Trước khi edit bất kỳ function/class/method | `gitnexus_impact` → check blast radius |
47
+ | Debug error / trace bug | `gitnexus_query` + `gitnexus_context` |
48
+ | Explore unfamiliar code | `gitnexus_query` → execution flows |
49
+ | Rename symbol | `gitnexus_rename` (dry_run trước) |
50
+ | Trước commit | `gitnexus_detect_changes` |
51
+ | Refactor / extract / split | `gitnexus_context` + `gitnexus_impact` |
52
+
53
+ ---
54
+
55
+ ## 🔧 Tools Reference (7 MCP Tools)
56
+
57
+ | Tool | Purpose | When |
58
+ |------|---------|------|
59
+ | `gitnexus_query` | Process-grouped hybrid search (BM25 + semantic) | Tìm code theo concept |
60
+ | `gitnexus_context` | 360° symbol view: callers, callees, processes | Deep dive vào 1 symbol |
61
+ | `gitnexus_impact` | Blast radius analysis: d=1/2/3 with confidence | Trước khi sửa code |
62
+ | `gitnexus_detect_changes` | Git-diff impact: mapped to affected processes | Trước commit |
63
+ | `gitnexus_rename` | Multi-file coordinated rename via graph | Rename symbols an toàn |
64
+ | `gitnexus_cypher` | Raw Cypher graph queries | Custom analysis |
65
+ | `gitnexus_list_repos` | List all indexed repositories | Discover repos |
66
+
67
+ > **Multi-repo:** Khi có nhiều repos indexed, thêm `repo` param: `gitnexus_query({query: "auth", repo: "my-app"})`
68
+
69
+ ---
70
+
71
+ ## 📚 Resources Reference
72
+
73
+ | Resource | Content | Tokens |
74
+ |----------|---------|--------|
75
+ | `gitnexus://repos` | All indexed repos | ~50 |
76
+ | `gitnexus://repo/{name}/context` | Stats + staleness check | ~150 |
77
+ | `gitnexus://repo/{name}/clusters` | Functional areas + cohesion | ~300 |
78
+ | `gitnexus://repo/{name}/cluster/{name}` | Area members + files | ~500 |
79
+ | `gitnexus://repo/{name}/processes` | All execution flows | ~200 |
80
+ | `gitnexus://repo/{name}/process/{name}` | Step-by-step trace | ~200 |
81
+ | `gitnexus://repo/{name}/schema` | Graph schema for Cypher | ~200 |
82
+
83
+ ---
84
+
85
+ ## 📋 Workflow: Impact Analysis (Trước khi edit)
86
+
87
+ ```
88
+ 1. gitnexus_impact({target: "symbolName", direction: "upstream"})
89
+ → Xem ai depend vào symbol này
90
+ 2. READ gitnexus://repo/{name}/processes
91
+ → Check execution flows bị ảnh hưởng
92
+ 3. Đánh giá risk level:
93
+ - d=1 → WILL BREAK (direct callers) → PHẢI update
94
+ - d=2 → LIKELY AFFECTED → Nên test
95
+ - d=3 → MAY NEED TESTING → Test nếu critical path
96
+ 4. Report risk cho user trước khi sửa
97
+ ```
98
+
99
+ ### Risk Assessment
100
+
101
+ | Affected | Risk |
102
+ |----------|------|
103
+ | <5 symbols, ít processes | LOW |
104
+ | 5-15 symbols, 2-5 processes | MEDIUM |
105
+ | >15 symbols hoặc nhiều processes | HIGH |
106
+ | Critical path (auth, payments) | CRITICAL |
107
+
108
+ ---
109
+
110
+ ## 📋 Workflow: Debugging
111
+
112
+ ```
113
+ 1. gitnexus_query({query: "<error hoặc symptom>"})
114
+ → Tìm execution flows liên quan
115
+ 2. gitnexus_context({name: "<suspect function>"})
116
+ → Xem callers, callees, process participation
117
+ 3. READ gitnexus://repo/{name}/process/{processName}
118
+ → Trace full execution flow step-by-step
119
+ 4. gitnexus_detect_changes({scope: "compare", base_ref: "main"})
120
+ → Nếu là regression: xem branch đã thay đổi gì
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 📋 Workflow: Exploring Code
126
+
127
+ ```
128
+ 1. READ gitnexus://repo/{name}/context → Overview + staleness
129
+ 2. READ gitnexus://repo/{name}/clusters → Functional areas
130
+ 3. gitnexus_query({query: "<concept>"}) → Execution flows
131
+ 4. gitnexus_context({name: "<symbol>"}) → Deep dive
132
+ 5. READ gitnexus://repo/{name}/process/{name} → Full trace
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 📋 Workflow: Safe Refactoring
138
+
139
+ ### Rename Symbol
140
+ ```
141
+ 1. gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})
142
+ → Preview tất cả edits (graph edits = safe, text_search = review)
143
+ 2. Review kết quả, đặc biệt text_search edits
144
+ 3. gitnexus_rename({..., dry_run: false}) → Apply
145
+ 4. gitnexus_detect_changes() → Verify scope
146
+ ```
147
+
148
+ ### Extract / Split
149
+ ```
150
+ 1. gitnexus_context({name: "target"}) → All incoming/outgoing refs
151
+ 2. gitnexus_impact({target, direction: "upstream"}) → External callers
152
+ 3. Plan update order: interfaces → implementations → callers → tests
153
+ 4. Execute changes
154
+ 5. gitnexus_detect_changes() → Verify affected scope
155
+ ```
156
+
157
+ ---
158
+
159
+ ## 📋 Workflow: Pre-Commit Check
160
+
161
+ ```
162
+ 1. gitnexus_detect_changes({scope: "staged"})
163
+ → Changed symbols, affected processes, risk level
164
+ 2. Nếu risk HIGH/CRITICAL → Cảnh báo user
165
+ 3. Verify tất cả d=1 dependents đã được update
166
+ ```
167
+
168
+ ---
169
+
170
+ ## 🚫 Rules
171
+
172
+ ```yaml
173
+ always_do:
174
+ - PHẢI chạy gitnexus_impact TRƯỚC khi edit bất kỳ symbol nào
175
+ - PHẢI chạy gitnexus_detect_changes TRƯỚC khi commit
176
+ - PHẢI cảnh báo user khi risk = HIGH hoặc CRITICAL
177
+ - Ưu tiên gitnexus_query thay vì grep khi explore code
178
+ - PHẢI dùng gitnexus_rename (dry_run trước) khi rename
179
+
180
+ never_do:
181
+ - KHÔNG edit function/class mà chưa check impact
182
+ - KHÔNG ignore HIGH/CRITICAL risk warnings
183
+ - KHÔNG rename bằng find-and-replace → dùng gitnexus_rename
184
+ - KHÔNG commit mà chưa detect_changes
185
+ - KHÔNG dùng GitNexus tools khi project chưa index
186
+ ```
187
+
188
+ ---
189
+
190
+ ## 🔗 Skill Relationships
191
+
192
+ ```
193
+ WORKS WITH:
194
+ orchestrator (Gate 4 — search before building, Layer 0)
195
+ systematic-debugging (bổ sung structural context)
196
+ code-review (pre-commit blast radius check)
197
+ verification-gate (detect_changes = evidence)
198
+
199
+ DOES NOT:
200
+ Tự index project (user phải chạy npx gitnexus analyze)
201
+ Sửa code trực tiếp (chỉ cung cấp context)
202
+ ```
203
+
204
+ ---
205
+
206
+ ## 🔍 Graph Schema Reference
207
+
208
+ **Nodes:** File, Function, Class, Interface, Method, Community, Process
209
+
210
+ **Edges (CodeRelation.type):** CALLS, IMPORTS, EXTENDS, IMPLEMENTS, DEFINES, MEMBER_OF, STEP_IN_PROCESS
211
+
212
+ ```cypher
213
+ -- Find all callers of a function
214
+ MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "myFunc"})
215
+ RETURN caller.name, caller.filePath
216
+
217
+ -- Find what a function calls
218
+ MATCH (f:Function {name: "myFunc"})-[:CodeRelation {type: 'CALLS'}]->(callee)
219
+ RETURN callee.name, callee.filePath
220
+ ```
221
+
222
+ ---
223
+
224
+ *gitnexus-intelligence v1.0 — Code Intelligence for Antigravity*
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: in-app-events
3
+ description: When the user wants to create, plan, or optimize App Store In-App Events — the event cards that appear on the Today tab, search results, and your product page. Use when the user mentions "in-app event", "App Store event", "event card", "Today tab", "live event", "challenge", "game event", "seasonal event card", or wants visibility beyond organic search. For general ASO, see aso-audit. For seasonal keyword strategy, see seasonal-aso.
4
+ metadata:
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # In-App Events
9
+
10
+ You help the user plan, write, and optimize **App Store In-App Events** — event cards that surface in search, the Today tab, and the product page, driving installs and re-engagement without paid media.
11
+
12
+ ## What In-App Events Are
13
+
14
+ In-App Events are time-limited content cards on the App Store. They appear:
15
+ - **Today tab** (editorial + algorithmic)
16
+ - **Search results** (alongside app results)
17
+ - **Your product page**
18
+ - **Personalized recommendations** (for lapsed users)
19
+
20
+ **Key advantage:** Existing users who haven't opened your app recently are notified of events. Non-users see them as discovery.
21
+
22
+ ## Event Types
23
+
24
+ | Type | Best For | Example |
25
+ |------|----------|---------|
26
+ | **Challenge** | User-generated competition | "30-Day Streak Challenge" |
27
+ | **Competition** | Ranked or scored contest | "Weekly High Score Leaderboard" |
28
+ | **Live Event** | Real-time activity | "Live Q&A with Experts" |
29
+ | **Major Update** | Significant new feature | "Introducing AI Coach" |
30
+ | **Premiere** | First-time content launch | "New Series: Morning Routines" |
31
+ | **Special Event** | Seasonal or themed moment | "Holiday Collection Unlocked" |
32
+
33
+ ## Event Card Specs
34
+
35
+ | Field | Limit | Notes |
36
+ |-------|-------|-------|
37
+ | **Event name** | 30 chars | Appears prominently — keyword-conscious |
38
+ | **Short description** | 50 chars | Below the name on cards |
39
+ | **Long description** | 120 chars | Shown in expanded event view |
40
+ | **Event card image** | 2160×1080px | 2:1 ratio, PNG/JPG, no text required |
41
+ | **Badge** | — | Chosen from the 6 type badges above |
42
+ | **Duration** | Up to 31 days | Start and end time required |
43
+
44
+ Up to **10 events** can be live or scheduled at a time.
45
+
46
+ ## Planning Workflow
47
+
48
+ ### Step 1 — Event Idea Selection
49
+
50
+ 1. Check for `app-marketing-context.md`
51
+ 2. Evaluate event type based on app category:
52
+
53
+ | App Type | Best Event Types |
54
+ |----------|----------------|
55
+ | Games | Challenge, Competition, Major Update |
56
+ | Fitness | Challenge, Live Event, Major Update |
57
+ | Productivity | Major Update, Premiere |
58
+ | Social / Community | Live Event, Challenge |
59
+ | Streaming / Content | Premiere, Special Event |
60
+ | Utility | Major Update, Special Event |
61
+
62
+ 3. Identify the primary goal:
63
+ - **Re-engagement** → Use notification-triggering events (any type)
64
+ - **New user acquisition** → Focus on Today tab visibility (Challenge or Competition)
65
+ - **Feature launch** → Major Update type
66
+
67
+ ### Step 2 — Write Event Copy
68
+
69
+ **Event name (30 chars) — rules:**
70
+ - Lead with the user benefit or action, not your app name
71
+ - Include relevant keywords where natural
72
+ - ✅ "30-Day Habit Challenge" | ❌ "AppName Challenge 2026"
73
+
74
+ **Short description (50 chars):**
75
+ - Answer "what's in it for me?" in one line
76
+ - ✅ "Build a streak and win exclusive rewards"
77
+
78
+ **Long description (120 chars):**
79
+ - Expand on the short description: what, when, and why to join
80
+ - ✅ "Join our 30-day challenge. Complete daily habits, hit your streak, and unlock your achievement badge."
81
+
82
+ ### Step 3 — Event Card Image
83
+
84
+ Spec: 2160×1080px, 2:1 ratio
85
+
86
+ **Best practices:**
87
+ - No text needed (name/description appear as overlay) — but a short tagline is allowed
88
+ - High contrast, bold visual that works at small thumbnail size
89
+ - Show the outcome or reward, not just the app UI
90
+ - Test thumbnail at 390×195px to verify legibility
91
+
92
+ ### Step 4 — Submit in App Store Connect
93
+
94
+ 1. App Store Connect → Your App → In-App Events → `+`
95
+ 2. Fill all required fields + upload image
96
+ 3. Submit for review (typically 24–48 hours)
97
+ 4. Schedule start/end times
98
+
99
+ **Submit 3–5 days before** the desired start date to account for review time.
100
+
101
+ ## Optimization Tips
102
+
103
+ ### Maximize Today Tab Placement
104
+
105
+ Apple's algorithm favors events that are:
106
+ - **Timely** — tied to real-world moments (holidays, trends, app anniversaries)
107
+ - **High quality** — polished images, complete descriptions
108
+ - **Engaging** — event types that drive sessions (challenges > updates)
109
+ - **Consistent** — apps that run regular events get better recurring placement
110
+
111
+ **Run at least one event per month** to maintain algorithmic eligibility.
112
+
113
+ ### Keyword Visibility in Search
114
+
115
+ Event names and short descriptions are **indexed by the App Store search algorithm**.
116
+
117
+ - Include 1–2 target keywords in the event name naturally
118
+ - The short description can reinforce secondary keywords
119
+ - Use `keyword-research` skill to validate which terms to include
120
+
121
+ ### Re-engagement Notification
122
+
123
+ Users who have downloaded your app but haven't opened it recently receive a push notification for your event automatically — no opt-in required. This is the highest-value feature of In-App Events.
124
+
125
+ **Make the event name the notification subject line** — write it to be compelling as a standalone message.
126
+
127
+ ## Output Format
128
+
129
+ ### Event Brief
130
+
131
+ ```
132
+ 📅 Event: [Name — 30 chars]
133
+ Type: [Badge type]
134
+ Dates: [Start] → [End]
135
+
136
+ Copy:
137
+ Short: [50 chars]
138
+ Long: [120 chars]
139
+
140
+ Image direction:
141
+ Visual: [describe the scene/concept]
142
+ Style: [photography / illustration / abstract]
143
+ Key element: [the reward, the action, the outcome]
144
+
145
+ Goals:
146
+ Primary: [re-engagement / acquisition / feature launch]
147
+ KPIs: [sessions spike, downloads, event page views]
148
+
149
+ Submit by: [date — 4 days before start]
150
+ ```
151
+
152
+ ### Event Calendar (monthly)
153
+
154
+ ```
155
+ Week 1: [Event name] — [type] — [dates]
156
+ Week 2: [No event / buffer]
157
+ Week 3: [Event name] — [type] — [dates]
158
+ Week 4: [Event name] — [type] — [dates]
159
+ ```
160
+
161
+ ## Common Mistakes
162
+
163
+ | Mistake | Fix |
164
+ |---------|-----|
165
+ | App name in event name | Lead with the user benefit |
166
+ | Generic image (screenshot of UI) | Show the reward/outcome visually |
167
+ | Events shorter than 7 days | Minimum 7 days for Today tab consideration |
168
+ | Submitting day-of | Submit 4–5 days early for review |
169
+ | No recurring schedule | Run 1+ events/month for sustained placement |
170
+
171
+ ## Related Skills
172
+
173
+ - `seasonal-aso` — Align event timing with keyword seasonal peaks
174
+ - `screenshot-optimization` — Apply same visual best practices to event images
175
+ - `app-store-featured` — Events increase editorial feature eligibility
176
+ - `retention-optimization` — Track re-engagement lift from events