[object Object]

← back to Contact Mailer Ideas

action items: 3 per idea (VALIDATE / MVP / DISTRIBUTION) + viewer renders them

bc4b0b5ce4249c80af86234529109d43b923e4df · 2026-05-11 12:30:43 -0700 · Steve Abrams

Files touched

Diff

commit bc4b0b5ce4249c80af86234529109d43b923e4df
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon May 11 12:30:43 2026 -0700

    action items: 3 per idea (VALIDATE / MVP / DISTRIBUTION) + viewer renders them
---
 ideas.json       | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 viewer/server.js |  16 ++++++++
 2 files changed, 126 insertions(+), 10 deletions(-)

diff --git a/ideas.json b/ideas.json
index dceca94..0a7f3b4 100644
--- a/ideas.json
+++ b/ideas.json
@@ -6,15 +6,115 @@
   "figma_file_key": "1hHZQ0xggOqzVuPIB0rD3r",
   "figma_file_url": "https://www.figma.com/design/1hHZQ0xggOqzVuPIB0rD3r",
   "ideas": [
-    { "idx": 1,  "name": "AddressAI",      "node_id": "1:2",   "angle": "AI list hygiene at import time",      "target": "SMB email senders churning on bounces",          "diff": "Predicts deliverability per-contact BEFORE first send; bounces never hit your sender rep" },
-    { "idx": 2,  "name": "VoiceMailer",    "node_id": "1:16",  "angle": "AI voice-clone audio greeting",       "target": "Solo founders, real-estate, financial advisors",  "diff": "12s personalized cloned-voice audio in every email; 'open-rate' beats template emails" },
-    { "idx": 3,  "name": "PostNeighbor",   "node_id": "1:30",  "angle": "Hyperlocal geo-targeted lists",       "target": "Brick-and-mortar SMBs (storefronts, services)",   "diff": "Geo-radius list-building w/ USPS NCOA new-mover signal + neighbor SMB rolodex" },
-    { "idx": 4,  "name": "OneSendNoApp",   "node_id": "1:44",  "angle": "No-UI, reply-to-send campaigns",      "target": "Hate-the-dashboard solo operators",               "diff": "Reply to send@<addr> = your campaign. Zero login, zero builder" },
-    { "idx": 5,  "name": "WallcoverDM",    "node_id": "1:58",  "angle": "Vertical: B2B trade (design industry)", "target": "Wallcovering / fabric / showroom vendors",       "diff": "Trade pricing in-email, sample-request one-click, showroom RSVP tracked — built for the design trade" },
-    { "idx": 6,  "name": "AftermarketCC",  "node_id": "1:72",  "angle": "Reactivation of dead segments",      "target": "Mailchimp/CC users w/ 60%+ unopened-90d",          "diff": "Imports your CC/MC export, runs isolated-IP win-back sequences without contaminating main sender rep" },
-    { "idx": 7,  "name": "LeaveBehind",    "node_id": "1:86",  "angle": "Email→postcard hybrid via Lob",       "target": "Real-estate, local services, B2B SDRs",           "diff": "Top non-openers auto-get a printed postcard; one flow bridges email + USPS" },
-    { "idx": 8,  "name": "PaidPress",      "node_id": "1:100", "angle": "SMB newsletter monetization",        "target": "Newsletter operators sub-Beehiiv scale",          "diff": "Auto-matched $50–$200 sponsor slot per send from a vertical-specific marketplace" },
-    { "idx": 9,  "name": "FormForward",    "node_id": "1:114", "angle": "Smart routing forms→flows",          "target": "Multi-audience SMBs (wholesale+consumer+press)",  "diff": "Branching sequences from one form without Zapier glue; routing rules in-tool" },
-    { "idx": 10, "name": "SunsetList",     "node_id": "1:128", "angle": "Anti-bloat list hygiene as SaaS",    "target": "Anyone whose list >5k and going stale",           "diff": "Auto-unsubs 12mo non-openers, weekly list-health score, protects sender rep — the opposite of CC's incentives" }
+    {
+      "idx": 1, "name": "AddressAI", "node_id": "1:2",
+      "angle": "AI list hygiene at import time",
+      "target": "SMB email senders churning on bounces",
+      "diff": "Predicts deliverability per-contact BEFORE first send; bounces never hit your sender rep",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Pull 5 friend SMBs' CC/Mailchimp list exports, run them through NeverBounce + Hunter free tier, compare predicted-vs-actual bounce rates on next send" },
+        { "step": "MVP", "what": "CSV-in → scored-CSV-out web app. Integrate NeverBounce ($0.008/check) + add an 'AI confidence' score from contact metadata. No login, $1 per 100 contacts" },
+        { "step": "DISTRIBUTION", "what": "Cold-pitch ESP migration agencies + post case studies on r/EmailMarketing showing 'we saved $X by trimming dead contacts before billing tier rollover'" }
+      ]
+    },
+    {
+      "idx": 2, "name": "VoiceMailer", "node_id": "1:16",
+      "angle": "AI video greeting (selfie + voice sample)",
+      "target": "Real estate, course creators, financial advisors",
+      "diff": "AI video greeting (face+voice) generated from one selfie + one voice sample, personalized per recipient — clicks to inbox-friendly hosted page",
+      "action_items": [
+        { "step": "VALIDATE", "what": "A/B test on 200 recipients: template email vs same email with 'Watch a 15-sec note from me' personalized HeyGen-style video link. Measure click + reply rate" },
+        { "step": "MVP", "what": "Upload 1 selfie + 30s voice sample → generate per-recipient videos via HeyGen/Synthesia API + host on cloudfront, embed thumbnail in email. $49/mo, 500 videos" },
+        { "step": "DISTRIBUTION", "what": "Tinder-style cold outreach to top 1,000 real-estate IG accounts via Manychat partner; offer first 100 videos free in exchange for testimonial" }
+      ]
+    },
+    {
+      "idx": 3, "name": "PostNeighbor", "node_id": "1:30",
+      "angle": "NCOA new-mover detection → postcard → email opt-in funnel",
+      "target": "Brick-and-mortar SMBs (storefronts, services)",
+      "diff": "NCOA new-mover signal triggers Lob postcard w/ QR offer, scan = consented email opt-in to storefront list",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Buy a 1mo NCOA new-mover feed for one ZIP, send 200 hand-designed postcards w/ trackable QR for a local DW customer (cork wallpaper storefront), measure scan→opt-in rate" },
+        { "step": "MVP", "what": "Storefront enters address → we draw 1-mile radius → pull new movers monthly → auto-print/mail via Lob with their branded postcard → opt-ins flow to their existing ESP via Zapier" },
+        { "step": "DISTRIBUTION", "what": "Partner with 1 local-chamber-of-commerce in LA — pilot price $99/mo + $1/postcard mailed. Steve's existing dw_unified leverages the trade list" }
+      ]
+    },
+    {
+      "idx": 4, "name": "OneSendNoApp", "node_id": "1:44",
+      "angle": "No-UI, reply-to-send campaigns",
+      "target": "Hate-the-dashboard solo operators",
+      "diff": "Reply to send@<addr> = your campaign. Zero login, zero builder",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Manually run 5 solo-founder lists for 2 weeks via private SMTP relay where they email send@stevemail.co and we forward to their list. Measure delight + retention" },
+        { "step": "MVP", "what": "Each customer gets a unique send@<slug>.onesend.co inbox. Inbound parser strips signature, validates against safety list, blasts via Postmark, replies-to-sender go back to them" },
+        { "step": "DISTRIBUTION", "what": "ProductHunt launch with 'the anti-Mailchimp' positioning — show 5-sec demo of replying to send → analytics dashboard via email reply too" }
+      ]
+    },
+    {
+      "idx": 5, "name": "WallcoverDM", "node_id": "1:58",
+      "angle": "Vertical: B2B trade (design industry)",
+      "target": "Wallcovering / fabric / showroom vendors",
+      "diff": "Trade pricing in-email, sample-request one-click, showroom RSVP tracked — built for the design trade",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Run a 3-email sequence to dw_unified's existing trade list (designers w/ active accounts) with one-click sample request — measure click→sample-shipped→reorder funnel" },
+        { "step": "MVP", "what": "Vertical ESP w/ pre-built blocks: 'trade price card', 'sample request CTA', 'showroom RSVP'. Integrates direct to Shopify product variants + sample SKU tracking" },
+        { "step": "DISTRIBUTION", "what": "Sell into DW's own vendor partners first (Schumacher, Thibaut, Arte, etc.) at $299/mo as 'designer-fluent email infra'. DW gets affiliate cut" }
+      ]
+    },
+    {
+      "idx": 6, "name": "AftermarketCC", "node_id": "1:72",
+      "angle": "Reactivation of dead segments",
+      "target": "Mailchimp/CC users w/ 60%+ unopened-90d",
+      "diff": "Imports your CC/MC export, runs isolated-IP win-back sequences without contaminating main sender rep",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Run isolated-IP win-back for 3 friend SMBs' dead segments (5k+ contacts each, 90d+ no-open). Target metric: 8%+ reactivation w/ <0.5% spam complaints" },
+        { "step": "MVP", "what": "Upload CSV export → we filter to >90d no-open + run via dedicated /24 IP pool with 3-touch sequence over 14 days → re-engaged contacts handed back as CSV" },
+        { "step": "DISTRIBUTION", "what": "Pay-per-reactivation pricing: $0.50 per contact that opens/clicks. Pitch directly via cold email to ESPs' lapsed-engagement users (LinkedIn scrape)" }
+      ]
+    },
+    {
+      "idx": 7, "name": "LeaveBehind", "node_id": "1:86",
+      "angle": "Email→postcard hybrid via Lob",
+      "target": "Real-estate, local services, B2B SDRs",
+      "diff": "Top non-openers auto-get a printed postcard; one flow bridges email + USPS",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Hand-deploy postcard-after-email for 3 real-estate agents over 2 campaigns. Measure: postcard→reply rate vs control (email-only). Hypothesis: 3-5x lift on non-openers" },
+        { "step": "MVP", "what": "Plugin/SDK that hooks any ESP → after 7 days, exports non-openers w/ valid mailing address → sends through Lob with templated postcard. $99/mo + $1.50/postcard" },
+        { "step": "DISTRIBUTION", "what": "Mailchimp/Klaviyo app marketplace listing as 'postcard backup for non-openers' — single integration with the highest-volume ESPs" }
+      ]
+    },
+    {
+      "idx": 8, "name": "PaidPress", "node_id": "1:100",
+      "angle": "SMB newsletter monetization",
+      "target": "Newsletter operators sub-Beehiiv scale",
+      "diff": "Auto-matched $50–$200 sponsor slot per send from a vertical-specific marketplace",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Manually match 5 SMB newsletters (500-5k subs) with 1 sponsor each for one send. Measure: did the sponsor reorder? did the publisher accept future slots?" },
+        { "step": "MVP", "what": "Publisher embeds <iframe> in their template → on send, our server picks the highest-CPM matched sponsor + injects creative. 70/30 publisher/platform split" },
+        { "step": "DISTRIBUTION", "what": "Recruit sponsors via Beehiiv Ads + SponsorPlease alumni lists; recruit publishers from Substack's SMB tier (Substack doesn't monetize sub-1k well)" }
+      ]
+    },
+    {
+      "idx": 9, "name": "FormForward", "node_id": "1:114",
+      "angle": "Smart routing forms → flows",
+      "target": "Multi-audience SMBs (wholesale + consumer + press)",
+      "diff": "Branching sequences from one form without Zapier glue; routing rules in-tool",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Build a hand-coded routing form for 1 DW vendor (e.g., trade vs consumer vs designer) — measure split rate + sequence completion vs their current flat form" },
+        { "step": "MVP", "what": "Form builder with IF/ELSE branches → each branch maps to a different MailerLite/Resend audience + sequence. No-code, single form embed everywhere" },
+        { "step": "DISTRIBUTION", "what": "Webflow + Framer integration partner launch — every 'one-size-fits-all' form on those platforms is a candidate" }
+      ]
+    },
+    {
+      "idx": 10, "name": "SunsetList", "node_id": "1:128",
+      "angle": "Anti-bloat list hygiene as SaaS",
+      "target": "Anyone whose list >5k and going stale",
+      "diff": "Auto-unsubs 12mo non-openers, weekly list-health score, protects sender rep — the opposite of CC's incentives",
+      "action_items": [
+        { "step": "VALIDATE", "what": "Pull 5 friend lists, calculate health score (open rate, bounce rate, 12mo-no-open %) — show before/after if we auto-pruned the dead 30%. Cost vs ESP-tier savings" },
+        { "step": "MVP", "what": "Connect your ESP API → weekly cron prunes 12mo non-openers (after 1 win-back attempt) + emails publisher a health-score PDF. $29/mo flat" },
+        { "step": "DISTRIBUTION", "what": "Pitch directly to ESP CSMs — 'we save your customer's deliverability so they don't churn'. Affiliate cut from saved-customer LTV" }
+      ]
+    }
   ]
 }
diff --git a/viewer/server.js b/viewer/server.js
index dee548d..db405a2 100644
--- a/viewer/server.js
+++ b/viewer/server.js
@@ -67,6 +67,14 @@ header a:hover{color:#fff;border-color:#fff}
 .card .diff{font-size:12.5px;color:#cfcfd5;margin-bottom:14px;padding:10px 12px;background:#0d0d12;border-radius:8px;border-left:3px solid #444}
 .card .meta{display:flex;gap:14px;font-size:11.5px;color:#7a7a82;flex-wrap:wrap}
 .card .meta b{color:#cfcfd5;font-weight:600}
+.actions{margin-top:14px;border-top:1px solid #1f1f27;padding-top:14px}
+.actions h3{font-size:11px;letter-spacing:.15em;color:#7a7a82;margin-bottom:10px;text-transform:uppercase}
+.action{display:flex;gap:10px;margin-bottom:10px;font-size:12.5px;line-height:1.5}
+.action .step{flex-shrink:0;font-size:9.5px;font-weight:700;letter-spacing:.08em;padding:3px 7px;border-radius:4px;height:fit-content;margin-top:1px}
+.s-VALIDATE{background:rgba(56,189,248,.15);color:#7dd3fc}
+.s-MVP{background:rgba(34,197,94,.15);color:#86efac}
+.s-DISTRIBUTION{background:rgba(251,191,36,.15);color:#fde68a}
+.action .what{color:#bcbcc4;flex:1}
 .scores{display:flex;gap:6px;margin-bottom:14px}
 .score{flex:1;font-size:11px;background:#0d0d12;padding:6px 8px;border-radius:6px;text-align:center}
 .score b{display:block;font-size:14px;color:#fff;font-weight:700}
@@ -118,6 +126,7 @@ async function load(){
       <div class="sub">\${escapeHtml(i.diff || '')}</div>
       <div class="diff"><b style="color:#cfcfd5">target</b> · \${escapeHtml(i.target || '')}</div>
       \${scores ? renderScores(scores) : ''}
+      \${i.action_items && i.action_items.length ? renderActions(i.action_items) : ''}
       \${i.ticks.length ? renderTicks(i.ticks) : '<div class="tick" style="color:#5a5a62">no refinement ticks yet</div>'}
       <a class="figma-link" href="https://www.figma.com/design/1hHZQ0xggOqzVuPIB0rD3r?node-id=\${(i.node_id||'').replace(':','-')}" target="_blank">View frame in Figma ↗</a>
     \`;
@@ -134,6 +143,13 @@ function renderScores(s){
     <div class="score" style="background:#1c1c24"><b>\${total}</b><span>total/40</span></div>
   </div>\`;
 }
+function renderActions(items){
+  return '<div class="actions"><h3>Action items</h3>' + items.map(a => \`
+    <div class="action">
+      <span class="step s-\${a.step}">\${a.step}</span>
+      <span class="what">\${escapeHtml(a.what)}</span>
+    </div>\`).join('') + '</div>';
+}
 function renderTicks(ts){
   return '<div class="ticks">' + ts.slice(0,4).map(t => \`
     <div class="tick">

← b5273f6 deploy: ideas.agentabrams.com — pm2 ideas-agentabrams, nginx  ·  back to Contact Mailer Ideas  ·  ideas 11-20: time-capsule, podcast, DM, taste-graph, handwri 2d93e28 →