# Plan 2 — Eblast Series (HTML emails for SendGrid)

> **For agentic workers:** REQUIRED SUB-SKILL: Use `superpowers:subagent-driven-development` (recommended) or `superpowers:executing-plans` to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Produce 4 production-ready HTML email templates that BT Web Group's existing CRM (with SendGrid integration) can send to the warm-prospect list — one per Tuesday for 4 weeks. Each template is responsive, dark-mode-aware, and uses email-safe HTML (tables, inline styles).

**Architecture:** One shared base template (`_base-email.html`) defines header, footer, primary button style, and the variable slots. Each of the 4 emails is a self-contained `.html` file with all styles inlined (no `<link>` stylesheets — Gmail, Outlook, Apple Mail strip them). All CTAs use full absolute URLs with UTM tags baked in. A Mustache-style `{{first_name}}` placeholder is the only personalization; the CRM merge-tag syntax may differ (e.g., `%first_name%` for SendGrid) — final find/replace happens at send time.

**Tech Stack:** Pure HTML4-compatible email (tables, inline styles, web-safe + Google Fonts fallback). No JS. No external CSS. Tested against the standard email client matrix.

**Reference spec:** `docs/superpowers/specs/2026-06-02-packages-launch-design.md` (§7 has full email copy + tactical standards).

---

## File Structure

```
emails/
├── _base-email.html             ← reference template (NOT sent; copy-paste source)
├── _email-style-tokens.md       ← email-safe color/font palette doc
├── eblast-01-pricing-changed.html
├── eblast-02-chatgpt-findability.html
├── eblast-03-5k-email-blast.html
├── eblast-04-no-lockin.html
└── README.md                     ← how to send via CRM + UTM scheme + send schedule
```

Working directory: `/Users/sanketlakhani/Work/btwebgroup-packages/emails/`

---

## Email Design Standards (apply to every template)

| Spec | Value |
|---|---|
| Max width | 600px |
| Single column | Yes (no multi-col except header/footer rows) |
| Background | `#f6f8fb` outer · `#ffffff` content card |
| Primary button | bg `#00b8c4`, text `#ffffff`, padding `14px 28px`, radius `6px`, font 16px bold |
| Body font | Inter + fallback stack: `'Inter', 'Helvetica Neue', Arial, sans-serif` |
| Headline font | Poppins + fallback: `'Poppins', 'Helvetica Neue', Arial, sans-serif` |
| Body color | `#1a2e4d` |
| Muted | `#5a6478` |
| Link color | `#00b8c4` |
| Body font size | 16px (body), 14px (footer), 28px (H1), 20px (H2) |
| Line height | 1.6 body, 1.3 headings |
| Pre-header text | hidden div at top, used for the inbox preview line |
| From name | `Sanket Lakhani` |
| From email | `sanket@btwebgroup.com` |
| Reply-to | `sanket@btwebgroup.com` (NOT noreply@) |
| Send window | Tuesday 10:00 AM America/New_York |
| Footer | Physical address (CAN-SPAM), unsubscribe link, 1-line about |

---

## Task 1: Build the shared email base template

**Files:**
- Create: `emails/_base-email.html`
- Create: `emails/_email-style-tokens.md`

This base is the source for all 4 emails. It is NOT sent on its own.

- [ ] **Step 1: Write the base template**

```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no">
<title>{{title}}</title>
<style>
  /* Client-specific resets */
  body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
  table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
  img { -ms-interpolation-mode: bicubic; border: 0; outline: none; display: block; }

  /* Mobile */
  @media only screen and (max-width: 620px) {
    .container { width: 100% !important; }
    .px { padding-left: 20px !important; padding-right: 20px !important; }
    .h1 { font-size: 24px !important; line-height: 32px !important; }
    .h2 { font-size: 18px !important; line-height: 26px !important; }
    .btn a { display: block !important; }
  }

  /* Dark mode */
  @media (prefers-color-scheme: dark) {
    .card { background: #ffffff !important; }
    /* Keep light-bg card; let outer bg darken naturally */
  }
</style>
</head>
<body style="margin:0;padding:0;background:#f6f8fb;font-family:'Inter','Helvetica Neue',Arial,sans-serif;color:#1a2e4d;">

<!-- Pre-header (hidden, shows as inbox preview) -->
<div style="display:none;font-size:1px;color:#f6f8fb;line-height:1px;max-height:0;max-width:0;opacity:0;overflow:hidden;">
  {{preheader}}
</div>

<!-- Outer wrapper -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background:#f6f8fb;">
  <tr>
    <td align="center" style="padding:24px 12px;">

      <!-- Container -->
      <table role="presentation" class="container" width="600" cellpadding="0" cellspacing="0" border="0" style="width:600px;max-width:600px;">

        <!-- Header -->
        <tr>
          <td class="px" style="padding:0 24px 16px;text-align:left;">
            <a href="https://btwebgroup.com" target="_blank" style="text-decoration:none;">
              <span style="font-family:'Poppins','Helvetica Neue',Arial,sans-serif;font-weight:700;font-size:18px;color:#1a2e4d;letter-spacing:-0.2px;">
                BT Web Group
              </span>
              <span style="font-family:'Inter','Helvetica Neue',Arial,sans-serif;font-size:13px;color:#5a6478;margin-left:8px;">
                · Lexington, KY
              </span>
            </a>
          </td>
        </tr>

        <!-- Card -->
        <tr>
          <td>
            <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" class="card" style="background:#ffffff;border-radius:12px;box-shadow:0 4px 16px rgba(26,46,77,0.06);">
              <tr>
                <td class="px" style="padding:32px;">

                  <!-- BODY START -->
                  <h1 class="h1" style="margin:0 0 16px;font-family:'Poppins','Helvetica Neue',Arial,sans-serif;font-size:28px;line-height:36px;color:#1a2e4d;font-weight:700;">
                    {{headline}}
                  </h1>

                  <p style="margin:0 0 16px;font-size:16px;line-height:1.6;color:#1a2e4d;">
                    {{body_paragraph}}
                  </p>

                  <!-- Primary CTA -->
                  <table role="presentation" cellpadding="0" cellspacing="0" border="0" class="btn" style="margin:24px 0;">
                    <tr>
                      <td bgcolor="#00b8c4" style="border-radius:6px;">
                        <a href="{{cta_url}}" target="_blank" style="display:inline-block;padding:14px 28px;font-family:'Poppins','Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:600;color:#ffffff;text-decoration:none;border-radius:6px;">
                          {{cta_label}}
                        </a>
                      </td>
                    </tr>
                  </table>

                  <p style="margin:24px 0 0;font-size:16px;line-height:1.6;color:#1a2e4d;">
                    Talk soon,<br>
                    <strong>Sanket</strong><br>
                    <span style="color:#5a6478;">BT Web Group · Lexington, KY · 20 years of doing this</span>
                  </p>

                  <p style="margin:24px 0 0;padding-top:24px;border-top:1px solid #e3e8f0;font-size:14px;color:#5a6478;">
                    <strong>P.S.</strong> {{ps}}
                  </p>
                  <!-- BODY END -->

                </td>
              </tr>
            </table>
          </td>
        </tr>

        <!-- Footer -->
        <tr>
          <td class="px" style="padding:24px;text-align:center;font-size:12px;color:#5a6478;line-height:1.6;">
            <p style="margin:0 0 8px;">
              BT Web Group · {{physical_address}}
            </p>
            <p style="margin:0 0 8px;">
              You're receiving this because we spoke about marketing for your business. If you'd rather not hear from us:
              <a href="{{unsubscribe_url}}" style="color:#5a6478;text-decoration:underline;">unsubscribe</a>.
            </p>
            <p style="margin:0;">
              Or reply directly to this email — it goes to Sanket's inbox.
            </p>
          </td>
        </tr>

      </table>
    </td>
  </tr>
</table>

</body>
</html>
```

- [ ] **Step 2: Document the style tokens**

Create `emails/_email-style-tokens.md`:

```markdown
# Email Style Tokens

Use these exact values in every email template (no CSS variables — email clients don't support them).

| Token | Value | Where used |
|---|---|---|
| Outer bg | `#f6f8fb` | body, outer wrapper |
| Card bg | `#ffffff` | content card |
| Text | `#1a2e4d` | body, headings |
| Text muted | `#5a6478` | footer, sub-text |
| Border | `#e3e8f0` | PS divider |
| Primary | `#00b8c4` | button bg, links |
| Primary hover | (not used in email) | — |
| Gold accent | `#f5b800` | rare — savings highlights |
| Body font | `'Inter','Helvetica Neue',Arial,sans-serif` | body, paragraph |
| Heading font | `'Poppins','Helvetica Neue',Arial,sans-serif` | h1, h2, button |
| Body size | 16px / 1.6 | paragraph |
| H1 size | 28px / 36px (mobile 24px) | headline |
| H2 size | 20px / 28px | section headers |
| Button padding | 14px 28px | primary CTA |
| Button radius | 6px | primary CTA |
| Container width | 600px | mobile drops to 100% |

## Variables in `_base-email.html`

- `{{title}}` — browser tab + email subject fallback (not the actual subject — that's set in the CRM)
- `{{preheader}}` — inbox preview text (hidden div)
- `{{headline}}` — H1
- `{{body_paragraph}}` — main body (multiple paragraphs allowed via `<p>` tags in HTML)
- `{{cta_label}}` — button text
- `{{cta_url}}` — button href (must include UTM params)
- `{{ps}}` — P.S. line
- `{{physical_address}}` — CAN-SPAM physical address (configure once)
- `{{unsubscribe_url}}` — CRM-generated unsubscribe link

Most CRMs use a different merge syntax (e.g., SendGrid's `%firstname%` or Mailchimp's `*|FNAME|*`). When pasting into the CRM, find-and-replace `{{first_name}}` to the CRM's merge tag. All other variables (preheader, headline, etc.) are filled in at template-creation time, not at send time.
```

- [ ] **Step 3: Render test**

Open the base in a browser to verify it renders cleanly even with raw `{{variable}}` placeholders visible:

Run: `open /Users/sanketlakhani/Work/btwebgroup-packages/emails/_base-email.html`

Expected: header, card, button, footer all rendered. Variables visible as literal text — that's fine for the base.

- [ ] **Step 4: Commit**

```bash
cd /Users/sanketlakhani/Work/btwebgroup-packages
git add emails/_base-email.html emails/_email-style-tokens.md
git commit -m "feat(emails): add base email template + style tokens"
```

---

## Task 2: Build Eblast 1 — "Our pricing changed. Here's why."

**Files:**
- Create: `emails/eblast-01-pricing-changed.html`

Spec §7 Eblast 1. Goal: click-through, plant seed about new pricing.

- [ ] **Step 1: Compose the email**

Copy `_base-email.html` to `eblast-01-pricing-changed.html`, then fill in:

- `{{title}}`: `Our pricing changed since we talked`
- `{{preheader}}`: `AI cut our delivery hours. We passed it to you.`
- `{{headline}}`: `Our pricing changed. Here's why.`
- Replace the single `{{body_paragraph}}` block with the full multi-paragraph body from spec §7 Eblast 1, formatted as separate `<p>` tags. Include the three tripwire mini-cards as a small inline table.
- `{{cta_label}}`: `See all three packages →`
- `{{cta_url}}`: `https://btwebgroup.com/packages?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=email1-pricing-changed`
- `{{ps}}`: `If $247 still feels like too much, hit reply — we'll find a way that works for you.`
- `{{physical_address}}`: confirm the real Lexington address with Sanket before send
- `{{unsubscribe_url}}`: leave as `{{unsubscribe_url}}` for the CRM to replace at send time

**Tripwire mini-cards** (insert above the primary CTA, replacing the simple paragraph):

```html
<p style="margin:0 0 16px;font-size:16px;line-height:1.6;">
  Three starter projects you can try for less than the cost of a dinner-for-two:
</p>

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 16px;">
  <tr>
    <td style="padding:16px;background:#f6f8fb;border-radius:8px;border-left:4px solid #00b8c4;">
      <p style="margin:0 0 4px;font-family:'Poppins',Arial,sans-serif;font-weight:700;color:#1a2e4d;font-size:16px;">
        🔹 5,000-Contact Email Blast — $247
      </p>
      <p style="margin:0;font-size:14px;color:#5a6478;line-height:1.5;">
        We send 5,000 emails to your list with AI-written, team-approved copy.
      </p>
    </td>
  </tr>
  <tr><td style="height:12px;line-height:12px;font-size:12px;">&nbsp;</td></tr>
  <tr>
    <td style="padding:16px;background:#f6f8fb;border-radius:8px;border-left:4px solid #00b8c4;">
      <p style="margin:0 0 4px;font-family:'Poppins',Arial,sans-serif;font-weight:700;color:#1a2e4d;font-size:16px;">
        🔹 AI SEO Audit + 5-Page Fix Pack — $297
      </p>
      <p style="margin:0;font-size:14px;color:#5a6478;line-height:1.5;">
        We audit your site, then actually fix 5 pages. Not just hand you a PDF.
      </p>
    </td>
  </tr>
  <tr><td style="height:12px;line-height:12px;font-size:12px;">&nbsp;</td></tr>
  <tr>
    <td style="padding:16px;background:#f6f8fb;border-radius:8px;border-left:4px solid #00b8c4;">
      <p style="margin:0 0 4px;font-family:'Poppins',Arial,sans-serif;font-weight:700;color:#1a2e4d;font-size:16px;">
        🔹 AI Landing Page Mockup — $247
      </p>
      <p style="margin:0;font-size:14px;color:#5a6478;line-height:1.5;">
        We design a high-conversion landing page in 5 business days. Yours to keep.
      </p>
    </td>
  </tr>
</table>

<p style="margin:0 0 16px;font-size:16px;line-height:1.6;color:#5a6478;">
  Cancel anytime. No contracts. Data is yours either way.
</p>
```

The opening greeting + reasoning paragraphs from spec §7 go above this block; the salutation + signature + PS from the base stay in place.

**Subject A/B options** (Sanket picks one or sets up the A/B test in CRM):
- A: `Our pricing changed since we talked`
- B: `Quick follow-up — about that quote`
- C: `Lexington update: new package pricing`

Document these in a comment at the top of the file:

```html
<!--
EBLAST 1 — "Our pricing changed. Here's why."
Send: Week 1, Tuesday 10:00 AM ET
Subject A/B options:
  A: Our pricing changed since we talked
  B: Quick follow-up — about that quote
  C: Lexington update: new package pricing
Preheader: AI cut our delivery hours. We passed it to you.
CTA: /packages?utm_source=eblast&utm_campaign=2026-06-relaunch&utm_content=email1-pricing-changed
Goal: Click-through to /packages (not direct purchase)
-->
```

- [ ] **Step 2: Render + visual QA**

Run: `open /Users/sanketlakhani/Work/btwebgroup-packages/emails/eblast-01-pricing-changed.html`

Acceptance:
- [ ] Renders without broken layout in Chrome at 600px and 375px viewport
- [ ] No raw `{{var}}` left except `{{first_name}}` (if used) and `{{unsubscribe_url}}` (CRM fills)
- [ ] Tripwire mini-cards stack and have left-border accent
- [ ] CTA button is prominent, single primary CTA in the email
- [ ] Word count between 150-300 words (spec target: 150-250)

- [ ] **Step 3: Commit**

```bash
git add emails/eblast-01-pricing-changed.html
git commit -m "feat(emails): eblast 1 — pricing changed"
```

---

## Task 3: Build Eblast 2 — "Can ChatGPT find your business?"

**Files:**
- Create: `emails/eblast-02-chatgpt-findability.html`

Spec §7 Eblast 2. Goal: direct purchase of AI SEO Audit + Fix tripwire.

- [ ] **Step 1: Compose the email**

Copy base, fill in:

- Subject A/B in HTML comment header:
  - A: `Can ChatGPT find your business?`
  - B: `Most Lexington businesses are invisible to AI search`
  - C: `Quick test: ask ChatGPT about your company`
- Preheader: `We fix it for $297. Real work, real fix.`
- Headline: `Can ChatGPT find your business?`
- Body (from spec §7 Eblast 2) — include the "try this right now" instruction, the AEO/GEO explanation, the 4-bullet "Here's what $297 gets you", the price comparison ($1,400 vs $297).
- 4-bullet block (after the explanatory paragraphs):

```html
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 20px;">
  <tr><td style="padding:8px 0;font-size:16px;line-height:1.5;color:#1a2e4d;">
    ✅ Our SEO specialists audit your full site (AI does the busywork — finding issues, comparing competitors — our team interprets and decides)
  </td></tr>
  <tr><td style="padding:8px 0;font-size:16px;line-height:1.5;color:#1a2e4d;">
    ✅ A clear list of what's blocking your AI search visibility
  </td></tr>
  <tr><td style="padding:8px 0;font-size:16px;line-height:1.5;color:#1a2e4d;">
    ✅ <strong>We actually fix 5 pages</strong> — meta titles, descriptions, headings, alt text, schema. Most agencies hand you a list. We hand you a fixed site.
  </td></tr>
  <tr><td style="padding:8px 0;font-size:16px;line-height:1.5;color:#1a2e4d;">
    ✅ Delivered in 5 business days
  </td></tr>
</table>

<p style="margin:0 0 16px;font-size:16px;line-height:1.6;">
  Comparable agency work elsewhere: <span style="color:#5a6478;">$1,400+</span>.<br>
  Your price today: <strong style="color:#1a2e4d;font-size:20px;">$297.</strong> One-time. No subscription.
</p>
```

- CTA label: `Get my AI SEO Audit + Fix Pack →`
- CTA URL: `https://btwebgroup.com/packages/ai-seo-audit-fix?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=email2-chatgpt-findability`
- PS: `The audit usually surfaces 3-5 problems most small business owners had no idea were there. Worth it just for that.`

- [ ] **Step 2: Render + QA**

Run: `open /Users/sanketlakhani/Work/btwebgroup-packages/emails/eblast-02-chatgpt-findability.html`

Same acceptance as Task 2 Step 2. Plus:
- [ ] The "try this right now" instruction stands out (use bold or a callout block)
- [ ] Price comparison ($1,400 strike vs $297 bold) is visually clear

- [ ] **Step 3: Commit**

```bash
git add emails/eblast-02-chatgpt-findability.html
git commit -m "feat(emails): eblast 2 — chatgpt findability"
```

---

## Task 4: Build Eblast 3 — "5,000 emails. We send. You watch results come in."

**Files:**
- Create: `emails/eblast-03-5k-email-blast.html`

Spec §7 Eblast 3. Goal: direct purchase of 5K Email Blast tripwire. Honest scarcity (limited fulfillment slots).

- [ ] **Step 1: Compose the email**

- Subject A/B:
  - A: `5,000 emails sent for $247`
  - B: `You have a customer list. We have an offer.`
  - C: `Need a sale this month? Here's the fastest way.`
- Preheader: `5 business days from "yes" to inbox.`
- Headline: `5,000 emails. Sent. In 5 business days. $247.`
- Body from spec §7 Eblast 3.
- 5-bullet "Here's exactly what you get" block, same `<table>` pattern as Eblast 2.
- Price block: `Comparable agency work elsewhere: $1,200–$1,800. Your price: $247.`
- CTA label: `Send my 5,000 emails →`
- CTA URL: `https://btwebgroup.com/packages/5k-email-blast?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=email3-5k-blast`
- PS: `We only have 10 fulfillment slots open in {{send_month}} — first-come-first-served because the delivery window is tight.`

Note: `{{send_month}}` is a placeholder — Sanket replaces with literal month name before sending (e.g., "June"). Document this in the file's header comment.

- [ ] **Step 2: Render + QA**

Run: `open /Users/sanketlakhani/Work/btwebgroup-packages/emails/eblast-03-5k-email-blast.html`

Same acceptance + verify the scarcity line is in the PS (more credible at the end than the top).

- [ ] **Step 3: Commit**

```bash
git add emails/eblast-03-5k-email-blast.html
git commit -m "feat(emails): eblast 3 — 5k email blast"
```

---

## Task 5: Build Eblast 4 — "If $247 still feels risky, read this."

**Files:**
- Create: `emails/eblast-04-no-lockin.html`

Spec §7 Eblast 4. Goal: convert holdouts via reassurance + introduce bundle option.

- [ ] **Step 1: Compose the email**

- Subject A/B:
  - A: `If $247 still feels risky, read this`
  - B: `Why we don't lock customers in (and why that matters)`
  - C: `Last call: 8 new client spots for {{send_month}}`
- Preheader: `Cancel any time. Your data, your business.`
- Headline: `If $247 still feels risky, read this.`
- Body from spec §7 Eblast 4 — empathy paragraph, 4-bullet "Here's how we're different", Lead Engine bundle highlight box, closing.

4-bullet differentiation block:

```html
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 20px;">
  <tr><td style="padding:10px 0;font-size:16px;line-height:1.5;">
    🔹 <strong>No contracts.</strong> Pay month-to-month, cancel any month, no penalty.
  </td></tr>
  <tr><td style="padding:10px 0;font-size:16px;line-height:1.5;">
    🔹 <strong>No data hostage.</strong> When you leave, we export your contacts, content, ads, designs, and reports within 5 business days. To you. Not to us.
  </td></tr>
  <tr><td style="padding:10px 0;font-size:16px;line-height:1.5;">
    🔹 <strong>No setup fees, no cancellation fees.</strong> Ever.
  </td></tr>
  <tr><td style="padding:10px 0;font-size:16px;line-height:1.5;">
    🔹 <strong>Real team in Lexington.</strong> Talk to a human, not a ticket queue.
  </td></tr>
</table>
```

Lead Engine bundle highlight box (after the bullets, before the dual CTA):

```html
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 24px;background:#f6f8fb;border-radius:12px;">
  <tr><td style="padding:24px;">
    <p style="margin:0 0 8px;font-family:'Poppins',Arial,sans-serif;font-weight:700;font-size:20px;color:#1a2e4d;">
      Lead Engine Bundle — $1,197/mo
    </p>
    <p style="margin:0 0 12px;font-size:16px;line-height:1.5;color:#1a2e4d;">
      PPC + SEO + Email — three channels, one team, one bill. Save $294/mo vs. buying separately.
    </p>
    <p style="margin:0;font-size:14px;color:#5a6478;">
      Includes a free 30-Day Lead Performance Review (worth $147) after your first month.
    </p>
  </td></tr>
</table>
```

Dual CTA (Eblast 4 has two primary CTAs — `See all packages` + `Book a 15-min call`):

```html
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 8px;">
  <tr>
    <td bgcolor="#00b8c4" style="border-radius:6px;">
      <a href="https://btwebgroup.com/packages?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=email4-no-lockin-packages" target="_blank" style="display:inline-block;padding:14px 28px;font-family:'Poppins',Arial,sans-serif;font-size:16px;font-weight:600;color:#ffffff;text-decoration:none;border-radius:6px;">
        See all packages →
      </a>
    </td>
    <td style="width:12px;">&nbsp;</td>
    <td style="border-radius:6px;border:2px solid #1a2e4d;">
      <a href="https://btwebgroup.com/contact?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=email4-no-lockin-call" target="_blank" style="display:inline-block;padding:12px 26px;font-family:'Poppins',Arial,sans-serif;font-size:16px;font-weight:600;color:#1a2e4d;text-decoration:none;">
        Book a 15-min call →
      </a>
    </td>
  </tr>
</table>
```

PS: `If you only do one thing: hit reply with the question, "what would you do for my business with $247?" — and we'll send a custom answer within 24 hours. Not a quote. An actual plan.`

- [ ] **Step 2: Render + QA**

Run: `open /Users/sanketlakhani/Work/btwebgroup-packages/emails/eblast-04-no-lockin.html`

Acceptance + verify dual-CTA buttons stack on mobile (mobile media query already handles `.btn a { display: block }` — but the table-wrapped dual-CTA pattern needs an additional mobile-only override; document in the file's HTML comment if not handled).

- [ ] **Step 3: Commit**

```bash
git add emails/eblast-04-no-lockin.html
git commit -m "feat(emails): eblast 4 — no lock-in / holdout conversion"
```

---

## Task 6: Email-client compatibility test

**Files:** (none — test only)

- [ ] **Step 1: Run a litmus check (free tier or paid)**

Options:
- **Litmus / Email on Acid** — paid, comprehensive. Render across 90+ clients.
- **Mail-tester.com** — free spam-score check (target: 9+/10).
- **Real-inbox test** — send each email to Gmail, Outlook.com, Apple Mail, Yahoo from the BT Web Group SendGrid account; visually verify each.

At minimum, do the real-inbox test:

```
For each of the 4 eblast HTML files:
1. Paste into the CRM as a new test email
2. Send to Sanket's personal Gmail + Outlook account
3. Verify: button renders as a button (not text), images load, no broken layout
4. Open on mobile (iOS Mail + Gmail app for Android)
5. Check inbox preview shows the preheader text
```

- [ ] **Step 2: Spam-score check**

For each eblast, send to `test@mail-tester.com` (free). Aim for 9+/10. Common fixes:
- Add SPF/DKIM/DMARC on `btwebgroup.com` (likely already done — verify)
- No image-only emails (we have plenty of text — good)
- Avoid spam-trigger words ("FREE", "ACT NOW", excessive caps)
- Include physical address + unsubscribe (already in base)
- Text-to-image ratio favors text (we have no images — perfect)

Document the score in `emails/README.md` per email.

- [ ] **Step 3: Document any fixes**

If any test reveals layout breakage or low spam scores, fix in the relevant `.html` file and commit:

```bash
git add emails/eblast-*.html
git commit -m "fix(emails): client compatibility + spam-score adjustments"
```

---

## Task 7: Write send playbook README

**Files:**
- Create: `emails/README.md`

- [ ] **Step 1: Write the playbook**

```markdown
# Eblast Series — Send Playbook

4 emails. One per Tuesday, 10:00 AM America/New_York. Sent from `sanket@btwebgroup.com` via existing CRM → SendGrid.

## Send schedule

| Week | Send date | File | Subject A/B options | Goal |
|---|---|---|---|---|
| 1 | Tue, week 1 | `eblast-01-pricing-changed.html` | "Our pricing changed since we talked" / "Quick follow-up — about that quote" / "Lexington update: new package pricing" | Click-through to /packages |
| 2 | Tue, week 2 | `eblast-02-chatgpt-findability.html` | "Can ChatGPT find your business?" / "Most Lexington businesses are invisible to AI search" / "Quick test: ask ChatGPT about your company" | Direct purchase of AI SEO Audit + Fix |
| 3 | Tue, week 3 | `eblast-03-5k-email-blast.html` | "5,000 emails sent for $247" / "You have a customer list. We have an offer." / "Need a sale this month? Here's the fastest way." | Direct purchase of 5K Email Blast |
| 4 | Tue, week 4 | `eblast-04-no-lockin.html` | "If $247 still feels risky, read this" / "Why we don't lock customers in (and why that matters)" / "Last call: 8 new client spots for {month}" | Convert holdouts; introduce Lead Engine bundle |

## Before sending each email

1. Open the `.html` file. Copy entire contents.
2. In the CRM:
   - Create a new campaign named `2026-06-relaunch-emailN`
   - Paste HTML into the source/HTML view
   - Find-and-replace `{{first_name}}` → CRM merge tag (e.g., `%firstname%`)
   - Find-and-replace `{{send_month}}` → current month name (e.g., "June")
   - Find-and-replace `{{unsubscribe_url}}` → CRM-generated unsubscribe link (or leave as-is if CRM auto-substitutes)
   - Find-and-replace `{{physical_address}}` → confirmed Lexington physical address
   - Set From: `Sanket Lakhani <sanket@btwebgroup.com>`
   - Set Reply-To: `sanket@btwebgroup.com`
   - Set Subject: pick one of the three A/B options OR configure SendGrid's subject A/B test
3. Preview in CRM. Send a test to your own email. Visually check on desktop + mobile.
4. Schedule for Tuesday 10:00 AM ET. Use the warm-prospect list.

## UTM scheme

All CTAs use this template:
`https://btwebgroup.com/<path>?utm_source=eblast&utm_medium=email&utm_campaign=2026-06-relaunch&utm_content=emailN-<slug>`

These UTMs are read by the lead modal on btwebgroup.com (see Plan 1 Task 2) and stored with the lead record in the CRM. Use them to attribute purchases back to specific eblasts.

## Post-send checklist (per email)

After each send:
- [ ] Open rate ≥ 25% (target — warm list)
- [ ] Click rate ≥ 3-5%
- [ ] Reply rate ≥ 1-2% (replies go to Sanket personally — route them)
- [ ] Purchase rate ≥ 0.5-2% on tripwires
- [ ] Suppress bounces in CRM
- [ ] Remove unsubscribes immediately

## Post-series handoff (week 5+)

- **Opened but didn't buy:** drop into slower nurture sequence (1 email/month). Use rotation-pool tripwire offers (spec §4 items 4-10).
- **Clicked but didn't buy:** personal outreach from Sanket, not automated.
- **Bought a tripwire:** starts upsell sequence — Starter package offer 14 days after delivery.

## Spam-score log

After running mail-tester.com on each email, record the score here:

| Email | Score (target ≥9/10) | Issues to fix | Status |
|---|---|---|---|
| Eblast 1 | TBD | — | Not tested yet |
| Eblast 2 | TBD | — | Not tested yet |
| Eblast 3 | TBD | — | Not tested yet |
| Eblast 4 | TBD | — | Not tested yet |

(Update this table during Task 6 of this plan.)
```

- [ ] **Step 2: Commit**

```bash
git add emails/README.md
git commit -m "docs(emails): add send playbook README"
```

---

## Out of Scope for This Plan

- **Setting up the SendGrid sender authentication (SPF/DKIM/DMARC)** — assumed already done for `btwebgroup.com`. If not, that's a 30-min DNS task and should happen BEFORE sending Eblast 1.
- **Building the CRM-side automation for post-purchase upsell sequences** — covered in Plan 3 (Ops).
- **Cold-list emails** — this series targets warm prospects only.
- **Beyond-week-4 nurture sequence** — the post-series handoff describes the next phase; building those emails is a follow-up plan.
- **Image creation** — these emails are intentionally text-heavy (better deliverability, faster build, more authentic feel).

---

## Success Criteria

- 4 production-ready HTML emails in `emails/`
- Shared `_base-email.html` ensures consistent header/footer/styling
- Each email passes basic real-inbox visual test on Gmail + Outlook + Apple Mail
- Spam scores ≥ 9/10 from mail-tester.com
- README documents the entire send playbook so Sanket can hand it to an operator
