$npx -y skills add indranilbanerjee/digital-marketing-pro --skill context-engineLoad brand context for marketing tasks. Use when: setting up brands, switching context, or needing industry benchmarks.
| 1 | # Context Engine — Shared Marketing Intelligence |
| 2 | |
| 3 | ## When to Use This Skill |
| 4 | |
| 5 | - User is setting up a new brand or project for marketing |
| 6 | - User switches between brands/clients (agency use case) |
| 7 | - Any other marketing skill needs brand context, industry data, compliance rules, or platform specs |
| 8 | - User asks about industry benchmarks, platform requirements, or regulatory compliance |
| 9 | |
| 10 | ## Required Context |
| 11 | |
| 12 | This skill loads and manages: |
| 13 | 1. **Brand Profile** — identity, voice, audiences, competitors, goals (from `~/.claude-marketing/brands/`) |
| 14 | 2. **Industry Profiles** — benchmarks, KPIs, channel effectiveness per industry (see `industry-profiles.md`) |
| 15 | 3. **Compliance Rules** — geographic privacy laws + industry regulations (see `compliance-rules.md`) |
| 16 | 4. **Platform Specs** — character limits, image sizes, algorithm signals per platform (see `platform-specs.md`) |
| 17 | 5. **Scoring Rubrics** — standardized evaluation criteria for all content types (see `scoring-rubrics.md`) |
| 18 | |
| 19 | ## Brand Profile Management |
| 20 | |
| 21 | ### Loading a Brand |
| 22 | |
| 23 | 1. Check `~/.claude-marketing/brands/_active-brand.json` for the currently active brand |
| 24 | 2. If active brand exists, load `~/.claude-marketing/brands/{slug}/profile.json` |
| 25 | 3. If no active brand, prompt: "No active brand configured. Run /digital-marketing-pro:brand-setup to create one, or tell me about your brand and I'll help set it up." |
| 26 | |
| 27 | ### Brand Profile Schema |
| 28 | |
| 29 | ```json |
| 30 | { |
| 31 | "brand_name": "", |
| 32 | "brand_slug": "", |
| 33 | "created_at": "", |
| 34 | "updated_at": "", |
| 35 | "schema_version": "1.0.0", |
| 36 | "identity": { |
| 37 | "tagline": "", |
| 38 | "mission": "", |
| 39 | "vision": "", |
| 40 | "values": [], |
| 41 | "unique_selling_proposition": "", |
| 42 | "positioning_statement": "", |
| 43 | "elevator_pitch": "" |
| 44 | }, |
| 45 | "business_model": { |
| 46 | "type": "", |
| 47 | "revenue_model": "", |
| 48 | "price_range": "", |
| 49 | "sales_cycle_length": "", |
| 50 | "average_deal_size": "", |
| 51 | "customer_lifetime_value": "" |
| 52 | }, |
| 53 | "industry": { |
| 54 | "primary": "", |
| 55 | "secondary": [], |
| 56 | "regulated": false, |
| 57 | "regulation_codes": [], |
| 58 | "compliance_notes": "" |
| 59 | }, |
| 60 | "target_markets": [], |
| 61 | "brand_voice": { |
| 62 | "formality": 5, |
| 63 | "energy": 5, |
| 64 | "humor": 3, |
| 65 | "authority": 5, |
| 66 | "personality_traits": [], |
| 67 | "tone_keywords": [], |
| 68 | "avoid_words": [], |
| 69 | "prefer_words": [], |
| 70 | "this_not_that": [], |
| 71 | "sample_content": [] |
| 72 | }, |
| 73 | "channels": { |
| 74 | "active": [], |
| 75 | "primary": "", |
| 76 | "handles": {} |
| 77 | }, |
| 78 | "competitors": [], |
| 79 | "goals": { |
| 80 | "primary_objective": "", |
| 81 | "kpis": [], |
| 82 | "budget_range": "", |
| 83 | "team_size": "" |
| 84 | } |
| 85 | } |
| 86 | ``` |
| 87 | |
| 88 | ### Switching Brands |
| 89 | |
| 90 | When user says "switch to [brand name]": |
| 91 | 1. Run: `python "${CLAUDE_PLUGIN_ROOT}/scripts/setup.py" --switch-brand SLUG` |
| 92 | 2. The script handles fuzzy matching, validation, and updates `_active-brand.json` |
| 93 | 3. Confirm: "Switched to [brand_name]. All marketing outputs will now use this brand's voice, compliance rules, and context." |
| 94 | |
| 95 | Or use: `/digital-marketing-pro:switch-brand` |
| 96 | |
| 97 | ## How Other Modules Use This Skill |
| 98 | |
| 99 | Every module should: |
| 100 | 1. Check if an active brand exists before producing marketing outputs |
| 101 | 2. Load relevant industry profile for benchmarks and channel recommendations |
| 102 | 3. Auto-apply compliance rules based on brand's `target_markets` and `industry.regulation_codes` |
| 103 | 4. Reference platform specs when creating platform-specific content |
| 104 | 5. Use scoring rubrics when evaluating or grading content quality |
| 105 | 6. Use **adaptive scoring** — run `adaptive-scorer.py` to get brand-specific weights before content scoring |
| 106 | 7. **Save campaign data** — use `campaign-tracker.py` to persist plans, performance, and insights |
| 107 | 8. **Check past campaigns** — before making recommendations, check if similar campaigns exist in brand history |
| 108 | |
| 109 | ## Business Model Types |
| 110 | |
| 111 | The following types trigger different funnel models, KPI frameworks, and channel strategies: |
| 112 | |
| 113 | - `B2B_SaaS` — MRR/ARR focused, product-led or sales-led growth |
| 114 | - `B2C_eCommerce` — ROAS focused, product catalog marketing |
| 115 | - `B2C_DTC` — Direct-to-consumer brand building + performance |
| 116 | - `B2B_Services` — Thought leadership, long sales cycles |
| 117 | - `Local_Business` — Google Business Profile, local SEO, reviews |
| 118 | - `Agency` — Multi-client management, white-label outputs |
| 119 | - `Creator` — Personal brand, audience building, monetization |
| 120 | - `Enterprise` — ABM, buying committees, complex sales |
| 121 | - `Non_Profit` — Donor acquisition, awareness, advocacy |
| 122 | - `Marketplace` — Two-sided acquisition, liquidity, trust |
| 123 | |
| 124 | ## Brand Voice Scoring |
| 125 | |
| 126 | The brand voice scorer (`brand-voice-scorer.py`) automatically normalizes profile data: |
| 127 | - Reads `brand_voice.formality` (1-10 int scale) → converts to 0.0-1.0 float internally |
| 128 | - Maps `brand_voice.prefer_words` → `preferred_words`, `brand_voice.avoid_words` → `avoided_words` |
| 129 | - Supports both the full profile schema (from brand-setup) and legacy direct schemas |
| 130 | |
| 131 | ## Data Persistence |
| 132 | |
| 133 | Campaign data, performance snap |