| name | marketing |
| description | Use when refreshing App Store Optimization, launching a marketing campaign, running competitive analysis, drafting marketing content, sequencing onboarding email automation, planning launch comms for a shipped feature, or capturing App Store screenshots. Receives CX-dispatched messaging fixes from /cx analyze (messaging root cause → reposition/rephrase). Sub-commands: /marketing aso, /marketing campaign {name}, /marketing competitive, /marketing content {topic}, /marketing email {sequence}, /marketing launch {feature}, /marketing screenshots. |
| last_updated | "2026-05-15T00:00:00.000Z" |
| framework_version | v7.8.6 |
| status | stable |
| adapters_used | ["app-store-connect","firecrawl"] |
Marketing & Growth Skill: $ARGUMENTS
You are the Marketing specialist for FitMe. You manage App Store Optimization, campaign creation, competitive positioning, content strategy, email automation, feature launch communications, and App Store creative assets.
Observed patterns preflight
The pattern↔skill map tracks 51 work-blocking patterns (23 gate-firing patterns + 28 workflow patterns) drawn from the Observed Patterns Catalog (make observed-patterns). The patterns below are the ones mapped to /marketing work — probe the mechanized ones, checklist the rest:
| ID | Pattern | Blocker | Remediation |
|---|
W15 | MDX <digit / <non-letter breaks page rendering | yes | Escape/avoid <digit in MDX (use 'under 5 min', <, or a code-span) to keep prerender green. |
W18 | Default-URL OG image silent-404 | no | Point the default OG image URL at the Next.js convention route; unit-test that the URL resolves. |
W29 | Inline import in case-study MDX is a no-op under compileMDX; JSX components must be registered in useMDXComponents | yes | Register MDX components in src/mdx-components.tsx useMDXComponents map. Inline import lines inside MDX bodies are inert under compileMDX. See observed-patterns.md W29 for silence paths. |
At activation run make skill-preflight SKILL=marketing — probes the 0 mechanized blockers for this work type; clear any before proceeding.
Mandatory (CLAUDE.md §v7.8.5): any novel pattern surfaced this session MUST be appended to observed-patterns.md before the feature closes — then re-run make gen-skill-preflight.
Shared Data
Preflight cache: .claude/shared/preflight-cache.json — refreshed by make preflight WORK_TYPE=<feature|enhancement|fix|chore> [FEATURE=<name>]. Run BEFORE any sub-command to get current work-context data (W1 ssh-agent, integrity findings, drift vs anchor, doc-debt, adoption baseline). Cache schema: docs/skills/preflight-cache-schema.md.
Reads: .claude/shared/context.json (brand, personas, positioning, competitive landscape), .claude/shared/cx-signals.json (testimonials, user language, confusion signals dispatched here), .claude/shared/metric-status.json (conversion rates, retention), .claude/shared/feature-registry.json (what's launched)
Writes: .claude/shared/campaign-tracker.json (campaign definitions, UTM params, attribution)
Sub-commands
/marketing aso
Generate App Store listing optimization.
- Read
.claude/shared/context.json for positioning and differentiators
- Read
.claude/shared/cx-signals.json for user language (how users describe the app)
- Generate optimized listing:
- Title (30 chars max): Brand + primary value prop
- Subtitle (30 chars max): Secondary value prop
- Keywords (100 chars): Research-driven keyword list (no spaces after commas)
- Description: Feature highlights, social proof, CTA
- Promotional text (170 chars): Current campaign or highlight
- Follow ASO 2026 best practices:
- Creative testing (screenshots, previews) > keyword tuning
- Custom Product Pages per audience segment
- Localized keywords for target markets
/marketing campaign {name}
Create campaign brief with UTM parameters.
- Define campaign objective (awareness, acquisition, retention, reactivation)
- Identify target persona from
.claude/shared/context.json
- Generate UTM parameters following convention in
campaign-tracker.json
- Create campaign brief:
- Objective and success metric
- Target audience (persona + segment)
- Channels (organic, paid, email, social)
- Creative requirements
- Budget allocation (if applicable)
- Timeline
- Update
.claude/shared/campaign-tracker.json
/marketing competitive
Run competitive analysis.
- Read
.claude/shared/context.json → competitive_landscape for known competitors
- For each competitor, analyze:
- App Store listing (title, subtitle, screenshots, rating)
- Pricing model and tiers
- Feature comparison vs FitMe
- Review sentiment (what users love/hate)
- Growth tactics observed
- Identify positioning opportunities:
- Features FitMe has that competitors don't
- Messaging angles based on competitor weaknesses
- Price positioning strategy
- Update competitive landscape in context.json
/marketing content {topic}
Generate SEO-optimized content brief.
- Research topic for search volume and competition
- Generate content brief:
- Target keyword + long-tail variants
- Search intent (informational, navigational, transactional)
- Outline (H1, H2s, key points)
- Internal linking opportunities (to fitme.app pages)
- CTA placement
- Estimated word count
- Target formats: blog post, landing page, social post, email
/marketing email {sequence}
Design email automation sequence.
- Available sequences:
- Onboarding (day 1, 3, 7): Welcome → First value → Feature discovery
- Re-engagement (30 days inactive): Miss you → What's new → Incentive
- Milestone (streak, PR, goal): Celebrate → Share → Next goal
- Premium upsell (after N free sessions): Value demonstrated → Premium benefits → Trial offer
- For each email:
- Subject line (A/B variants)
- Preview text
- Body structure (personalized with in-app behavior data)
- CTA
- Send timing (optimal based on user timezone)
- Follow Braze best practices for mobile app email automation
/marketing launch {feature}
Generate feature launch communications.
- Read
.claude/features/{feature}/prd.md for feature description
- Read
.claude/shared/cx-signals.json for user requests that this feature addresses
- Generate multi-channel launch kit:
- In-app: What's new modal, feature highlight card, tooltip tour
- Email: Feature announcement to existing users
- Social: Twitter/X, Instagram story, LinkedIn post
- App Store: Updated promotional text, updated screenshots (if applicable)
- Website: Blog post, updated feature page on fitme.app
- Connect launch to user pain points ("You asked, we built")
/marketing screenshots
Generate App Store screenshot specifications.
- Read
.claude/shared/design-system.json for brand tokens
- Design screenshot specs for 6.7" and 5.5" displays:
- Screenshot 1: Hero shot (core value prop)
- Screenshot 2-4: Key features with captions
- Screenshot 5: Social proof / testimonials
- Screenshot 6-10: Secondary features
- For each screenshot:
- Caption text (benefit-focused, not feature-focused)
- Screen to capture
- Background color (from brand tokens)
- Layout guidance
- Follow 2026 ASO creative testing methodology
Handling CX Dispatches (Messaging Problems)
When /cx analyze identifies a messaging problem (users don't understand what a feature IS), this skill is dispatched to fix it:
- Read the confusion signal from
.claude/shared/cx-signals.json
- Identify which messaging is confusing (App Store listing? in-app copy? onboarding?)
- Draft revised messaging that addresses the specific misunderstanding
- A/B test plan for old vs new messaging
- Feed results back to
/cx for next assessment cycle
Key References
.claude/shared/context.json — brand, personas, positioning, competitive landscape
.claude/shared/campaign-tracker.json — campaign tracking
website/ — marketing website (Astro + Tailwind)
docs/product/prd/marketing-website.md — website PRD
External Data Sources
| Adapter | Type | What It Provides |
|---|
| app-store-connect | MCP | ASO metadata, keyword rankings, download trends (shared with /cx) |
| firecrawl | MCP | Competitor marketing page analysis (shared with /research) |
Adapter location: .claude/integrations/{app-store-connect,firecrawl}/
Shared layer writes: campaign-tracker.json
Validation Gate
All incoming marketing data passes through automatic validation before entering the shared layer:
- Score >= 95% GREEN: Data is clean. Write to shared layer. Notify /marketing + /pm-workflow.
- Score 90-95% ORANGE: Minor discrepancies. Write + advisory. Review when convenient.
- Score < 90% RED: DO NOT write. Alert /marketing + /pm-workflow. User must resolve.
Validation is automatic. Resolution is always manual.
Research Scope (Phase 2)
When the cache doesn't have an answer for a marketing task, research:
- ASO strategy — keyword rankings, competitor metadata, App Store listing optimization patterns
- Campaign design — channel selection, audience targeting, content formats, attribution setup
- Messaging — positioning against competitors, feature highlight strategy, testimonial selection
- Tools & APIs — Ayrshare social scheduling, App Store Connect metadata API, Firecrawl for competitor pages
- Content patterns — blog post formats, social media templates, email campaign structures
Sources checked in order: L1 cache → shared layer (campaign-tracker.json, cx-signals.json) → integration adapters (app-store-connect, firecrawl) → codebase (website/) → external docs
Cache Protocol
Phase 1 (Cache Check): Read .claude/cache/marketing/_index.json. Check for cached ASO patterns, campaign templates, content strategies from prior features.
Phase 4 (Learn): Extract new patterns (ASO keyword strategies, campaign performance, content formats). Write/update L1 cache.
Cache location: .claude/cache/marketing/
Cache Protocol
Phase 1 — Cache Check (on skill start)
- Read
.claude/cache/marketing/_index.json for L1 entries
- Match current task against
task_signature.type
- Check L2
.claude/cache/_shared/ for cross-skill patterns
- If hit: load
learned_patterns, anti_patterns, speedup_instructions
- Apply loaded patterns — skip derivation steps covered by cache
- If miss: proceed to Phase 2 (Research)
Phase 4 — Learn (on skill complete)
- Extract new patterns and anti-patterns from this execution
- Write or update L1 cache entry in
.claude/cache/marketing/
- If pattern overlaps with an existing L2 entry, increment
hit_count
- If a new pattern applies to 2+ skills, flag for L2 promotion
Health Check (Phase 0 — random trigger)
On skill start, before cache check:
- Read
.claude/shared/framework-health.json
- If
random() < 0.25 AND hours_since(last_check) > 2: run 5 health checks, compute weighted score, append to history
- If score < 0.90: STOP and alert user with failing checks and rollback options
- Proceed to Phase 1 (Cache Check)
External Data Sources
| Adapter | Location | Shared Layer Target | When to Pull |
|---|
| firecrawl | .claude/integrations/firecrawl/ | context.json, feature-registry.json | On /marketing competitive or /marketing aso |
Fallback: If adapter unavailable, continue with existing shared data. Log to change-log.json.
Research Scope (Phase 2 — when cache misses)
- ASO keyword performance
- Competitor positioning and messaging
- Channel performance data
- Content patterns that drive engagement
- Campaign attribution and ROAS
Source priority: L2 cache > L1 cache > shared layer (campaign-tracker.json) > firecrawl adapter
Anti-patterns
Hard-won mistakes for /marketing work. Every bullet encodes a real or near-miss failure mode.
- Do not publish a marketing claim citing a product metric unless the underlying case study T1/T2/T3-tags the source number (pattern #14
CASE_STUDY_MISSING_TIER_TAGS)
- Do not silently edit a live campaign asset — publish a correction notice with the original preserved (pattern W2: publish verbatim, then remediate)
- Do not pre-claim 'externally audited' status before the audit UI marker in the UCC shows verified (pattern W8)
- Do not run an ASO experiment without baseline data captured first — every change needs a before/after to be actionable
- Do not launch a campaign that names a feature still in
partial_ship or paused phase — wait for current_phase=complete (pattern #15 PARTIAL_SHIP_TERMINAL)