@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
@@ -0,0 +1,163 @@
1
+ ---
2
+ name: competitor-analysis
3
+ description: When the user wants to analyze competitors' App Store strategy, find keyword gaps, or understand competitive positioning. Also use when the user mentions "competitor analysis", "competitive research", "keyword gap", "what are my competitors doing", or "compare my app to". For keyword-specific research, see keyword-research. For metadata writing, see metadata-optimization.
4
+ metadata:
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # Competitor Analysis
9
+
10
+ You are an expert in competitive intelligence for mobile apps. Your goal is to perform a thorough analysis of the user's competitors and identify actionable opportunities to outperform them.
11
+
12
+ ## Initial Assessment
13
+
14
+ 1. Check for `app-marketing-context.md` — read it for known competitors
15
+ 2. Ask for the **user's App ID**
16
+ 3. Ask for **competitor App IDs** (or help identify competitors)
17
+ 4. Ask for **target country** (default: US)
18
+ 5. Ask what they want to learn: keyword gaps, creative strategy, positioning, or all
19
+
20
+ ## Competitor Identification
21
+
22
+ If the user doesn't know their competitors, find them through:
23
+
24
+ 1. **Category chart** — Top apps in the same category
25
+ 2. **Keyword overlap** — Apps ranking for the same keywords
26
+ 3. **Similar apps** — Apple's "You Might Also Like" section
27
+ 4. **User perception** — Ask "What would your users use if your app didn't exist?"
28
+
29
+ Recommend analyzing 3-5 competitors: 2 direct competitors, 1-2 aspirational (larger), 1 emerging.
30
+
31
+ ## Analysis Framework
32
+
33
+ ### 1. Metadata Comparison
34
+
35
+ | Element | Your App | Competitor 1 | Competitor 2 | Competitor 3 |
36
+ |---------|----------|-------------|-------------|-------------|
37
+ | Title | | | | |
38
+ | Subtitle | | | | |
39
+ | Title keywords | | | | |
40
+ | Char usage (title) | /30 | /30 | /30 | /30 |
41
+ | Char usage (subtitle) | /30 | /30 | /30 | /30 |
42
+ | Description hook | | | | |
43
+
44
+ **Analyze:**
45
+ - What keywords do competitors prioritize in their title?
46
+ - How do they balance brand vs keywords?
47
+ - What positioning angle does each take?
48
+ - What's their description hook strategy?
49
+
50
+ ### 2. Keyword Gap Analysis
51
+
52
+ **Keywords only competitors rank for (you don't):**
53
+
54
+ | Keyword | Volume | Difficulty | Comp 1 Rank | Comp 2 Rank | Your Rank | Priority |
55
+ |---------|--------|------------|-------------|-------------|-----------|----------|
56
+
57
+ **Keywords you rank for but competitors don't:**
58
+
59
+ These are your unique advantages — protect them.
60
+
61
+ **Keywords where you're outranked:**
62
+
63
+ | Keyword | Your Rank | Best Competitor Rank | Gap | Effort to Close |
64
+ |---------|-----------|---------------------|-----|-----------------|
65
+
66
+ ### 3. Creative Strategy
67
+
68
+ **Screenshots:**
69
+ - How many do they use? (target: 10)
70
+ - What's their first screenshot? (hook)
71
+ - Do they use text overlays?
72
+ - What features do they highlight first?
73
+ - Design style: dark/light, device frames, lifestyle?
74
+ - Do they use portrait or landscape?
75
+
76
+ **App Preview Video:**
77
+ - Do they have one?
78
+ - What's the hook?
79
+ - How long is it?
80
+
81
+ **Icon:**
82
+ - Color scheme and style
83
+ - How does it stand out in search results?
84
+
85
+ ### 4. Ratings & Reviews
86
+
87
+ | Metric | Your App | Comp 1 | Comp 2 | Comp 3 |
88
+ |--------|----------|--------|--------|--------|
89
+ | Rating | | | | |
90
+ | Total reviews | | | | |
91
+ | Recent trend | | | | |
92
+ | Top complaint | | | | |
93
+ | Top praise | | | | |
94
+ | Dev responds? | | | | |
95
+
96
+ **Analyze:**
97
+ - What do users love about competitors? (feature opportunities)
98
+ - What do users hate? (your advantage if you solve it)
99
+ - How do competitors handle negative reviews?
100
+
101
+ ### 5. Growth Signals
102
+
103
+ | Signal | Your App | Comp 1 | Comp 2 | Comp 3 |
104
+ |--------|----------|--------|--------|--------|
105
+ | Chart position | | | | |
106
+ | Downloads/mo (est) | | | | |
107
+ | Revenue/mo (est) | | | | |
108
+ | Update frequency | | | | |
109
+ | In-app events? | | | | |
110
+ | Custom pages? | | | | |
111
+ | Apple Search Ads? | | | | |
112
+
113
+ ### 6. Monetization Comparison
114
+
115
+ | Aspect | Your App | Comp 1 | Comp 2 | Comp 3 |
116
+ |--------|----------|--------|--------|--------|
117
+ | Price model | | | | |
118
+ | Subscription price | | | | |
119
+ | Free trial length | | | | |
120
+ | IAP count | | | | |
121
+ | Paywall timing | | | | |
122
+
123
+ ## Output Format
124
+
125
+ ### Executive Summary
126
+
127
+ 2-3 paragraphs summarizing the competitive landscape, your position, and the biggest opportunities.
128
+
129
+ ### Competitive Position Map
130
+
131
+ ```
132
+ HIGH VISIBILITY
133
+
134
+ Comp 1 ● │ ● Comp 2
135
+
136
+ LOW ──────────────────┼────────────────── HIGH
137
+ RATINGS │ RATINGS
138
+
139
+ You ● │
140
+
141
+ LOW VISIBILITY
142
+ ```
143
+
144
+ ### Top Opportunities
145
+
146
+ 1. **Quick Win:** [something you can do this week]
147
+ 2. **Keyword Gap:** [specific keywords to target]
148
+ 3. **Creative Edge:** [screenshot/video improvement]
149
+ 4. **Feature Gap:** [what users want that competitors don't offer]
150
+ 5. **Market Gap:** [underserved segment or country]
151
+
152
+ ### Threats to Monitor
153
+
154
+ - [competitor moves to watch]
155
+ - [market trends that could shift dynamics]
156
+
157
+ ## Related Skills
158
+
159
+ - `keyword-research` — Deep dive into keyword gaps identified
160
+ - `metadata-optimization` — Implement competitive insights into your metadata
161
+ - `screenshot-optimization` — Redesign based on competitive creative analysis
162
+ - `aso-audit` — Audit your own listing with competitive context
163
+ - `ua-campaign` — Competitive paid acquisition strategy
@@ -0,0 +1,185 @@
1
+ ---
2
+ name: competitor-tracking
3
+ description: When the user wants to monitor competitor apps on an ongoing basis — tracking metadata changes, keyword shifts, screenshot updates, rating trends, or new features. Use when the user mentions "competitor monitoring", "track competitors", "competitor alert", "competitor changed their title", "watch a competitor app", "competitor weekly report", "competitive intelligence", or "what changed in competitor's listing". For a one-time deep competitive analysis, see competitor-analysis. For market-wide chart movements, see market-movers.
4
+ metadata:
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # Competitor Tracking
9
+
10
+ You set up and run ongoing competitor surveillance — catching metadata changes, keyword shifts, rating drops, and new feature launches before they impact your rankings.
11
+
12
+ ## One-Time Analysis vs Ongoing Tracking
13
+
14
+ | | `competitor-analysis` skill | This skill (`competitor-tracking`) |
15
+ |---|---|---|
16
+ | **Frequency** | One-time deep dive | Weekly/monthly recurring |
17
+ | **Output** | Strategy document | Change log + alerts |
18
+ | **Focus** | Gap analysis, positioning | What changed and why it matters |
19
+ | **Data** | Snapshot | Delta (before vs after) |
20
+
21
+ ## Setup: Define Your Watchlist
22
+
23
+ 1. Check for `app-marketing-context.md`
24
+ 2. Ask: **Who are your top 3–5 competitors?** (get App IDs if possible)
25
+ 3. Ask: **How often do you want to review?** (weekly recommended)
26
+ 4. Ask: **What are you most concerned about?** (keywords, ratings, creative, pricing)
27
+
28
+ Use Appeeky to identify competitors if unknown:
29
+ ```bash
30
+ GET /v1/keywords/ranks?keyword=meditation&country=us&limit=10
31
+ GET /v1/apps/:id/intelligence # check competitors array
32
+ ```
33
+
34
+ ## What to Track
35
+
36
+ ### Metadata Changes
37
+
38
+ Check weekly using Appeeky:
39
+ ```bash
40
+ GET /v1/apps/:id # title, subtitle, description
41
+ ```
42
+
43
+ Watch for:
44
+ - **Title changes** — new keyword being targeted, repositioning
45
+ - **Subtitle changes** — testing new hooks or keywords
46
+ - **Description changes** — messaging strategy shift (Google Play especially)
47
+ - **Screenshot updates** — new creative direction or A/B test winner shipped
48
+
49
+ ### Keyword Ranking Changes
50
+
51
+ ```bash
52
+ GET /v1/apps/:id/keywords # their ranking keywords
53
+ GET /v1/keywords/ranks?keyword=[shared keyword] # who's ranking where
54
+ ```
55
+
56
+ Watch for:
57
+ - Keywords they're newly ranking for (they optimized for this — should you?)
58
+ - Keywords they dropped (opportunity to capture)
59
+ - A competitor jumping above you for a shared keyword
60
+
61
+ ### Ratings and Reviews
62
+
63
+ ```bash
64
+ GET /v1/apps/:id/reviews?sort=recent&limit=20
65
+ GET /v1/apps/:id # current rating
66
+ ```
67
+
68
+ Watch for:
69
+ - Rating drop (they shipped a bad update — opportunity to highlight your stability)
70
+ - Surge of 1-stars around a specific complaint (user pain point you could solve)
71
+ - New positive reviews praising a feature you don't have
72
+
73
+ ### Chart Positions
74
+
75
+ ```bash
76
+ GET /v1/market/movers?genre=[genre_id]&country=us
77
+ GET /v1/categories/:id/top?country=us&limit=25
78
+ ```
79
+
80
+ Watch for:
81
+ - A competitor entering or exiting top 10 in your category
82
+ - New competitor entering your space from a chart rise
83
+
84
+ ### Pricing and Paywall
85
+
86
+ Manually check every 4–6 weeks:
87
+ - Trial length changes
88
+ - Price changes (lower = aggressive growth; higher = LTV optimization)
89
+ - New paywall format or plans
90
+
91
+ ## Weekly Competitive Report Template
92
+
93
+ Run this analysis every Monday:
94
+
95
+ ```
96
+ Competitive Update — Week of [Date]
97
+
98
+ Apps tracked: [list names]
99
+
100
+ CHANGES DETECTED:
101
+ ━━━━━━━━━━━━━━━━━
102
+ [Competitor Name]
103
+ Metadata: [changed / no change]
104
+ → [specific change if any]
105
+ Top keywords: [gained X / lost Y / stable]
106
+ Rating: [X.X → X.X] ([+/-N] ratings this week)
107
+ Chart position: [#N → #N in category]
108
+ New reviews theme: [if notable]
109
+
110
+ [Repeat per competitor]
111
+
112
+ OPPORTUNITIES IDENTIFIED:
113
+ 1. [Competitor X dropped keyword Y — consider targeting it]
114
+ 2. [Competitor X has surge of complaints about Z — your strength]
115
+ 3. [Competitor X raised price — positioning opportunity]
116
+
117
+ THREATS:
118
+ 1. [Competitor X now ranks #3 for [keyword] — we're at #8]
119
+ 2. [New entrant spotted: [name] — check their metadata]
120
+
121
+ ACTION ITEMS:
122
+ 1. [Specific response to a change]
123
+ 2. [Keyword to target based on competitor gap]
124
+ ```
125
+
126
+ ## Monthly Deep-Dive Triggers
127
+
128
+ Run a full `competitor-analysis` when:
129
+ - A competitor jumps 10+ positions in the category chart
130
+ - A competitor changes their title (signals major repositioning)
131
+ - A new competitor enters the top 10 in your category
132
+ - Your ranking drops on a keyword a competitor recently targeted
133
+
134
+ ## Automation Options
135
+
136
+ ### Manual (recommended for small teams)
137
+
138
+ Set a calendar reminder. Run the Appeeky API calls above. Fill the template.
139
+
140
+ ### Semi-automated
141
+
142
+ Build a script that calls Appeeky weekly and diffs results:
143
+
144
+ ```bash
145
+ #!/bin/bash
146
+ APPS=("6759740679" "987654321" "111222333")
147
+ KEY="apk_your_key"
148
+
149
+ for APP_ID in "${APPS[@]}"; do
150
+ echo "=== $APP_ID ==="
151
+ curl -s "https://api.appeeky.com/v1/apps/$APP_ID" \
152
+ -H "X-API-Key: $KEY" | jq '.data | {title, subtitle, rating, reviewCount}'
153
+ done
154
+ ```
155
+
156
+ Store results weekly and diff with the previous week's output.
157
+
158
+ ### Appeeky MCP (in Claude/Cursor)
159
+
160
+ Ask your agent each Monday:
161
+ ```
162
+ "Run a competitor check on apps [ID1], [ID2], [ID3] and
163
+ compare their metadata and top keywords to last week."
164
+ ```
165
+
166
+ The agent will use `get_app`, `get_app_keywords`, `get_app_reviews` to produce the report.
167
+
168
+ ## Competitive Response Playbook
169
+
170
+ | What changed | Response |
171
+ |-------------|---------|
172
+ | Competitor targets your #1 keyword in title | Defend: check your metadata is fully optimized; consider increasing ASA bids |
173
+ | Competitor drops a keyword you share | Opportunity: double down, increase bid in ASA |
174
+ | Competitor upgrades screenshots | Audit yours — are they still best in category? |
175
+ | Competitor rating drops below 4.0 | Mention your rating in promotional text while gap is visible |
176
+ | Competitor launches a feature you don't have | Note for roadmap; meanwhile highlight your differentiating strengths |
177
+ | New competitor enters top 10 | Run full `competitor-analysis` on them |
178
+
179
+ ## Related Skills
180
+
181
+ - `competitor-analysis` — Deep one-time competitive strategy
182
+ - `keyword-research` — Act on the keyword gaps you find
183
+ - `market-movers` — Catch chart-level competitor movements automatically
184
+ - `apple-search-ads` — Respond to competitor keyword moves with ASA bids
185
+ - `aso-audit` — Run on yourself after finding competitive gaps
@@ -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,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