GOFOR360

This page is protected

Enter the password to continue.

Platform Architecture & Build Specification

Lead Re-Engagement & Affiliate Monetization Platform

A multi-tenant email platform that ingests lapsed ecommerce subscribers, re-engages them with niche-relevant newsletter content, and monetizes every send through a rotating catalog of affiliate offers — fully automated, with no human in the sending loop.

🇺🇸 US-only (initial scope) Multi-tenant SaaS Webhook lead ingestion Multi-ESP sending Self-optimizing segments Affiliate + AdSense revenue Content + blog pipeline
01

Overview

This document is the engineering blueprint for the platform. It describes what the system does, the major components, how data flows between them, the key algorithms, and a recommended technology stack so the build team can start estimating and architecting immediately.

Ecommerce brands acquire customers through paid channels (Meta, TikTok, etc.). Over time a large share of those buyers stop opening, clicking, and purchasing — they become dead leads with no remaining value to the brand. Our platform takes ownership of those lapsed subscribers and turns them back into revenue: we re-engage them with genuinely useful, niche-relevant content and earn an affiliate payout each time one of them buys a product from a third-party advertiser.

📥

Ingest

Brands hand off lapsed leads via webhook after a 60–90 day inactivity window.

✉️

Re-engage

A welcome email then daily AM/PM newsletters, sent only to active openers.

🎯

Optimize

Segments auto-tighten per niche and per inbox provider to hold open rates above 35%.

💰

Monetize

Native-style ads from 40+ rotating offers earn a flat fee per sale.

🔑
The core design principle: open rate is the lifeblood of the business. Every architectural decision — multi-ESP sending, opener-only targeting, self-tightening segments, suppression hygiene — exists to protect inbox placement and keep unique open rates above the 35% threshold.
02

Business Model

We sit between three parties: the ecommerce brands who supply the leads, the subscribers we re-engage, and the advertisers whose offers we promote. Revenue comes from the advertiser side on a pay-per-sale (CPA) basis.

Ecommerce Brands Supply lapsed leads via webhook OUR PLATFORM Re-engage subscribers Newsletter + content Serve affiliate offers Advertisers Pay flat fee per sale (CPA) leads $ per sale drive buyers
Figure 2.1 — Three-sided model. Brands supply leads, we re-engage them, advertisers pay us per resulting sale.

Where the value is created

PartyWhat they giveWhat they get
Ecommerce brandLapsed/dead leads they can no longer monetizeOptional revenue share, a clean re-engagement service, and a branded sending subdomain — at zero list-management cost to them
SubscriberAttention & opensGenuinely useful niche content (MorningBrew-style) plus relevant offers
AdvertiserFlat CPA payout per saleQualified, niche-matched buyers
UsThe platform, deliverability & contentPer-sale affiliate revenue + on-site blog ad revenue
📈
Two revenue streams. (1) Affiliate CPA payouts from offers placed in the newsletter, and (2) display/native ad revenue (AdSense) on the blog pages where transcribed YouTube content lives. Both scale with open rate and click volume.
03

System Architecture

The platform is a multi-tenant application made of a handful of cooperating services. The diagram below shows the end-to-end flow from a lead arriving to revenue being earned, plus the cross-cutting services (suppression, scheduling, analytics) that touch every send.

INGEST ORCHESTRATE SEND & CONVERT SHARED SERVICES Brand Webhook lapsed lead payload Ingestion API validate · dedupe · map List Router client + niche → target list Profile Store subscriber identity, consent & engagement Automation Engine welcome flow daily AM / PM jobs reminder logic scheduler / cron Open-Rate Governor monitors open % tightens/loosens segments per niche & per inbox provider Newsletter Builder assembles 4 blocks 2 content + 2 native ads + trending links per list, per send Ad Rotation offer catalog EPC-weighted selection Sending Layer routes mail across SendGrid · Postmark · Mailgun (SMTP/API) by send type Inbox subscriber opens, clicks, unsubscribes → engagement events Content Blog embedded video + transcribed article + on-page ads Advertiser Offer click → offer page → purchase → CPA payout 💰 Suppression / DNM global unsubscribe registry Deliverability Monitor Postmaster · spam · warm-up Domain / Subdomain Mgr per-client sending domains Client Admin Console onboarding · lists · reports
Figure 3.1 — End-to-end platform architecture across four layers. Dashed teal line = engagement feedback loop into the Open-Rate Governor.

Component responsibilities

ServiceResponsibility
Ingestion APIReceives brand webhooks, authenticates the client, validates & deduplicates the payload, and creates/updates a subscriber profile.
List RouterMaps each incoming lead to the correct client + niche list based on payload metadata.
Automation EngineRuns the welcome flow, reminder logic, and the scheduled daily AM/PM campaign jobs. The "no human in the loop" core.
Open-Rate GovernorContinuously measures open rates per list and per inbox provider, and tightens/loosens the active-opener segment to hold ≥35%.
Newsletter BuilderAssembles each issue: 2 content blocks + 2 native ads + trending links, personalized to the list's niche.
Ad Rotation EngineSelects which offers appear, weighted by performance (EPC), niche match, caps, and pacing.
Sending LayerAbstraction over multiple ESPs/SMTP relays; routes each send type to a designated provider and handles retries, webhooks, and bounces.
Suppression / DNMSingle global registry of unsubscribes, complaints, and hard bounces, enforced before every send.
Deliverability MonitorReal-time Postmaster health, per-list spam rates, blocklist checks, and automated domain warm-up (§15).
Content PipelineIngests YouTube content from curated authority channels, builds blog articles with transcript + embed + ads.
Admin ConsoleInternal + client-facing UI for onboarding, list config, domain setup, and reporting.
04

Core Concepts & Hierarchy

Five entities form the backbone of the data model. Getting these relationships right up front prevents painful re-work later.

Client (Brand) e.g. "Happy Gut" Sending Subdomain happygut.wellnessexperts.com Niche List — Gut gut-health subscribers Niche List — Hair hair-loss subscribers Subscriber / Profile + engagement history Subscriber / Profile + engagement history
Figure 4.1 — One client can own multiple niche lists. Each list is tied to the client's sending subdomain; subscribers live inside lists.
Client

The ecommerce brand

A tenant in the system. Holds billing/contract terms, API credentials for their webhook, one or more sending subdomains, and one or more niche lists. Happy Gut is a client.

Niche List

A themed audience within a client

Subscribers are grouped by the niche they were originally interested in (gut health, hair loss, weight loss…). A single client can own several lists. Niche drives content selection and offer matching.

Subscriber / Profile

The re-engaged person

A unique person identified primarily by email. Carries consent status, source brand, niche, and a rolling engagement history (last open, open count, per-ISP behavior) that the Governor reads.

Sending Subdomain

Per-client brand domain

Each client gets brandname.wellnessexperts.com. Mail is sent from this subdomain, and visiting it can be DNS-pointed to the brand's original landing page so the experience stays on-brand.

Subdomain & landing-page strategy

For a client "Happy Gut" under main domain wellnessexperts.com, we provision happygut.wellnessexperts.com as the sending domain (SPF, DKIM, DMARC, and a tracking CNAME all configured against it). At the registrar/DNS level, the subdomain's web root can be pointed (CNAME or reverse proxy) to the brand's existing landing page, so a subscriber who visits sees a familiar experience while we keep sending reputation isolated per client.

⚠️
Reputation isolation matters. Giving each client its own subdomain (and ideally its own IP pool or sub-pool) means a deliverability problem on one client's list does not drag down every other client. The Domain/Subdomain Manager automates DNS record creation and verification during onboarding.
05

Lead Ingestion (Webhook)

Brands hand off lapsed leads by calling our webhook. The brand decides when a lead is "dead" (typically 60 or 90 days of no engagement) and fires the event at that moment.

The timing logic (brand side)

A customer acquired on July 1, 1:00 PM who stops engaging triggers a handoff 60 days later — September 1, 1:00 PM. That decision lives on the brand's side; our platform simply needs to receive the event reliably and act on it immediately.

Jul 1, 1:00 PM Customer acquired …no engagement… Sep 1, 1:00 PM Webhook fires → handoff to us 60-day inactivity window (brand-defined)
Figure 5.1 — The handoff moment is defined by the brand's inactivity window; our job is to ingest instantly.

Webhook contract

We expose a per-client authenticated endpoint. A suggested JSON payload:

// POST https://api.wellnessexperts.com/v1/leads
// Header: Authorization: Bearer <client_api_key>
{
  "email": "jane@example.com",
  "first_name": "Jane",
  "niche": "gut_health",        // maps to the target list
  "source_brand": "happy_gut",
  "acquired_at": "2026-07-01T13:00:00Z",
  "handoff_reason": "inactive_60d",
  "consent": { "marketing": true, "source": "checkout_optin" },
  "external_id": "cust_88213",        // brand's customer id
  "meta": { "ltv": 0, "last_order_at": "2026-07-01" }
}

What the Ingestion API does on receipt

  1. Authenticate & rate-limit

    Verify the client API key / HMAC signature and apply per-client rate limits.

  2. Validate & normalize

    Check email syntax/MX, normalize casing, confirm niche maps to an existing list for that client.

  3. Check suppression & dedupe

    Reject if the email is on the global DNM list or already an active subscriber on that list.

  4. Create / update profile

    Upsert the subscriber, attach to the correct niche list, store consent + source metadata.

  5. Enqueue welcome flow

    Emit a lead.ingested event that triggers the Automation Engine's welcome sequence.

  6. Acknowledge

    Return 202 Accepted with a lead id. Failed/rejected leads return a clear reason for the brand's logs.

🔁
Idempotency & retries. Brands should send an idempotency key (or we derive one from email+client). The endpoint must safely absorb duplicate deliveries — webhooks retry — without creating duplicate subscribers or double-sending the welcome email.

Onboarding is configuration, not custom code

Every brand's payload looks different. Rather than hand-coding an integration per partner, the platform maps each partner's incoming fields onto a single canonical schema (email, name, niche/area-of-interest, consent, source, timestamps). Onboarding a new brand becomes a configuration step — point a webhook at us, auto-detect the inbound fields, and confirm the mapping — not an engineering project.

Heterogeneous inputs Brand A webhook JSON Brand B webhook (diff fields) CSV / Google Sheet Pull from ESP / platform Mapping layer auto-detect + confirm field → canonical Canonical schema email · niche · consent · source · timestamps
Figure 5.2 — A mapping layer normalizes any partner's input into one canonical schema, so onboarding is config, not code.

Ingestion adapters (for non-technical partners)

Not every brand can fire a webhook. The platform should ship a small set of fallback adapters so any partner can be onboarded: direct webhook (preferred), CSV upload, Google Sheet sync, and pull from the partner's email platform (Klaviyo, etc.). All four funnel through the same mapping layer into the canonical schema.

📐
Expose the contract. We publish our webhook spec and our postback URL; partners conform to it. That turns what would be ~1 custom integration per partner into a handful of reusable adapters (≈4 ingestion adapters total) plus per-partner configuration — the difference between a business that scales and one that doesn't.
06

Data Model

A simplified relational schema. The engagement and event tables are the highest-volume and most performance-critical — they feed both the Governor and reporting.

clients id · name · slug api_key · status revenue_share sending_domains id · client_id subdomain · ip_pool dkim · spf · dmarc lists id · client_id niche · name active_segment_cfg profiles id · email · name consent · source_brand isp · status acquired_at list_membership profile_id · list_id flow_state joined_at engagement_events profile_id · list_id type (open/click/unsub) campaign_id · isp esp · ts suppression (global) email_hash reason · source_list created_at offers id · niche · advertiser payout · creative caps · epc · status 1:N 1:N
Figure 6.1 — Core entities. engagement_events is append-only and high-volume; it is the source of truth for the Governor and reporting.
TablePurpose & key fields
clientsTenant record — name, slug, API key, contract/revenue-share terms.
sending_domainsPer-client subdomain, assigned IP pool, and DNS auth records (DKIM/SPF/DMARC).
listsNiche audiences within a client. Stores the current active-opener segment configuration.
profilesUnique subscribers with consent, inferred ISP, source brand, and status.
list_membershipJoin of profile↔list plus the subscriber's position in the welcome/daily flow.
engagement_eventsAppend-only opens / clicks / unsubscribes / bounces, tagged with campaign, ISP and ESP. Drives everything.
suppressionGlobal do-not-mail registry (hashed emails) — checked before every send, account-wide.
offersAffiliate offer catalog — niche, advertiser, payout, creative, caps, and rolling EPC.
campaigns / sendsEach newsletter issue and the per-recipient send records (which ESP, which segment, render).
07

Multi-ESP Sending Engine

The platform owns all campaign logic; the ESPs (SendGrid, Postmark, Mailgun, and others) are used purely as delivery relays. Critically, different send types are spread across different providers to isolate reputation and diagnose problems fast.

Provider abstraction layer

A single internal "Send" interface sits in front of every provider. Whether a provider speaks SMTP relay or HTTP API, the rest of the platform calls the same method. Each provider is wrapped in an adapter that handles auth, formatting, retries, and inbound event webhooks (deliveries, opens, bounces, complaints) normalized back into engagement_events.

Sending Layer unified Send interface + router Welcome emails + open reminders Daily AM sends to openers Daily PM sends to same openers Provider A e.g. Postmark (SMTP) Provider B e.g. SendGrid (SMTP) Provider C e.g. Mailgun (SMTP)
Figure 7.1 — Send types are pinned to dedicated providers so reputation stays separated and issues are isolated per stream.

Send-type → provider routing

The routing policy is configuration, not code — it can be re-balanced without a deploy. A starting policy:

Send typeDefault providerWhy separate
Welcome + remindersProvider AFirst-touch reputation kept apart from recurring volume
Daily AM (openers)Provider BHigh-volume recurring stream #1
Daily PM (same openers)Provider CHigh-volume recurring stream #2, isolated from AM
Re-activation / win-backOverflow / 4th providerRiskier sends quarantined from healthy streams
🔑
Why split AM and PM across providers? If one provider's deliverability dips, only half the day's volume to a list is affected, and the side-by-side comparison instantly tells you whether the problem is the provider, the content, or the segment. The router also enables warm-up ramping and automatic failover.

Capabilities every provider adapter must implement

  • Authenticated send (SMTP relay preferred; HTTP API supported where the docs fit our needs)
  • Per-message custom headers + tracking pixel / link wrapping under the client subdomain
  • Inbound event webhook → normalized into engagement_events (delivered, open, click, bounce, complaint)
  • Bounce & complaint feedback → auto-write to global suppression
  • Rate / concurrency controls for IP warm-up and daily caps
08

The Open-Rate Governor

This is the platform's smartest component. Its single job: keep each list's unique open rate at or above the 35% target by automatically tightening or loosening the "active opener" window — globally and per inbox provider.

How segments work

Every list sends to an opener segment — subscribers who have opened within the last N days. A wide window (e.g. 200-day openers) maximizes reach but eventually dilutes open rate as stale addresses creep in. A narrow window (e.g. 100-day openers) lifts open rate but reaches fewer people. The Governor continuously finds the widest window that still clears the target.

Continuous control loop (runs before each send) Measure unique open % per list Compare vs 35% target + trend direction Adjust window tighten if dropping widen if healthy Apply next send feedback: new opens continuously re-measured Example — a list slipping from 45% → 25%: 200-day window · open rate fell to 25% tighten to 100-day · recover to 45%+ re-widen toward 200 while holding target
Figure 8.1 — The Governor narrows the opener window to recover open rate, then carefully re-widens to recover reach without falling below target.

Per-inbox-provider (ISP) segmentation

Open-rate behavior differs sharply by mailbox provider. The Governor maintains an independent window per ISP for each list. Gmail might sustain a 200-day window at 45% while Yahoo needs a 50-day window to stay healthy. Each send is therefore composed of several ISP-specific sub-segments stitched together.

ListInbox providerActive windowOpen rateGovernor action
Weight LossGmail200 days47%Hold / test widen
Weight LossYahoo50 days38%Hold
Weight LossVerizon / AOL30 days28%Tighten to 20 days
Weight LossOutlook / MSN90 days41%Hold

Governor control parameters (per list, configurable)

  • Target open rate: default 35% (floor that triggers tightening)
  • Recovery target: the rate to climb back to before re-widening (e.g. the prior 45%)
  • Step size: how aggressively the window contracts/expands (e.g. ±25–50 days)
  • Hysteresis / cooldown: minimum sends between adjustments to avoid oscillation
  • Min volume guard: never tighten below a floor that would make the list too small to be worth sending
🧠
Implementation note. Model this as a feedback controller, not a one-off rule. A simple proportional controller (adjust window in proportion to the gap from target) with hysteresis is robust and explainable. Keep an audit log of every adjustment so the team can see why a segment changed.
09

Centralized Suppression & Do-Not-Mail

There is exactly one suppression list for the entire platform. An unsubscribe, complaint, or hard bounce anywhere removes that person from every active list, everywhere — permanently.

Unsubscribe click Spam complaint Hard bounce Manual / legal Global DNM single source of truth (hashed emails) Pre-send filter every send checked Daily list scrub purge any matches
Figure 9.1 — All opt-out signals funnel into one registry, enforced both in real time (pre-send) and via a daily scrub of every active list.

Two layers of enforcement

Real-time

Pre-send filter

Immediately before any send, the recipient set is diffed against the global suppression registry. Suppressed addresses are dropped from that send — no exceptions, regardless of list or client.

Daily

Scheduled scrub

A daily job walks every active list and removes any profile that now appears in suppression, keeping the lists clean even between sends and catching anything added out-of-band.

Design requirements

  • Account-global, not per-list: one match suppresses the person across all clients and lists
  • One-click unsubscribe compliant with RFC 8058 (List-Unsubscribe-Post header) — required by Gmail/Yahoo bulk-sender rules
  • Reason + timestamp + source stored for every entry (audit & compliance)
  • Irreversible by default: re-subscription only through a fresh, explicit opt-in
  • Fast lookups: hashed-email index so pre-send filtering of large sends is instant
⚖️
Compliance is non-negotiable. CAN-SPAM, GDPR/CASL where applicable, and the 2024 Gmail/Yahoo bulk sender requirements (authenticated domains, one-click unsubscribe, <0.3% complaint rate) all hinge on this system working flawlessly. A leak here threatens every client's deliverability at once.
10

The Newsletter Builder

Modeled on the Morning Brew approach: genuinely valuable, niche-relevant content interleaved with native-style ads. Every daily issue is assembled automatically, per list, with a consistent structure.

Anatomy of an issue

Niche Newsletter — Daily Issue ① Content — feature story YouTube authority headline + thumbnail → clicks through to our blog ② Native ad — looks like content rotated from offer catalog (EPC-weighted) → clicks through to advertiser offer 💰 ③ Content — second story second authority piece, niche-matched → clicks through to our blog ④ Native ad — second offer different advertiser, niche-matched → clicks through to advertiser offer 💰 Trending Around The Web • headline link → offer • headline link → offer   • headline link → offer
Figure 10.1 — Standard 4-block layout: 2 content blocks driving to the blog + 2 native ad blocks driving to offers, plus a "Trending Around The Web" ad-link footer.

Block types

BlockTypeDestinationRevenue role
① Feature storyEditorial contentOur blog (video + article)On-blog display/native ads
② Native adOffer (content-styled)Advertiser offer pageCPA per sale
③ Second storyEditorial contentOur blog (video + article)On-blog display/native ads
④ Native adOffer (content-styled)Advertiser offer pageCPA per sale
Trending linksMultiple offer linksAdvertiser offer pagesCPA per sale
🎯
The content is the open-rate engine. Because daily sends only go to engaged openers, and the only way to stay in that segment is to keep opening, the editorial blocks must be genuinely worth opening. Strong, niche-relevant content is what keeps the list above 35% — the ads ride on top of that engagement.

Content uniqueness — no two emails identical future consideration

Ideally, the body text of any given issue should not be byte-for-byte identical across all recipients. Mailbox providers fingerprint repeated, identical bulk content, so introducing per-recipient variation can help both deliverability and the feel of a 1:1 newsletter. This is noted as a forward-looking consideration, not a launch requirement.

Feasibility is high and there are graduated ways to achieve it, from cheapest to richest:

TechniqueHow it worksCost / effort
Templated variationMultiple intros/subject lines/CTAs rotated per send; spintax-style swaps of phrases.Low — deterministic, safe, no AI cost
Per-segment AI rewriteLLM generates a few worded variants of each block per issue; recipients are bucketed across variants.Medium — a handful of generations per issue, reused across many recipients
Per-recipient AI generationA unique rendering of the copy for every recipient.High — full LLM call per email; cost & latency scale with list size; needs guardrails for accuracy/claims
💡
Recommended approach. Per-segment AI rewrite (a small set of variants per issue, distributed across the list) captures most of the deliverability and freshness benefit at a tiny fraction of the cost of true per-recipient generation. Pair any AI-written copy with an automated claim/accuracy check before send, especially in health niches.
11

Content Pipeline (YouTube → Blog)

A constant supply of fresh, niche-relevant content without a writing team: curate authority YouTube channels per niche, surface their newest videos in the newsletter, and turn each into a blog page that hosts the embedded video, an article transcription, and its own ads.

Curated Channels authority figures per niche in DB Fetch new video YouTube Data API title + thumbnail Transcribe captions / ASR → article via LLM Publish blog page embed video + article + on-page ads Featured in newsletter content blocks
Figure 11.1 — Content pipeline: from a curated channel database to a published, monetized blog article surfaced in the newsletter.

The flow in detail

  1. Curate authority channels

    Maintain a database of the best YouTube channels per niche (weight loss, gut health, hair, etc.) that publish regularly. This is the editorial backbone.

  2. Detect new uploads

    Poll the YouTube Data API (or PubSubHubbub push) for new videos from curated channels; capture title, thumbnail, URL, and publish date.

  3. Transcribe & rewrite

    Pull captions or run speech-to-text, then use an LLM to turn the transcript into a readable article (with attribution to the creator).

  4. Publish to our blog

    Create a blog page on the niche site: the embedded YouTube video at top, the article below, and display/native ad slots throughout for a second revenue stream.

  5. Surface in the newsletter

    The Newsletter Builder pulls the freshest blog pieces for that niche into content blocks ① and ③, using the video's headline and thumbnail as the hook.

⚠️
Rights & attribution. Embedding YouTube videos is supported by YouTube's player, but republishing transcribed content as articles has copyright and fair-use considerations. Plan for clear creator attribution, transformative editorial framing, and ideally a creator-permission or partnership track. Worth a legal review before scale.

News sources, AI images & the content-quality loop

YouTube is the primary source, but the same pipeline can ingest curated news sources per niche for additional freshness. Article thumbnails/hero images can be AI-generated where a video thumbnail isn't suitable. Each blog page carries AdSense (or equivalent display ads), so organic content earns independently of the affiliate offers.

Critically, the platform measures first-party content performance separately from ad revenue — email click-through, scroll depth / read completion, dwell time, and internal clicks. These quality scores feed back into the content engine, biasing future harvesting toward the topics, sources, and formats that actually engage each niche.

Publish content email snippet + blog Measure engagement CTR · scroll · dwell Score topics/sources independent of ad $ Bias harvest toward winners
Figure 11.2 — First-party content analytics close the loop: engagement scores (not ad revenue) steer what the content engine harvests next.
12

Ad Rotation Engine

Starting with ~40 offers loaded into the catalog, the engine decides which offers fill the two newsletter ad blocks (and the trending links) for each send. The goal is to maximize revenue per send while keeping offers fresh and respecting advertiser caps.

How an offer is selected

For each ad slot, the engine builds a candidate pool, scores each candidate, and picks via weighted selection so the best performers appear most often without the same offer monopolizing every issue.

Filter eligible niche match · active · under cap · not fatigued Score EPC × payout × freshness × priority Weighted pick probabilistic, so winners rotate fairly Place in slot render native creative + tracked link Conversions feed EPC back (explore/exploit loop)
Figure 12.1 — Filter → score → weighted pick → place, with conversions feeding EPC back so the catalog self-optimizes over time.

Scoring inputs

FactorWhat it captures
EPC (earnings per click)The single best revenue signal — payout × conversion rate, measured live per offer per niche.
PayoutFlat CPA fee for the offer; higher payout, all else equal, scores higher.
Niche relevanceMatch between offer and list niche; off-niche offers convert poorly and hurt engagement.
Freshness / fatigueDown-weight offers a subscriber has seen many times recently to avoid burnout.
Caps & pacingDaily/total conversion caps and budget pacing set by the advertiser.
Manual priorityA lever to boost a strategic or newly added offer regardless of history.

Explore vs. exploit

New offers have no EPC history, so the engine reserves a share of impressions for exploration — giving fresh offers enough volume to prove themselves — while the majority of impressions exploit known winners. A multi-armed-bandit approach (e.g. Thompson sampling) is the natural fit and keeps the catalog self-tuning.

🧪
Start simple. For launch, a straightforward EPC-weighted random selection with frequency caps is enough and easy to reason about. Layer in bandit logic and per-ISP/per-list EPC once there's enough conversion data to be meaningful.

Closing the loop: conversion tracking

EPC is only as good as the conversion data feeding it. Every offer click is tracked through our own redirect (so we own first-party click data), and actual sales must be reported back from the advertiser. There are three common mechanisms — the platform should support all three since it's partner-controlled:

MechanismHow the sale is confirmedNotes
Postback / S2S pixelAdvertiser fires our postback URL on each sale, passing our click ID.Most reliable; we expose the postback URL and the partner conforms.
Network APIWe poll the affiliate network's API for conversions tied to our sub-IDs.Good when offers run through a network rather than direct.
Direct API / reportAdvertiser pushes or shares a conversion feed.Fallback for partners without postback support.
🔗
Expose the contract (again). Just like ingestion, we publish our postback URL and click-ID format; advertisers and networks conform to it. That makes "1 integration per affiliate network" mostly configuration. Confirmed conversions flow straight into each offer's live EPC, which drives the rotation engine.
13

Automation & the Subscriber Lifecycle

Every send is fully automated — no human ever composes or presses send. The Automation Engine orchestrates each subscriber from ingestion through the daily cadence, and a scheduler guarantees issues are built and sent on time.

Subscriber journey

Lead ingested via webhook Welcome email max open rate goal Opened? → Active openers enter daily AM/PM cadence Reminder @ 24h re-send to non-openers Daily Cadence (openers only) AM send (Provider B) · PM send (Provider C) segment set by Open-Rate Governor yes no
Figure 13.1 — Welcome → open gate → daily AM/PM cadence for openers; one reminder pass tries to convert non-openers. Everything runs without human intervention.

Lifecycle rules

  • Welcome first: on ingestion, every lead receives one high-value, niche-relevant welcome email engineered for maximum open rate.
  • Reminder pass: non-openers get one reminder ~24h later (resend / new subject) to pull them into the opener segment.
  • Openers graduate into the daily AM + PM cadence; only openers ever receive daily issues.
  • Segment governed: who counts as an "active opener" each day is set by the Governor (§8), per list and per ISP.
  • No manual sends: the scheduler builds and dispatches every issue on the fixed daily clock (e.g. 8 AM / 6 PM per list timezone).

The scheduler — guaranteeing automated sends

A reliable job scheduler is the heartbeat. For each list and each daily slot it: (1) resolves the active opener segment from the Governor, (2) filters against suppression, (3) asks the Newsletter Builder to assemble the issue (content + ads), (4) routes the send through the assigned provider, and (5) records results. Jobs must be idempotent, retried on failure, and alert a human only on anomalies — never to send mail, only to investigate.

Operating principle: humans configure strategy (targets, cadence, offer catalog, content sources); the machine executes every send. The only human touchpoints are onboarding, monitoring dashboards, and exception handling.
14

Recommended Technology Stack

A pragmatic, scalable stack that an experienced team can move fast on. Swap equivalents freely — the architecture, not the brand names, is what matters.

LayerRecommendationWhy
Core API / servicesNode.js (NestJS) or Python (FastAPI)Strong async I/O for webhook + send workloads; large talent pool; great ESP SDK support.
Primary databasePostgreSQLRelational integrity for clients/lists/profiles; partitioning for high-volume events; mature ecosystem.
Event / engagement storePostgres partitions + ClickHouse (at scale)ClickHouse handles billions of open/click events with fast aggregation for the Governor & reporting.
Cache & suppression indexRedisInstant pre-send suppression lookups, rate limiting, and segment caching.
Queue / workersRedis + BullMQ, or Kafka / SQS at scaleDecouples ingestion, send fan-out, and event processing; enables retries & backpressure.
SchedulerTemporal, or cron + queueDurable, observable workflows for welcome flows and daily AM/PM jobs with built-in retries.
Email deliverySendGrid · Postmark · Mailgun via SMTP relayMulti-provider routing per send type (§7); SMTP relay keeps all logic on our side.
Warm-up servicesWarmy · InboxAlly (via adapter)Automated reputation building for new client subdomains (§15).
Deliverability monitoringGoogle Postmaster Tools API + seed/placement toolReal-time reputation, spam rate, and inbox placement feeds for the dashboard (§15).
Blog / content siteNext.js (SSR/SSG) + headless CMSSEO-friendly pages for embedded video + transcribed articles + ad slots.
Transcription / article genYouTube captions → Whisper fallback → LLMCheap captions first; ASR when missing; LLM to shape readable, attributed articles.
Admin consoleReact + your component libraryOnboarding, list config, domain setup, dashboards.
Infra / hostingAWS or GCP, containers (ECS/Kubernetes), TerraformElastic for send spikes; IaC for repeatable per-client domain/IP provisioning.
DNS / domainsRoute 53 / Cloudflare APIProgrammatic subdomain + DKIM/SPF/DMARC creation during client onboarding.
AnalyticsClickHouse + Metabase / GrafanaReal-time open-rate, EPC, and revenue dashboards.
🏗️
Build-vs-buy. You are deliberately building the campaign brain (segmentation, governor, ad engine, suppression) in-house and renting only delivery (ESPs) and infra. That's the right call for this model — the proprietary value is the optimization logic, not the SMTP plumbing.

Alternative: a leaner MVP stack

The stack above is the scale-ready target. To ship an MVP fast, a lighter, managed-first stack (proposed in the partner overview) gets you live with far less infra work, and individual pieces can be swapped for the heavier options as volume grows.

LayerLean MVP choiceScales to…
Email deliveryAmazon SES (or SendGrid)Multi-ESP routing (§7)
DB + ingestionSupabase (Postgres + edge functions)Dedicated Postgres + ClickHouse
Workers / schedulerRailwayTemporal + Kafka/SQS
Blog / CMSWordPress (AdSense-friendly) or ShopifyNext.js + headless CMS
AIAnthropic (summaries, claim checks) · KIE (images)Same, plus per-segment copy variation

Integration surface

The realistic integration count is small because we expose the contract and partners conform: roughly ~12 fixed integrations built once, ~4 ingestion adapters (webhook, CSV, Sheets, ESP-pull), and 1 per affiliate network. The genuinely hard, partner-controlled parts are heterogeneous contact ingestion and affiliate conversion tracking — both mitigated by publishing our webhook spec and postback URL.

15

Deliverability, Monitoring & Warm-up

Everything else is academic if the mail lands in spam. These are the non-negotiable practices baked into the platform — plus the real-time monitoring dashboard and automated domain warm-up that keep every sending domain healthy.

Authentication on every subdomain

SPF, DKIM, and DMARC fully configured per client sending subdomain, verified automatically during onboarding before any send.

IP / domain warm-up

New subdomains and IP pools ramp volume gradually. The sending layer enforces warm-up caps so reputation builds cleanly.

One-click unsubscribe

RFC 8058 List-Unsubscribe + List-Unsubscribe-Post headers on every message — required by Gmail/Yahoo bulk-sender rules.

Complaint-rate guardrails

Keep spam complaints under 0.3%. The Governor's opener-only sending plus reminder discipline naturally suppresses complaints.

Engagement-based sending

Only mailing recent openers is itself the strongest deliverability lever — mailbox providers reward engaged-recipient sending.

Seed & inbox-placement monitoring

Seed lists + placement tools (e.g. Google Postmaster, GlockApps) flag inbox-vs-spam shifts before they crater a list.

Aggressive non-opener sunsetting

Beyond tightening the active window, subscribers who go fully cold are sunset out of sending entirely — keeping complaint rates under provider limits and protecting domain reputation.

Real-time deliverability & Postmaster dashboard

The dashboard must surface domain Postmaster health for every sending subdomain in real time and the spam/complaint rate of every list as it happens, alongside the other signals the team needs to watch daily and weekly. This is a dedicated monitoring surface in the admin console, fed by Google Postmaster Tools, ESP feedback loops, seed-list placement tests, and our own engagement events.

🟢

Domain reputation

Per-subdomain reputation (High/Med/Low) from Google Postmaster, refreshed continuously.

🚫

Spam rate

Real-time complaint/spam rate per list and per domain, with a hard alert above 0.3%.

↩️

Bounce & errors

Hard/soft bounce and delivery-error rates per domain and ESP.

📥

Inbox placement

Seed-test inbox-vs-spam placement by mailbox provider.

Metrics to monitor

MetricCadenceSourceWhy it matters
Domain & IP reputation (per subdomain)Real-time / dailyGoogle Postmaster Tools APILeading indicator of inbox vs. spam placement
Spam / complaint rate (per list & domain)Real-timePostmaster + ESP feedback loopsMust stay under 0.3% (Gmail/Yahoo limit)
Authenticated traffic % (SPF/DKIM/DMARC)DailyPostmaster ToolsConfirms every send is properly authenticated
Delivery errors & bounce rateDailyESP + PostmasterSpikes signal list-quality or reputation problems
Inbox placement by ISP (seed tests)DailySeed lists / placement toolCatches spam-foldering before opens crater
Unique open rate (per list & per ISP)Real-timeEngagement eventsDrives the Open-Rate Governor (§8)
Unsubscribe rateDailyEngagement eventsEarly warning of content/frequency fatigue
Blocklist status (Spamhaus, etc.)Daily / weeklyBlocklist lookupsImmediate action if a domain/IP is listed
Reputation & deliverability trendWeeklyRollup of the abovePer-domain and per-list health scorecard over time
Warm-up progress (new domains)Daily / weeklyWarm-up service + PostmasterTracks each new subdomain toward graduation (below)
📊
Daily vs. weekly views. The daily view is operational — spam rate, reputation, bounces, placement, and warm-up status per domain/list, with automated alerts on threshold breaches. The weekly view is strategic — reputation and deliverability trends, list health scorecards, and warm-up graduations — to guide which lists to tighten, pause, or scale.

Automated domain warm-up for new clients

New client subdomains start with zero sending reputation, so mailing them at volume immediately would land in spam and damage the parent domain. To build reputation safely, the platform integrates third-party warm-up services — Warmy and/or InboxAlly — which generate positive engagement signals (opens, replies, moves-to-inbox) on a controlled ramp. This is wired into the platform and automated as much as possible.

New subdomain provisioned at onboarding Auto-enroll warm-up Warmy / InboxAlly API ramp schedule starts Monitor reputation Postmaster health + warm-up progress Graduate & scale auto-raise real send caps as reputation clears threshold
Figure 15.1 — Warm-up is automated end to end: a new subdomain is auto-enrolled with Warmy/InboxAlly, monitored against Postmaster reputation, and graduated into real sending as its reputation clears the threshold.

How the automation works

  1. Auto-enroll on provisioning

    When a client subdomain is created (§4), the platform calls the Warmy / InboxAlly API to start a warm-up campaign automatically — no manual setup.

  2. Controlled ramp

    The warm-up service builds reputation with positive engagement on a gradual schedule, while the sending layer caps real volume in parallel (§7).

  3. Monitor against Postmaster

    The dashboard tracks each warming domain's reputation, spam rate, and authentication % in real time so the ramp can be paused if signals dip.

  4. Graduate automatically

    Once a domain holds healthy reputation and low spam rate for a set window, the platform raises its real send caps and tapers the warm-up service off — graduating it into full production sending.

  5. Exception alerts only

    Humans are notified only on anomalies (reputation drop, blocklist hit, stalled warm-up) — never to run the warm-up by hand.

🔌
Integration design. Treat warm-up providers like the ESPs — behind a small adapter interface so Warmy, InboxAlly, or a future provider can be swapped or run together. The adapter handles enrollment, ramp config, status polling, and graduation signals, all keyed to the subdomain and surfaced in the deliverability dashboard.

Consent & data

Because leads originate from the brands, the platform must capture and store the consent basis passed in the webhook, honor jurisdictional rules (CAN-SPAM, and GDPR/CASL where recipients fall under them), and maintain auditable records. The global suppression registry (§9) is the compliance backstop. A legal review of the lead-handoff consent chain and the content-republishing model (§11) is strongly recommended before scaling.

🛡️
Single biggest risk: a deliverability or compliance failure that cascades across clients. Per-client subdomain/IP isolation (§4), flawless suppression (§9), and the real-time monitoring above are the structural defenses — treat them as P0 from day one.
16

Suggested Build Roadmap

A phased path to a working platform, front-loading the pieces that protect deliverability and prove the revenue model.

Phase 1 — Foundations

Ingest, store, send one email

  • Multi-tenant data model (clients, lists, profiles)
  • Webhook Ingestion API + dedupe + consent capture
  • Global suppression registry + one-click unsubscribe
  • Single-ESP send of the welcome email
  • Per-client subdomain provisioning + DKIM/SPF/DMARC
  • Automated warm-up enrollment for new subdomains
Phase 2 — Daily engine

Automated cadence & segmentation

  • Welcome flow + 24h reminder logic
  • Scheduler for daily AM/PM sends
  • Multi-ESP routing by send type
  • Opener segments + basic Open-Rate Governor (per list)
  • Engagement event pipeline + deliverability dashboard
Phase 3 — Monetize

Newsletter, ads & content

  • Newsletter Builder (4-block layout)
  • Offer catalog + EPC-weighted ad rotation (40 offers)
  • YouTube content pipeline → blog with ads
  • Click/conversion tracking (postbacks) + EPC feedback
Phase 4 — Optimize & scale

Smarter, multi-client

  • Per-ISP segmentation in the Governor
  • Bandit-based ad selection
  • Client admin console + self-serve onboarding
  • ClickHouse analytics + placement monitoring
  • IP pool management & automated warm-up graduation
🚀
Fastest path to revenue: Phases 1–2 get a single pilot client live and re-engaging leads; Phase 3 turns those opens into affiliate income. Prove the loop with one niche and one client before scaling the catalog and multi-tenancy.

Realistic timeline & the true bottleneck

Feasibility is high — this is mostly integration work and standard patterns, with no exotic ML. Rough build estimates: an end-to-end MVP in ~8–12 days of focused build, and a full production build in ~3–4 weeks.

The bottleneck isn't the code — it's time. Two things can't be rushed: IP/domain warm-up (~3–4 weeks) and data accumulation for the optimization loops (the Governor and ad bandit need weeks of live traffic to tune). Expect a healthy live state around 6–8 weeks. Suggested build order: foundation → content engine + analytics (publish early to start indexing) → email + ESP (begin warm-up immediately) → ad bandit + postbacks → orchestration → close the loops.