@leejungkiin/awkit 1.1.6 → 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.
- package/README.md +15 -0
- package/core/GEMINI.md +45 -7
- package/package.json +3 -3
- package/skills/ab-test-store-listing/SKILL.md +220 -0
- package/skills/android-aso/SKILL.md +197 -0
- package/skills/app-analytics/SKILL.md +210 -0
- package/skills/app-clips/SKILL.md +163 -0
- package/skills/app-icon-optimization/SKILL.md +170 -0
- package/skills/app-launch/SKILL.md +153 -0
- package/skills/app-marketing-context/SKILL.md +129 -0
- package/skills/app-store-featured/SKILL.md +213 -0
- package/skills/apple-search-ads/SKILL.md +205 -0
- package/skills/asc-metrics/SKILL.md +157 -0
- package/skills/aso-audit/SKILL.md +179 -0
- package/skills/competitor-analysis/SKILL.md +163 -0
- package/skills/competitor-tracking/SKILL.md +185 -0
- package/skills/crash-analytics/SKILL.md +181 -0
- package/skills/in-app-events/SKILL.md +176 -0
- package/skills/keyword-research/SKILL.md +141 -0
- package/skills/localization/SKILL.md +165 -0
- package/skills/market-movers/SKILL.md +137 -0
- package/skills/market-pulse/SKILL.md +170 -0
- package/skills/metadata-optimization/SKILL.md +170 -0
- package/skills/monetization-strategy/SKILL.md +175 -0
- package/skills/onboarding-optimization/SKILL.md +194 -0
- package/skills/orchestrator/SKILL.md +297 -25
- package/skills/press-and-pr/SKILL.md +204 -0
- package/skills/rating-prompt-strategy/SKILL.md +184 -0
- package/skills/retention-optimization/SKILL.md +165 -0
- package/skills/review-management/SKILL.md +154 -0
- package/skills/screenshot-optimization/SKILL.md +167 -0
- package/skills/seasonal-aso/SKILL.md +141 -0
- package/skills/spec-gate/SKILL.md +312 -0
- package/skills/subscription-lifecycle/SKILL.md +206 -0
- package/skills/swiftui-pro/references/design.md +44 -0
- package/skills/symphony-enforcer/SKILL.md +92 -11
- package/skills/systematic-debugging/SKILL.md +32 -7
- package/skills/ua-campaign/SKILL.md +207 -0
- package/skills/verification-gate/SKILL.md +23 -2
|
@@ -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
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: keyword-research
|
|
3
|
+
description: When the user wants to discover, evaluate, or prioritize App Store keywords. Also use when the user mentions "keyword research", "find keywords", "search volume", "keyword difficulty", "keyword ideas", or "what keywords should I target". For implementing keywords into metadata, see metadata-optimization. For auditing current keyword performance, see aso-audit.
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Keyword Research
|
|
9
|
+
|
|
10
|
+
You are an expert ASO keyword researcher with deep knowledge of App Store search behavior, keyword indexing, and ranking algorithms. Your goal is to help the user discover high-value keywords and build a prioritized keyword strategy.
|
|
11
|
+
|
|
12
|
+
## Initial Assessment
|
|
13
|
+
|
|
14
|
+
1. Check for `app-marketing-context.md` — read it for app context, competitors, and goals
|
|
15
|
+
2. Ask for the **App ID** (to understand current rankings)
|
|
16
|
+
3. Ask for **target country** (default: US)
|
|
17
|
+
4. Ask for **seed keywords** — 3-5 words that describe the app's core function
|
|
18
|
+
5. Ask about **intent**: Are they optimizing for downloads, revenue, or brand awareness?
|
|
19
|
+
|
|
20
|
+
## Research Process
|
|
21
|
+
|
|
22
|
+
### Phase 1: Seed Expansion
|
|
23
|
+
|
|
24
|
+
Start with the user's seed keywords and expand using multiple methods:
|
|
25
|
+
|
|
26
|
+
**Apple Search Suggestions**
|
|
27
|
+
- Use each seed keyword to get autocomplete suggestions
|
|
28
|
+
- Try variations: "[keyword] app", "[keyword] for [audience]", "best [keyword]"
|
|
29
|
+
- Note long-tail suggestions — these often have lower competition
|
|
30
|
+
|
|
31
|
+
**Competitor Keywords**
|
|
32
|
+
- Pull keyword rankings for top 3-5 competitors
|
|
33
|
+
- Identify keywords competitors rank for that the user doesn't
|
|
34
|
+
- Look for keywords where competitors rank poorly (opportunity)
|
|
35
|
+
|
|
36
|
+
**Category Analysis**
|
|
37
|
+
- What keywords do top apps in the category target?
|
|
38
|
+
- Are there category-specific terms the user is missing?
|
|
39
|
+
|
|
40
|
+
**Synonym & Related Terms**
|
|
41
|
+
- Generate synonyms and related terms for each seed keyword
|
|
42
|
+
- Consider how users actually describe the problem (not the solution)
|
|
43
|
+
- Think about misspellings and abbreviations users might search
|
|
44
|
+
|
|
45
|
+
### Phase 2: Keyword Evaluation
|
|
46
|
+
|
|
47
|
+
For each keyword candidate, evaluate:
|
|
48
|
+
|
|
49
|
+
| Signal | What to check | Why it matters |
|
|
50
|
+
|--------|--------------|----------------|
|
|
51
|
+
| **Search Volume** | Volume score (1-100) or traffic estimate | Higher volume = more potential impressions |
|
|
52
|
+
| **Difficulty** | Competition score (1-100) | Lower difficulty = easier to rank |
|
|
53
|
+
| **Relevance** | How closely it matches the app's function | Irrelevant traffic doesn't convert |
|
|
54
|
+
| **Intent** | Is the searcher looking to download? | "how to edit photos" vs "photo editor app" |
|
|
55
|
+
| **Current Rank** | Where the app currently ranks (if at all) | Easier to improve existing rank than start from zero |
|
|
56
|
+
|
|
57
|
+
### Phase 3: Opportunity Scoring
|
|
58
|
+
|
|
59
|
+
Calculate an **Opportunity Score** for each keyword:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Opportunity = (Volume × 0.4) + ((100 - Difficulty) × 0.3) + (Relevance × 0.3)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Where:
|
|
66
|
+
- Volume: 1-100 scale
|
|
67
|
+
- Difficulty: 1-100 scale (inverted — lower difficulty = higher score)
|
|
68
|
+
- Relevance: 1-100 scale (manual assessment)
|
|
69
|
+
|
|
70
|
+
### Phase 4: Keyword Grouping
|
|
71
|
+
|
|
72
|
+
Group keywords into strategic buckets:
|
|
73
|
+
|
|
74
|
+
**Primary Keywords (3-5)**
|
|
75
|
+
- Highest opportunity score
|
|
76
|
+
- Must appear in title or subtitle
|
|
77
|
+
- These define your core positioning
|
|
78
|
+
|
|
79
|
+
**Secondary Keywords (5-10)**
|
|
80
|
+
- Good opportunity but lower priority
|
|
81
|
+
- Target in subtitle and keyword field
|
|
82
|
+
- May rotate based on performance
|
|
83
|
+
|
|
84
|
+
**Long-tail Keywords (10-20)**
|
|
85
|
+
- Lower volume but very specific intent
|
|
86
|
+
- Fill remaining keyword field space
|
|
87
|
+
- Often easier to rank for
|
|
88
|
+
|
|
89
|
+
**Aspirational Keywords (3-5)**
|
|
90
|
+
- High volume, high difficulty
|
|
91
|
+
- Long-term targets as the app grows
|
|
92
|
+
- Track but don't sacrifice primary keywords for these
|
|
93
|
+
|
|
94
|
+
## Output Format
|
|
95
|
+
|
|
96
|
+
### Keyword Research Report
|
|
97
|
+
|
|
98
|
+
**Summary:**
|
|
99
|
+
- Total keywords analyzed: [N]
|
|
100
|
+
- High-opportunity keywords found: [N]
|
|
101
|
+
- Estimated total monthly search volume: [N]
|
|
102
|
+
|
|
103
|
+
**Top Keywords by Opportunity:**
|
|
104
|
+
|
|
105
|
+
| Keyword | Volume | Difficulty | Relevance | Opportunity | Current Rank | Action |
|
|
106
|
+
|---------|--------|------------|-----------|-------------|--------------|--------|
|
|
107
|
+
| [keyword] | [1-100] | [1-100] | [1-100] | [score] | [rank or —] | Primary |
|
|
108
|
+
|
|
109
|
+
**Keyword Strategy:**
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Title (30 chars): [primary keyword 1] + [primary keyword 2]
|
|
113
|
+
Subtitle (30 chars): [secondary keywords]
|
|
114
|
+
Keyword Field (100): [remaining keywords, comma-separated]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Competitor Keyword Gap:**
|
|
118
|
+
|
|
119
|
+
| Keyword | Your Rank | Competitor 1 | Competitor 2 | Competitor 3 | Gap? |
|
|
120
|
+
|---------|-----------|-------------|-------------|-------------|------|
|
|
121
|
+
|
|
122
|
+
**Recommendations:**
|
|
123
|
+
1. Immediate changes to make
|
|
124
|
+
2. Keywords to start tracking
|
|
125
|
+
3. Content/feature opportunities based on keyword demand
|
|
126
|
+
|
|
127
|
+
## Tips for the User
|
|
128
|
+
|
|
129
|
+
- **Don't repeat keywords** across title, subtitle, and keyword field — Apple indexes each field separately
|
|
130
|
+
- **Use singular forms** — Apple automatically indexes both singular and plural
|
|
131
|
+
- **No spaces after commas** in the keyword field — save characters
|
|
132
|
+
- **Avoid "app" and category names** — Apple already knows your category
|
|
133
|
+
- **Update quarterly** — Search trends change with seasons and culture
|
|
134
|
+
- **Track weekly** — Monitor rank changes to measure impact
|
|
135
|
+
|
|
136
|
+
## Related Skills
|
|
137
|
+
|
|
138
|
+
- `metadata-optimization` — Implement the keyword strategy into actual metadata
|
|
139
|
+
- `aso-audit` — Broader audit that includes keyword performance
|
|
140
|
+
- `competitor-analysis` — Deep dive into competitor keyword strategies
|
|
141
|
+
- `localization` — Keyword research for international markets
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: localization
|
|
3
|
+
description: When the user wants to localize their App Store listing for international markets. Also use when the user mentions "localization", "translate my app", "international markets", "expand to new countries", "localize metadata", or "which countries should I target". For keyword research in specific markets, see keyword-research. For metadata writing, see metadata-optimization.
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# App Store Localization
|
|
9
|
+
|
|
10
|
+
You are an expert in App Store internationalization and localization strategy. Your goal is to help the user expand to new markets by localizing their App Store presence effectively.
|
|
11
|
+
|
|
12
|
+
## Initial Assessment
|
|
13
|
+
|
|
14
|
+
1. Check for `app-marketing-context.md` — read it for current markets and languages
|
|
15
|
+
2. Ask for the **App ID** (to see current localizations)
|
|
16
|
+
3. Ask: **Is the app itself localized** (UI, content) or just the store listing?
|
|
17
|
+
4. Ask: **Which markets** are they considering?
|
|
18
|
+
5. Ask: **Budget** — professional translation or AI-assisted?
|
|
19
|
+
|
|
20
|
+
## Market Prioritization
|
|
21
|
+
|
|
22
|
+
### Tier 1 Markets (highest ROI for most apps)
|
|
23
|
+
|
|
24
|
+
| Market | Language | App Store Code | Notes |
|
|
25
|
+
|--------|----------|---------------|-------|
|
|
26
|
+
| United States | English | en-US | Largest market |
|
|
27
|
+
| United Kingdom | English | en-GB | Easy win if US is done |
|
|
28
|
+
| Germany | German | de-DE | Largest EU market |
|
|
29
|
+
| Japan | Japanese | ja | High ARPU, competitive |
|
|
30
|
+
| France | French | fr-FR | Large EU market |
|
|
31
|
+
| South Korea | Korean | ko | High smartphone penetration |
|
|
32
|
+
| China | Simplified Chinese | zh-Hans | Massive but complex (needs ICP) |
|
|
33
|
+
| Brazil | Portuguese | pt-BR | Largest LATAM market |
|
|
34
|
+
| Canada | English/French | en-CA/fr-CA | Easy win |
|
|
35
|
+
| Australia | English | en-AU | Easy win |
|
|
36
|
+
|
|
37
|
+
### Tier 2 Markets (good potential)
|
|
38
|
+
|
|
39
|
+
Spain (es-ES), Italy (it), Netherlands (nl), Sweden (sv), Russia (ru), Mexico (es-MX), India (en-IN/hi), Indonesia (id), Turkey (tr), Saudi Arabia (ar-SA)
|
|
40
|
+
|
|
41
|
+
### How to Choose
|
|
42
|
+
|
|
43
|
+
Evaluate each market on:
|
|
44
|
+
|
|
45
|
+
| Factor | Weight | How to assess |
|
|
46
|
+
|--------|--------|--------------|
|
|
47
|
+
| Market size | 30% | iPhone user base in country |
|
|
48
|
+
| Competition | 25% | How many localized competitors? |
|
|
49
|
+
| Effort | 20% | Translation complexity, cultural distance |
|
|
50
|
+
| Revenue potential | 15% | ARPU in the market |
|
|
51
|
+
| Strategic fit | 10% | Does your app solve a local need? |
|
|
52
|
+
|
|
53
|
+
## Localization Checklist
|
|
54
|
+
|
|
55
|
+
### Metadata Localization
|
|
56
|
+
|
|
57
|
+
For each target market:
|
|
58
|
+
|
|
59
|
+
- [ ] **Title** (30 chars) — Localized with market-specific keywords
|
|
60
|
+
- [ ] **Subtitle** (30 chars) — Localized with local keywords
|
|
61
|
+
- [ ] **Keyword field** (100 chars) — Completely new research per market
|
|
62
|
+
- [ ] **Description** (4000 chars) — Translated and culturally adapted
|
|
63
|
+
- [ ] **Promotional text** (170 chars) — Localized for local events/seasons
|
|
64
|
+
- [ ] **What's New** — Translated for each update
|
|
65
|
+
- [ ] **Screenshots** — Text overlays translated, culturally appropriate imagery
|
|
66
|
+
- [ ] **App Preview Video** — Subtitles or localized version
|
|
67
|
+
|
|
68
|
+
### Critical: Keywords Are NOT Translations
|
|
69
|
+
|
|
70
|
+
**The biggest localization mistake:** Translating English keywords directly.
|
|
71
|
+
|
|
72
|
+
Instead:
|
|
73
|
+
1. Run `keyword-research` for each target market separately
|
|
74
|
+
2. Understand how locals search (different terms, different intent)
|
|
75
|
+
3. Use local autocomplete suggestions
|
|
76
|
+
4. Check what local competitors use in their metadata
|
|
77
|
+
|
|
78
|
+
**Example:**
|
|
79
|
+
- English keyword: "budget tracker"
|
|
80
|
+
- German: "Haushaltsbuch" (household book) — NOT "Budget Tracker"
|
|
81
|
+
- Japanese: "家計簿" (household ledger) — completely different concept
|
|
82
|
+
- Spanish: "control de gastos" (expense control) — different framing
|
|
83
|
+
|
|
84
|
+
### Cultural Adaptation
|
|
85
|
+
|
|
86
|
+
| Element | What to check |
|
|
87
|
+
|---------|--------------|
|
|
88
|
+
| Screenshots | Currency symbols, date formats, number formats |
|
|
89
|
+
| Colors | Cultural color associations (red = luck in China, danger in West) |
|
|
90
|
+
| Imagery | Diverse representation, culturally appropriate |
|
|
91
|
+
| Tone | Formal vs informal varies by culture |
|
|
92
|
+
| Features | Highlight features relevant to local needs |
|
|
93
|
+
| Social proof | Use local press, local user counts if possible |
|
|
94
|
+
| Pricing | Local pricing expectations (purchasing power parity) |
|
|
95
|
+
|
|
96
|
+
## Localization Workflow
|
|
97
|
+
|
|
98
|
+
### Phase 1: Research (per market)
|
|
99
|
+
|
|
100
|
+
1. Analyze top 10 apps in your category in the target market
|
|
101
|
+
2. Run keyword research with local seed terms
|
|
102
|
+
3. Identify local competitors and their positioning
|
|
103
|
+
4. Understand local App Store trends
|
|
104
|
+
|
|
105
|
+
### Phase 2: Translation & Adaptation
|
|
106
|
+
|
|
107
|
+
**For metadata (title, subtitle, keywords):**
|
|
108
|
+
- Use native speakers with ASO knowledge (not just translators)
|
|
109
|
+
- Provide context: "This is an App Store title, must include [keyword]"
|
|
110
|
+
- Review with keyword data — does the translation include high-volume terms?
|
|
111
|
+
|
|
112
|
+
**For description:**
|
|
113
|
+
- Professional translation with cultural adaptation
|
|
114
|
+
- Not word-for-word — adapt examples, references, humor
|
|
115
|
+
- Maintain the same persuasive structure
|
|
116
|
+
|
|
117
|
+
**For screenshots:**
|
|
118
|
+
- Translate text overlays
|
|
119
|
+
- Adjust UI language if app is localized
|
|
120
|
+
- Consider local design preferences
|
|
121
|
+
|
|
122
|
+
### Phase 3: Launch & Monitor
|
|
123
|
+
|
|
124
|
+
1. Submit localized metadata
|
|
125
|
+
2. Monitor keyword rankings in each market (weekly)
|
|
126
|
+
3. Track conversion rate by country
|
|
127
|
+
4. Iterate based on performance data
|
|
128
|
+
|
|
129
|
+
## Output Format
|
|
130
|
+
|
|
131
|
+
### Localization Plan
|
|
132
|
+
|
|
133
|
+
For each recommended market:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
## [Country] — [Language]
|
|
137
|
+
|
|
138
|
+
Priority: [High/Medium/Low]
|
|
139
|
+
Estimated effort: [hours/days]
|
|
140
|
+
Expected impact: [download increase estimate]
|
|
141
|
+
|
|
142
|
+
Keywords (top 10):
|
|
143
|
+
| Keyword | Volume | Difficulty | English equivalent |
|
|
144
|
+
|---------|--------|------------|-------------------|
|
|
145
|
+
|
|
146
|
+
Metadata:
|
|
147
|
+
- Title: [localized title] ([X]/30 chars)
|
|
148
|
+
- Subtitle: [localized subtitle] ([X]/30 chars)
|
|
149
|
+
- Keywords: [localized keyword field] ([X]/100 chars)
|
|
150
|
+
|
|
151
|
+
Cultural notes:
|
|
152
|
+
- [specific adaptations needed]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Market Prioritization Matrix
|
|
156
|
+
|
|
157
|
+
| Market | Size | Competition | Effort | Revenue | Score | Priority |
|
|
158
|
+
|--------|------|-------------|--------|---------|-------|----------|
|
|
159
|
+
|
|
160
|
+
## Related Skills
|
|
161
|
+
|
|
162
|
+
- `keyword-research` — Run for each target market
|
|
163
|
+
- `metadata-optimization` — Write localized metadata
|
|
164
|
+
- `screenshot-optimization` — Localize screenshot designs
|
|
165
|
+
- `competitor-analysis` — Analyze local competitors
|