Version: 2.2 (Multi-Campaign)
Created: 2026-02-05
Trimmed: 2026-02-06
Multi-Campaign: 2026-02-07
Status: Ready for Execution
Based on: Firecrawl Agent test results (87% qualification rate, 25x speed improvement)
| Version | Date | Change |
|---|---|---|
| 2.0 | 2026-02-05 | Original plan with Firecrawl + 5-agent integration |
| 2.1 | 2026-02-06 | Stripped agent integration. Focus: Firecrawl pipeline only. See DR-2026-002. |
| 2.2 | 2026-02-07 | Added multi-campaign architecture (Part 7). Updated schema, skills, and file structure. Aligned with SKYMOD V2.1 pattern. |
This plan upgrades the Maad House GTM Engine with:
Expected Outcome:
OLD WORKFLOW (Inefficient):
Discovery → Enrich ALL → Analyze Website → Filter → Outreach
↓
(50% of enrichment wasted on non-qualifiers)
NEW WORKFLOW (Website-First):
Discovery → Website Analysis → Filter (NEEDS_REFRESH only) → Enrich Qualifiers → Outreach
↓
(Only enrich prospects with outdated websites)
┌─────────────────────────────────────────────────────────────────┐
│ GTM ENGINE V2.2 ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ CAMPAIGN ROUTER │ │
│ │ campaigns.json → select ICP, scoring, sequences │ │
│ │ [hospitality | legal-lawtech | ecommerce-dtc | ...] │ │
│ └───────────────────────┬────────────────────────────────┘ │
│ v │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ DISCOVERY │ │ WEBSITE FIRST │ │ FILTER │ │
│ │ │ │ │ │ │ │
│ │ Firecrawl Agent│───>│ Firecrawl Agent│───>│ Score 1-2 only │ │
│ │ (campaign ICP) │ │ (batch analyze)│ │ (NEEDS_REFRESH)│ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
│ │ │
│ ┌───────────┤ │
│ │ DEDUP │ │
│ │ Cross- │ │
│ │ campaign │ │
│ └───────────┘ │
│ │ │
│ v │
│ ┌────────────────┐ │
│ │ ENRICH │ │
│ │ │ │
│ │ Hunter.io │ │
│ │ Gemini Search │ │
│ │ Firecrawl │ │
│ └────────────────┘ │
│ │ │
│ v │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ OUTREACH │<───│ PERSONALIZE │<───│ QUALIFY │ │
│ │ │ │ │ │ │ │
│ │ Campaign-spec. │ │ Claude inline │ │ Campaign ICP │ │
│ │ sequences │ │ copy writing │ │ scoring model │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
| Stage | Tool | What It Does |
|---|---|---|
| Campaign Select | campaigns.json | Load campaign-specific ICP, scoring, sequences |
| Discovery | Firecrawl Agent | Find businesses matching campaign ICP criteria |
| Website Analysis | Firecrawl Agent | Batch score website design quality |
| Filter | Pipeline logic | Keep score 1-2 only (NEEDS_REFRESH) |
| Deduplication | Pipeline index | Check against ALL campaigns before adding |
| Enrichment | Hunter.io + Gemini + Firecrawl | Contacts, research, deep scrape |
| Qualification | Campaign ICP scoring | Campaign-specific scoring model and weights |
| Personalization | Claude (inline) | Email copy using campaign-specific templates |
| Outreach | Outlook MCP | Send campaign-specific sequences |
File: Maad House/Marketing/GTM/skills/lead-source/SKILL.md
```markdown
Updated: 2026-02-07 | Uses Firecrawl Agent with website-first qualification. Campaign-aware.
/lead-source hospitality 20 Manchester # Find 20 for hospitality campaign in Manchester
/lead-source legal-lawtech 15 London # Find 15 for legal-lawtech campaign in London
/lead-source ecommerce-dtc 10 # Find 10 for ecommerce-dtc campaign (UK-wide)
/lead-source --refresh # Re-run last search
campaigns.json → validate campaign ID exists and status is activecampaigns/{campaign-id}/icp-definition.md → extract discovery criteriacampaigns.json[campaign].scoringcampaign: "{campaign-id}"Discovery queries are loaded from campaigns/{campaign-id}/icp-definition.md. Each campaign has its own discovery criteria, search terms, and qualification signals.
// Load campaign ICP for search criteria
const campaign = campaigns[campaignId];
const icp = loadICP(campaign.icpFile);mcp__firecrawl__firecrawl_agent({
prompt: Find ${count} UK ${icp.industry} businesses in ${location} that:
- ${icp.discoveryFilters.join('\n - ')}
For each business, provide:
- Company name
- Website URL
- Location (city)
- Brief description
- Any growth signals observed
,
schema: {
"type": "object",
"properties": {
"businesses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"company_name": {"type": "string"},
"website": {"type": "string"},
"location": {"type": "string"},
"description": {"type": "string"},
"growth_signals": {
"type": "array",
"items": {"type": "string"}
}
}
}
}
}
}
})
mcp__firecrawl__firecrawl_agent({
prompt: Analyze each website and score design quality on this scale: 5: Modern, professional (2024-2026 design trends)
4: Good but slightly dated (2022-2023)
3: Functional but clearly dated (2019-2021)
2: Outdated, needs refresh (2016-2018)
1: Very outdated, poor UX (pre-2016)
Consider:
- Visual design and aesthetics
- Mobile responsiveness
- Navigation and UX
- Loading speed indicators
- Content freshness
Provide score, reasoning, and specific observations.
,
urls: [/ discovered website URLs /],
schema: {
"type": "object",
"properties": {
"analyses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {"type": "string"},
"design_score": {"type": "integer", "minimum": 1, "maximum": 5},
"reasoning": {"type": "string"},
"specific_issues": {
"type": "array",
"items": {"type": "string"}
},
"mobile_friendly": {"type": "boolean"},
"estimated_age": {"type": "string"}
}
}
}
}
}
})
Before adding to pipeline, check ALL campaigns for duplicate contacts:
for (const prospect of qualified) {
// Check website domain against ALL campaigns in index.json
const existing = pipeline.prospects.find(p =>
p.company.website === prospect.website
); if (existing && existing.campaign !== campaignId) {
logSkipped(prospect, Already in campaign: ${existing.campaign});
continue; // Same company = skip (don't double-contact)
}
if (existing && existing.campaign === campaignId) {
logSkipped(prospect, "Already in this campaign");
continue;
}
}
Cross-campaign dedup rules:
company.website across ALL campaigns before addingOnly add prospects with design_score 1-2 (NEEDS_REFRESH) that pass dedup:
for (const prospect of analyses) {
if (prospect.design_score <= 2 && !isDuplicate(prospect)) {
addToPipeline({
...prospect,
campaign: campaignId, // Tag with campaign
website_score: prospect.design_score,
website_assessment: prospect.reasoning,
website_issues: prospect.specific_issues,
stage: "website_qualified",
qualified_for_enrichment: true
});
} else {
logSkipped(prospect, "Modern website - not a priority");
}
}
Lead Sourcing Complete — Campaign: hospitalityQuery: 20 UK hospitality Manchester
Found: 23 businesses
Website Analysis: 23 analyzed
Results:
Score 1-2 (NEEDS_REFRESH): 15 - Added to pipeline
Score 3 (BORDERLINE): 4 - Logged for review
Score 4-5 (MODERN): 4 - Skipped
Cross-campaign duplicates: 0 - Skipped
Qualification Rate: 65%
New Prospects Added (campaign: hospitality):
MH-2026-051 The Northern Quarter Kitchen (Score: 2)
MH-2026-052 Manchester Boutique Hotel (Score: 1)
MH-2026-053 Didsbury Dining Co (Score: 2)
... +12 more
Time: 38 seconds
Next: Run /lead-enrich hospitality --batch 15 to complete qualification
2.2 /lead-enrich (UPDATED)
File: Maad House/Marketing/GTM/skills/lead-enrich/SKILL.md
markdown
Updated: 2026-02-07 | Only enriches website-qualified prospects. Cross-campaign dedup on contacts.
/lead-enrich hospitality MH-2026-051 # Single prospect in campaign
/lead-enrich hospitality --batch 10 # Next 10 website-qualified in campaign
/lead-enrich legal-lawtech --tier A # Re-enrich A-tier in legal campaign
website_qualified: true or stage: "website_qualified"campaign field must match the specified campaignconst emailCollision = pipeline.prospects.find(p =>
p.contact?.email === foundEmail && p.campaign !== campaignId
);
if (emailCollision) {
flag("Contact already in campaign: " + emailCollision.campaign);
// Notify but continue — different campaign may target different contact at same company
}
// Try Email Finder first (most efficient)
mcp__hunter__Email-Finder({
domain: prospect.website,
first_name: prospect.contact?.first_name,
last_name: prospect.contact?.last_name
})// If no name known, use Domain Search
mcp__hunter__Domain-Search({
domain: prospect.website
})
// Verify found email
mcp__hunter__Email-Verifier({
email: found_email
})
Decision Maker Priority:
mcp__gemini-text__gemini-search({
query: "${prospect.company_name}" UK news expansion funding 2025 2026
})
Extract:
mcp__firecrawl__firecrawl_scrape({
url: prospect.website,
formats: ["markdown"],
includePaths: ["/about", "/team", "/contact"]
})
Extract:
Based on gathered data, generate:
Load scoring model from campaigns.json[campaign].scoring:
const weights = campaign.scoring.weights;
// Each campaign can define its own weight distribution
// Default: Firmographic (35), Buying Intent (40), Accessibility (25)
// Legal might weight "outsourcing tendency" higher
// DTC might weight "growth signals" higher
Apply campaign-specific scoring:
MH-2026-051 Enriched: The Northern Quarter Kitchen
Campaign: hospitalityCompany: The Northern Quarter Kitchen (Hospitality - Restaurant)
Website: nqkitchen.co.uk | Design Score: 2/5 (outdated)
Signals: Expansion (new location), Hiring (chef de partie)
Cross-campaign check: No collisions
Contact: James Morrison (Founder)
Email: james@nqkitchen.co.uk Verified (92% confidence)
LinkedIn: linkedin.com/in/jamesmorrison-nqk
Pain Point: Expanding to second location but website doesn't
reflect brand quality. Instagram has 12K followers but website
looks like 2018.
Portfolio Match: Byron (multi-location restaurant rebrand)
Hook: "Your Instagram shows a packed house every night, but your
website tells a different story. With the Ancoats location coming..."
ICP Score: 82/100 | Tier: A (hospitality scoring model)
Stage: website_qualified -> enriched
2.3 /outreach-draft (UPDATED)
File: Maad House/Marketing/GTM/skills/outreach-draft/SKILL.md
markdown
Updated: 2026-02-07 | Inline personalized copy using campaign-specific templates and proof points
/outreach-draft hospitality MH-2026-051 T1 # Generate T1 for hospitality campaign
/outreach-draft legal-lawtech MH-2026-075 T1 # Generate T1 for legal campaign
/outreach-draft hospitality --batch due # All due today in hospitality
/outreach-draft --batch due # All due today across ALL campaigns
campaigns/{campaign-id}/outreach-sequences/campaigns/{campaign-id}/collateral/campaigns/{campaign-id}/positioning.mdClaude writes the email inline using:
campaigns/{campaign-id}/collateral/| Campaign | Primary Proof Point | Portfolio Match |
|---|---|---|
| hospitality | Byron, Mother Clucker, Forecourt Eye | Restaurant/hotel rebrand |
| legal-lawtech | Linkilaw (full rebrand + website) | Law firm digital transformation |
| ecommerce-dtc | SKYMOD (own brand, full attribution) | DTC brand build from scratch |
| lifestyle-wellness | Hospitality portfolio transfers | Experience-brand design |
Use standard template with variable substitution:
Hi {{first_name}},{{opening_hook}}
We recently helped {{portfolio_company}} with a similar challenge -
{{portfolio_outcome}}.
Maad House specializes in brand and web design for UK {{industry}}
businesses. Would a 15-minute call next week be useful?
Best,
Reece
maad.house
For batch generation:
Email Draft: LEAD-051 - T1
To: james@nqkitchen.co.uk
Subject: Quick thought on NQ Kitchen + Ancoats
Hi James,
Your Instagram shows a packed house every night - clearly NQ Kitchen
has found its crowd. But your website tells a different story. With
the Ancoats location coming, there's a window to bring the two in line.
We helped Byron refresh their brand across 50+ locations while they
were expanding. The result: a cohesive identity that travels.
Worth a 15-minute chat to see if there's a fit?
Reece
Maad House
maad.house
Personalization Score: 9/10
Status: Draft (ready for review)
/lead-source skill with website-first workflow/lead-enrich skill with pre-condition/outreach-draft skillcampaigns.json campaign registrycampaigns/hospitality/ — Migrate existing ICP, positioning, sequences
- [ ] campaigns/legal-lawtech/ — Create ICP (Linkilaw case study), positioning, sequences
- [ ] campaigns/ecommerce-dtc/ — Create ICP (SKYMOD case study), positioning, sequences
- [ ] campaigns/lifestyle-wellness/ — Create ICP, positioning, sequencescampaign field to all existing prospects
- [ ] Restructure stats to byCampaign nesting
- [ ] Add cross-campaign dedup rules| Metric | Before | Target | Measurement |
|---|---|---|---|
| Time per 15 prospects | 15 min | <1 min | Stopwatch |
| Website qualification rate | ~50% | >70% | Qualified / Discovered |
| Enrichment waste | 50% | <15% | Skipped modern / Total |
| Metric | Target (per campaign) | Measurement |
|---|---|---|
| Pipeline size | 25+ qualified per active campaign | Pipeline index, filter by campaign |
| A-tier prospects | 5+ per campaign | Tier counts by campaign |
| Reply rate | >5% | Replies / Sent, per campaign |
| Meeting rate | >2% | Meetings / Sent, per campaign |
| Meetings booked | 2-3 per campaign | Stage tracking |
| Active campaigns | 2+ | campaigns.json status counts |
| Cross-campaign dedup rate | <10% collision | Dedup log |
| Metric | Target | Measurement |
|---|---|---|
| Active campaigns | 3-4 | campaigns.json |
| Total pipeline | 150+ across all campaigns | Pipeline index |
| Clients won | 4-8 across all campaigns | CRM |
| Revenue attributed | £20K-80K | Invoicing |
| GTM ROI | >10x | Revenue / (Time + Tools) |
| Best-performing campaign | Identified | Compare reply/meeting rates |
Confirmed Working:
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field_name": {"type": "string"}
}
}
}
}
}
Credit Efficiency:
Typical: 2 credits per prospect
Best For:
Campaign is a first-class object encapsulating everything needed to run an independent outbound motion: ICP, scoring model, outreach sequences, collateral, geography, and cadence. All campaigns share a single pipeline (index.json) with cross-campaign deduplication.
Aligned with SKYMOD GTM V2.1 — same architecture, different campaigns.
campaigns.json){
"campaigns": [
{
"id": "hospitality",
"name": "UK Premium Hospitality",
"status": "active",
"priority": 1,
"icpFile": "campaigns/hospitality/icp-definition.md",
"positioningFile": "campaigns/hospitality/positioning.md",
"sequencesDir": "campaigns/hospitality/outreach-sequences/",
"collateralDir": "campaigns/hospitality/collateral/",
"geography": ["GB"],
"stages": ["discovered", "website_qualified", "enriched", "outreach_started", "replied", "meeting_booked", "proposal_sent", "won", "lost"],
"touchCount": 3,
"cadence": { "t1_to_t2": 5, "t2_to_t3": 7 },
"scoring": {
"model": "website-first",
"weights": { "firmographic": 35, "buying_intent": 40, "accessibility": 25 }
},
"proofPoints": ["Byron", "Mother Clucker", "Forecourt Eye"]
},
{
"id": "legal-lawtech",
"name": "UK Legal & LawTech",
"status": "planned",
"priority": 2,
"geography": ["GB"],
"scoring": {
"model": "website-first",
"weights": { "firmographic": 30, "buying_intent": 40, "accessibility": 30 }
},
"proofPoints": ["Linkilaw"]
},
{
"id": "ecommerce-dtc",
"name": "UK E-Commerce / DTC Brands",
"status": "planned",
"priority": 3,
"geography": ["GB"],
"scoring": {
"model": "website-first",
"weights": { "firmographic": 30, "buying_intent": 45, "accessibility": 25 }
},
"proofPoints": ["SKYMOD"]
},
{
"id": "lifestyle-wellness",
"name": "UK Lifestyle & Wellness",
"status": "planned",
"priority": 4,
"geography": ["GB"],
"scoring": {
"model": "website-first",
"weights": { "firmographic": 35, "buying_intent": 40, "accessibility": 25 }
},
"proofPoints": ["Hospitality portfolio"]
}
]
}
planned → active → paused → archived
↑ │
└───────┘ (can unpause)
| Status | Meaning |
|---|---|
planned | ICP documented, not yet sourcing |
active | Actively sourcing, enriching, and outreaching |
paused | Temporarily stopped (e.g., capacity, seasonal) |
archived | Completed or abandoned, prospects remain in pipeline |
company.website across ALL campaigns before adding a new prospect| Attribute | Value |
|---|---|
| Status | Active (50 prospects, 11 with pitch decks) |
| ICP | UK hospitality SMBs (10-100 employees), premium, outdated websites |
| Proof Points | Byron, Mother Clucker, Forecourt Eye |
| Pitch Approach | Custom HTML pitch decks per prospect on maad.house |
| Key Differentiator | We redesign and build — not just deliver mockups |
| Blocker | Outlook auth expired for hello@maad.house |
| Attribute | Value |
|---|---|
| Status | Planned |
| ICP | UK law firms (50-500 staff), LawTech startups |
| Proof Points | Linkilaw (existing client — full rebrand + website) |
| Key Insight | 58% of law firms outsource design; 10.42% LinkedIn response rate (highest sector) |
| Messaging | "We built Linkilaw's brand from the ground up." |
| Discovery | Firecrawl on SRA directory + LegalTech directories |
| Estimated Activation | 4-5 days |
| Attribute | Value |
|---|---|
| Status | Planned |
| ICP | UK DTC brands (GBP 500K-10M revenue), Shopify-based, growth-stage |
| Proof Points | SKYMOD (own brand — branding, web design, ad creative, full results data) |
| Key Insight | No competitor can match this case study — Maad House built SKYMOD end-to-end |
| Messaging | "We don't just design brands. We built SKYMOD from scratch — here are the actual numbers." |
| Discovery | Shopify store directories, DTC brand lists, Product Hunt |
| Estimated Activation | 7-10 days (needs SKYMOD case study creation) |
| Attribute | Value |
|---|---|
| Status | Planned |
| ICP | UK lifestyle brands (gyms, spas, wellness studios, boutique fitness) |
| Proof Points | Hospitality portfolio transfers well visually |
| Key Insight | Natural extension from hospitality — "brands people experience in person" |
| Discovery | Wellness directories, ClassPass, boutique fitness listings |
| Estimated Activation | 3 days |
Every SKYMOD success strengthens the Maad House DTC pitch. Every DTC client validates the model:
SKYMOD wins customer → Maad House gets attribution
→ "We built this brand" → DTC prospects see real results
→ DTC client signs → Proves the model → More SKYMOD investment
→ Better SKYMOD results → Stronger case study → Loop continues
The ecommerce-dtc campaign gets stronger over time without additional marketing spend. This is a structural competitive advantage no other design agency can replicate.
| Step | Action | Notes |
|---|---|---|
| 1 | Create campaigns.json | Register all 4 campaigns |
| 2 | Create campaign folder structure | campaigns/{id}/ with ICP, positioning, sequences, collateral |
| 3 | Migrate hospitality content | Move existing ICP + sequences into campaigns/hospitality/ |
| 4 | Add campaign: "hospitality" to all 50 prospects | Single field addition to index.json |
| 5 | Restructure pipeline stats | byCampaign nesting |
| 6 | Create Legal campaign content | ICP + positioning + Linkilaw case study |
| 7 | Create DTC campaign content | ICP + positioning + SKYMOD case study |
| 8 | Create Lifestyle campaign content | ICP + positioning |
| 9 | Resolve Outlook auth blocker | Reece needs to re-authenticate |
Blocker: Step 9 (Outlook auth) blocks ALL outreach across all campaigns.
Both SKYMOD and Maad House GTM engines share the same multi-campaign architecture:
| Component | Shared |
|---|---|
| Campaign registry format | campaigns.json with same schema |
| Prospect object structure | Aligned field names and types |
| Pipeline stages concept | Per-campaign stage definitions |
| Cross-campaign deduplication | Same rules (website/contact collision check) |
| Outreach timing | Same cadence model in campaigns.json |
| Firecrawl Agent | Same discovery tool, different queries |
| Hunter.io | Same enrichment tool |
Differences:
| Component | SKYMOD | Maad House |
|---|---|---|
| Email sender | admin@skymod.watch | hello@maad.house |
| Pitch materials | 1-pager + Archive link | Custom HTML pitch decks |
| A-tier treatment | ~35 sec/batch | ~9 hrs/prospect (custom deck) |
| Sales motion | Transactional | Consultative |
| Deal size | EUR 2,320-3,090/batch | GBP 5K-50K projects |
| Qualification model | Recognition-first | Website-first |
{
"id": "MH-2026-051",
"campaign": "hospitality",
"company": {
"name": "The Northern Quarter Kitchen",
"website": "https://nqkitchen.co.uk",
"industry": "Hospitality",
"subIndustry": "Restaurant",
"size": "10-50",
"country": "GB",
"city": "Manchester"
}, "website_qualification": {
"score": 2,
"assessment": "Dated 2018 design, poor mobile experience",
"issues": [
"Non-responsive layout",
"PDF menus instead of web",
"No booking integration",
"Slow loading images"
],
"qualified": true,
"qualified_date": "2026-02-05"
},
"contact": {
"name": "James Morrison",
"role": "Founder",
"email": "james@nqkitchen.co.uk",
"linkedin": "https://linkedin.com/in/jamesmorrison",
"email_verified": true,
"email_confidence": 92
},
"research": {
"description": "Independent restaurant in Northern Quarter...",
"signals": ["Expansion to Ancoats", "Hiring chef de partie"],
"news": ["Featured in Manchester Evening News Jan 2026"],
"competitors": ["Mackie Mayor", "Rudy's Pizza"]
},
"personalization": {
"pain_point": "Growing brand with dated digital presence",
"portfolio_match": "Byron",
"hook": "Your Instagram shows a packed house every night..."
},
"scoring": {
"firmographic": 28,
"buying_intent": 35,
"accessibility": 19,
"total": 82,
"tier": "A"
},
"stage": "enriched",
"sequence": {},
"dates": {
"added": "2026-02-05",
"website_qualified": "2026-02-05",
"enriched": "2026-02-05",
"last_activity": "2026-02-05"
},
"folderPath": "prospects/northern-quarter-kitchen/"
}
| Field | Type | Description |
|---|---|---|
campaign | string | Campaign ID from campaigns.json. Required on every prospect. |
Valid values: Must match an ID in Marketing/GTM/campaigns.json
Cross-campaign dedup rules:
company.website across ALL campaigns before adding{
"version": "2.2",
"campaigns": ["hospitality", "legal-lawtech", "ecommerce-dtc", "lifestyle-wellness"],
"stats": {
"byCampaign": {
"hospitality": { "total": 50, "tiers": { "A": 11, "B": 20, "C": 15, "D": 4 } },
"legal-lawtech": { "total": 0, "tiers": {} },
"ecommerce-dtc": { "total": 0, "tiers": {} },
"lifestyle-wellness": { "total": 0, "tiers": {} }
}
},
"prospects": [ ... ]
}
Every prospect (all tiers) gets a dedicated folder:
Maad House/Sales/prospects/{company-slug}/
├── research.md # Company research (Firecrawl + manual)
├── prospect-{name-slug}.md # Decision-maker profile (one per contact)
├── outreach/ # All outreach communications
│ ├── t1.md # Touch 1 email draft/sent
│ ├── t2.md # Touch 2 follow-up
│ └── replies/ # Inbound replies
│ └── {date}-reply.md
├── assets/ # Visual files
│ ├── screenshot-current.png # Website screenshot
│ ├── mockup-*.png # Design mockups
│ └── logo-*.png # Logos
└── pitch/ # Pitch deck (A-tier)
└── index.html # Deployed to maad.house/pitches/{slug}/
| Pipeline Stage | What Gets Created |
|---|---|
Discovery (/lead-source) | Folder + stub research.md from Firecrawl data |
Enrichment (/lead-enrich) | prospect-{name}.md from Hunter.io data |
| Website Analysis | assets/screenshot-current.png from Firecrawl |
Personalization (/outreach-draft) | outreach/t1.md with email draft |
| Pitch Created | pitch/index.html for A-tier prospects |
| Reply Received | outreach/replies/{date}-reply.md |
pipeline/index.json includes folderPath for each prospect:
{
"id": 2,
"company": "Mowgli Street Food",
"folderPath": "prospects/mowgli/",
...
}
When a prospect replies:
pipeline/index.json → get folderPathresearch.md for company contextprospect-{name}.md for contact personality/styleoutreach/t1.md to see exactly what was sentassets/ for any visual contextoutreach/replies/{date}-reply.mdReusable templates in Sales/prospects/_template/:
research-template.md — company research structureprospect-template.md — contact profile structureoutreach-template.md — email draft structureMaad House/
├── Marketing/
│ └── GTM/
│ ├── gtm-engine-build-plan.md # Original V1 plan
│ ├── gtm-engine-v2-implementation.md # This document (V2.2)
│ ├── multi-campaign-architecture.md # Architecture reference
│ ├── firecrawl-agent-test-results.md # Test validation
│ ├── campaigns.json # Campaign registry (NEW)
│ │
│ ├── campaigns/ # Per-campaign content (NEW)
│ │ ├── hospitality/ # Migrated from current ICP
│ │ │ ├── icp-definition.md
│ │ │ ├── positioning.md
│ │ │ ├── outreach-sequences/
│ │ │ │ ├── t1-cold-intro.md
│ │ │ │ ├── t2-follow-up.md
│ │ │ │ └── t3-breakup.md
│ │ │ └── collateral/
│ │ │ └── pitch-decks/ # Custom per-prospect decks
│ │ │
│ │ ├── legal-lawtech/
│ │ │ ├── icp-definition.md
│ │ │ ├── positioning.md
│ │ │ ├── outreach-sequences/
│ │ │ └── collateral/
│ │ │ └── linkilaw-case-study.md
│ │ │
│ │ ├── ecommerce-dtc/
│ │ │ ├── icp-definition.md
│ │ │ ├── positioning.md
│ │ │ ├── outreach-sequences/
│ │ │ └── collateral/
│ │ │ └── skymod-case-study.md
│ │ │
│ │ └── lifestyle-wellness/
│ │ ├── icp-definition.md
│ │ ├── positioning.md
│ │ ├── outreach-sequences/
│ │ └── collateral/
│ │
│ ├── skills/
│ │ ├── lead-source/SKILL.md # UPDATED (campaign-aware)
│ │ ├── lead-enrich/SKILL.md # UPDATED (cross-campaign dedup)
│ │ └── outreach-draft/SKILL.md # UPDATED (campaign templates)
│ │
│ └── [LEGACY — icp-definition.md, sequences/ stay until migration]
│
├── Sales/
│ ├── prospects/ # Per-prospect folders (all campaigns)
│ │ ├── _template/ # Reusable templates
│ │ ├── mowgli/ # hospitality campaign
│ │ │ ├── research.md
│ │ │ ├── prospect-lucy-worth.md
│ │ │ ├── outreach/t1.md
│ │ │ ├── assets/
│ │ │ └── pitch/index.html
│ │ ├── linkilaw/ # legal-lawtech campaign (future)
│ │ └── ... (50+ prospects across all campaigns)
│ ├── pipeline/
│ │ ├── index.json # SINGLE pipeline (all campaigns, with campaign field)
│ │ └── SCHEMA.md # Updated with campaign field + dedup rules
│ └── outbox/ # Archive of sent emails
Document Version: 2.2 (Multi-Campaign) | Created: 2026-02-05 | Trimmed: 2026-02-06 | Multi-Campaign: 2026-02-07 | Ready for Execution