← back to Marketing Command Center

data/campaign-drafts/build-suede-edit.mjs

114 lines

// Build "The Suede Edit" DW email — Commercial-Edit template, VERIFIED live data 2026-08-26.
// Novasuede™ + Ultrasuede™ + their benefits, links to collections. Clone of build-classics.mjs.
import fs from 'fs';
const SITE = 'https://www.designerwallcoverings.com';   // www is canonical (bare host 301s)
const PDP  = SITE + '/products/';

const lines = [
  { name: 'Novasuede™', col: 'novasuede', tag: 'Palette depth — 176 microfiber-suede colors', picks: [
    { name: 'Novasuede™ — Acorn',     color: 'Warm Tan',  h: 'novasuede™-acorn',     img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/novasuede-acorn.jpg?v=1761251816' },
    { name: 'Novasuede™ — Baltic',    color: 'Deep Blue', h: 'novasuede™-baltic',    img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/novasuede-baltic.jpg?v=1761251833' },
    { name: 'Novasuede™ — Aubergine', color: 'Plum',      h: 'novasuede™-aubergine', img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/novasuede-aubergine.jpg?v=1761251830' },
  ]},
  { name: 'Ultrasuede™', col: 'ultrasuede', tag: 'The original microsuede — contract-proven', picks: [
    { name: 'Ultrasuede™ — Black Onyx', color: 'Black',      h: 'ultra_2730', img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Ultrasuede_DesignerWallcoverings_5538-5709.jpg?v=1663623335' },
    { name: 'Ultrasuede™ — Cobalt',     color: 'Blue',       h: 'ultra_2130', img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Ultrasuede_DesignerWallcoverings_5538-2877.jpg?v=1663623241' },
    { name: 'Ultrasuede™ — Rose Quartz',color: 'Light Pink', h: 'ultrasuede-rose-quartz-light-pink-ultra-3070', img: 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ultrasuede-rose-quartz-light-pink-ultra-3070-30024564146227.jpg?v=1785464181' },
  ]},
];

// Benefits band — conservative, defensible claims (the "and their benefits" ask)
const benefits = [
  ['Cleanable',        'Spot-clean with soap & water — holds up to real use.'],
  ['Durable',          'Heavy-duty abrasion resistance for wall & seat.'],
  ['Color retention',  'Engineered microfiber built to hold its tone — ask for the spec sheet.'],
  ['Dual-purpose',     'One material for wallcovering, upholstery & panels.'],
  ['Easy to work',     'Breathable & supple — wraps panels & walls seamlessly.'],
  ['A full palette',   '176 Novasuede colors & the complete Ultrasuede range.'],
];

// Explore row — 6 commercial/contract brands, all verified live (200, www host) 2026-08-26
const cats = [
  { label: 'Koroseal',        h: 'koroseal' },
  { label: 'Wolf-Gordon',     h: 'wolf-gordon' },
  { label: 'Carnegie',        h: 'carnegie' },
  { label: 'Innovations',     h: 'innovations' },
  { label: 'Hollywood',       h: 'hollywood-wallcoverings' },
  { label: 'Maya Romanoff',   h: 'maya-romanoff' },
];

const card = (p) => `
        <td width="33.33%" valign="top" style="padding:0 5px;">
          <a href="${PDP}${encodeURIComponent(p.h)}" style="text-decoration:none;color:inherit;display:block;">
            <img src="${p.img}" alt="${p.name} — ${p.color}" width="176" style="width:100%;height:150px;object-fit:cover;display:block;border:1px solid #e4e0d6;">
            <div style="font-size:13px;color:#20211f;margin-top:8px;line-height:1.3;">${p.name}</div>
            <div style="font-size:12px;color:#8a8578;margin-top:2px;">${p.color}</div>
          </a>
        </td>`;

const lineBlock = (L) => `
      <tr><td style="padding:22px 30px 4px;border-top:1px solid #ece8de;">
        <div style="font-size:15px;letter-spacing:2px;text-transform:uppercase;color:#20211f;"><a href="${SITE}/collections/${L.col}" style="color:#20211f;text-decoration:none;">${L.name}</a></div>
        <div style="font-size:12px;color:#8a8578;margin:3px 0 12px;">${L.tag}</div>
      </td></tr>
      <tr><td style="padding:0 25px 8px;">
        <table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr>${L.picks.map(card).join('')}</tr></table>
      </td></tr>
      <tr><td align="center" style="padding:4px 30px 18px;">
        <a href="${SITE}/collections/${L.col}" style="display:inline-block;background:#20211f;color:#ffffff;text-decoration:none;font-size:12px;letter-spacing:2px;text-transform:uppercase;padding:11px 26px;">Shop ${L.name}</a>
      </td></tr>`;

const benefitCell = (b) => `
        <td width="33.33%" valign="top" style="padding:10px 10px;">
          <div style="font-size:12px;letter-spacing:1px;text-transform:uppercase;color:#9a7b3f;">${b[0]}</div>
          <div style="font-size:12px;line-height:1.5;color:#4a4940;margin-top:4px;">${b[1]}</div>
        </td>`;

const html = `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>The Suede Edit</title></head>
<body style="margin:0;padding:0;background:#f3f1ec;font-family:Georgia,'Times New Roman',serif;color:#20211f;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#f3f1ec;"><tr><td align="center" style="padding:26px 12px;">
  <table role="presentation" width="600" cellpadding="0" cellspacing="0" style="width:600px;max-width:600px;background:#ffffff;border:1px solid #e4e0d6;">
    <tr><td align="center" style="padding:26px 30px 14px;border-bottom:1px solid #ece8de;">
      <a href="${SITE}" style="text-decoration:none;color:#20211f;display:inline-block;">
        <div style="font-size:22px;letter-spacing:3px;text-transform:uppercase;">Designer Wallcoverings</div>
      </a>
      <div style="font-size:12px;letter-spacing:2px;color:#8a8578;margin-top:6px;">TO THE TRADE &middot; SINCE 2003</div>
    </td></tr>
    <tr><td align="center" style="padding:28px 34px 6px;">
      <div style="font-size:13px;letter-spacing:3px;text-transform:uppercase;color:#9a7b3f;">The Suede Edit</div>
      <div style="font-size:29px;line-height:1.25;margin:12px 0 10px;">How to Specify Faux Suede<br>Novasuede&trade; or Ultrasuede&trade;?</div>
      <div style="font-size:15px;line-height:1.6;color:#4a4940;">Two microfiber suede lines with the hand of real suede and none of the fragility. Reach for <strong>Novasuede&trade;</strong> when you need <strong>palette depth</strong> &mdash; 176 colors, wall to seat. Reach for the original <strong>Ultrasuede&trade;</strong> when the job is <strong>contract-proven</strong> and the spec has to hold. Both are cleanable, dual-purpose, and stocked to the trade &mdash; explore the newest colorways below.</div>
    </td></tr>

    <!-- BENEFITS BAND -->
    <tr><td style="padding:22px 20px 4px;">
      <div style="border-top:1px solid #ece8de;"></div>
      <div align="center" style="font-size:11px;letter-spacing:3px;text-transform:uppercase;color:#8a8578;padding:16px 0 6px;">Why Microfiber Suede</div>
      <table role="presentation" width="100%" cellpadding="0" cellspacing="0">
        <tr>${benefits.slice(0,3).map(benefitCell).join('')}</tr>
        <tr>${benefits.slice(3,6).map(benefitCell).join('')}</tr>
      </table>
    </td></tr>

    ${lines.map(lineBlock).join('')}

    <tr><td align="center" style="padding:22px 34px 8px;border-top:1px solid #ece8de;">
      <div style="font-size:14px;line-height:1.6;color:#4a4940;margin-bottom:16px;">Request a memo sample of any colorway &mdash; or explore both suede lines at trade pricing.</div>
      <a href="${SITE}/collections/suede" style="display:inline-block;background:#9a7b3f;color:#ffffff;text-decoration:none;font-size:13px;letter-spacing:2px;text-transform:uppercase;padding:13px 30px;">Shop All Suede</a>
    </td></tr>
    <tr><td align="center" style="padding:18px 34px 4px;">
      <div style="font-size:11px;letter-spacing:2px;text-transform:uppercase;color:#8a8578;margin-bottom:10px;">Explore Commercial &amp; Contract Lines</div>
      <div style="font-size:13px;color:#4a4940;">${cats.map(c=>`<a href="${SITE}/collections/${c.h}" style="color:#4a4940;text-decoration:none;border-bottom:1px solid #d8d3c6;">${c.label}</a>`).join(' &nbsp;&middot;&nbsp; ')}</div>
    </td></tr>
    <tr><td align="center" style="padding:26px 34px 30px;border-top:1px solid #ece8de;">
      <div style="font-size:14px;letter-spacing:2px;text-transform:uppercase;">Designer Wallcoverings</div>
      <div style="font-size:12px;color:#8a8578;margin:6px 0 12px;">The Suede Edit &middot; August 2026 &middot; To the trade — Los Angeles, since 2003</div>
      <div style="font-size:11px;line-height:1.7;color:#9a958a;">Designer Wallcoverings &amp; Fabrics &middot; 15442 Ventura Bl, Sherman Oaks, CA 91403 &middot; (888) 373-4564<br>You received this because you're a Designer Wallcoverings customer or trade contact.<br><a href="{{unsubscribe_url}}" style="color:#9a958a;">Unsubscribe</a> &nbsp;|&nbsp; <a href="{{update_profile_url}}" style="color:#9a958a;">Update Profile</a></div>
    </td></tr>
  </table>
</td></tr></table></body></html>`;

const out = process.argv[2] || '/Users/macstudio3/Projects/marketing-command-center/data/campaign-drafts/the-suede-edit-2026-08-26.html';
fs.writeFileSync(out, html);
console.log('bytes:', html.length, '· lines:', lines.length, '· picks:', lines.reduce((n,l)=>n+l.picks.length,0), '· ->', out);