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.
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.
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.
Where the value is created
| Party | What they give | What they get |
|---|---|---|
| Ecommerce brand | Lapsed/dead leads they can no longer monetize | Optional revenue share, a clean re-engagement service, and a branded sending subdomain — at zero list-management cost to them |
| Subscriber | Attention & opens | Genuinely useful niche content (MorningBrew-style) plus relevant offers |
| Advertiser | Flat CPA payout per sale | Qualified, niche-matched buyers |
| Us | The platform, deliverability & content | Per-sale affiliate revenue + on-site blog ad revenue |
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.
Component responsibilities
| Service | Responsibility |
|---|---|
| Ingestion API | Receives brand webhooks, authenticates the client, validates & deduplicates the payload, and creates/updates a subscriber profile. |
| List Router | Maps each incoming lead to the correct client + niche list based on payload metadata. |
| Automation Engine | Runs the welcome flow, reminder logic, and the scheduled daily AM/PM campaign jobs. The "no human in the loop" core. |
| Open-Rate Governor | Continuously measures open rates per list and per inbox provider, and tightens/loosens the active-opener segment to hold ≥35%. |
| Newsletter Builder | Assembles each issue: 2 content blocks + 2 native ads + trending links, personalized to the list's niche. |
| Ad Rotation Engine | Selects which offers appear, weighted by performance (EPC), niche match, caps, and pacing. |
| Sending Layer | Abstraction over multiple ESPs/SMTP relays; routes each send type to a designated provider and handles retries, webhooks, and bounces. |
| Suppression / DNM | Single global registry of unsubscribes, complaints, and hard bounces, enforced before every send. |
| Deliverability Monitor | Real-time Postmaster health, per-list spam rates, blocklist checks, and automated domain warm-up (§15). |
| Content Pipeline | Ingests YouTube content from curated authority channels, builds blog articles with transcript + embed + ads. |
| Admin Console | Internal + client-facing UI for onboarding, list config, domain setup, and reporting. |
Core Concepts & Hierarchy
Five entities form the backbone of the data model. Getting these relationships right up front prevents painful re-work later.
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.
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.
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.
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.
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.
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
Authenticate & rate-limit
Verify the client API key / HMAC signature and apply per-client rate limits.
Validate & normalize
Check email syntax/MX, normalize casing, confirm
nichemaps to an existing list for that client.Check suppression & dedupe
Reject if the email is on the global DNM list or already an active subscriber on that list.
Create / update profile
Upsert the subscriber, attach to the correct niche list, store consent + source metadata.
Enqueue welcome flow
Emit a
lead.ingestedevent that triggers the Automation Engine's welcome sequence.Acknowledge
Return
202 Acceptedwith a lead id. Failed/rejected leads return a clear reason for the brand's logs.
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.
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.
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.
engagement_events is append-only and high-volume; it is the source of truth for the Governor and reporting.| Table | Purpose & key fields |
|---|---|
clients | Tenant record — name, slug, API key, contract/revenue-share terms. |
sending_domains | Per-client subdomain, assigned IP pool, and DNS auth records (DKIM/SPF/DMARC). |
lists | Niche audiences within a client. Stores the current active-opener segment configuration. |
profiles | Unique subscribers with consent, inferred ISP, source brand, and status. |
list_membership | Join of profile↔list plus the subscriber's position in the welcome/daily flow. |
engagement_events | Append-only opens / clicks / unsubscribes / bounces, tagged with campaign, ISP and ESP. Drives everything. |
suppression | Global do-not-mail registry (hashed emails) — checked before every send, account-wide. |
offers | Affiliate offer catalog — niche, advertiser, payout, creative, caps, and rolling EPC. |
campaigns / sends | Each newsletter issue and the per-recipient send records (which ESP, which segment, render). |
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.
Send-type → provider routing
The routing policy is configuration, not code — it can be re-balanced without a deploy. A starting policy:
| Send type | Default provider | Why separate |
|---|---|---|
| Welcome + reminders | Provider A | First-touch reputation kept apart from recurring volume |
| Daily AM (openers) | Provider B | High-volume recurring stream #1 |
| Daily PM (same openers) | Provider C | High-volume recurring stream #2, isolated from AM |
| Re-activation / win-back | Overflow / 4th provider | Riskier sends quarantined from healthy streams |
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
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.
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.
| List | Inbox provider | Active window | Open rate | Governor action |
|---|---|---|---|---|
| Weight Loss | Gmail | 200 days | 47% | Hold / test widen |
| Weight Loss | Yahoo | 50 days | 38% | Hold |
| Weight Loss | Verizon / AOL | 30 days | 28% | Tighten to 20 days |
| Weight Loss | Outlook / MSN | 90 days | 41% | 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
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.
Two layers of enforcement
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.
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
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.
The flow in detail
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.
Detect new uploads
Poll the YouTube Data API (or PubSubHubbub push) for new videos from curated channels; capture title, thumbnail, URL, and publish date.
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).
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.
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.
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.
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.
Scoring inputs
| Factor | What it captures |
|---|---|
| EPC (earnings per click) | The single best revenue signal — payout × conversion rate, measured live per offer per niche. |
| Payout | Flat CPA fee for the offer; higher payout, all else equal, scores higher. |
| Niche relevance | Match between offer and list niche; off-niche offers convert poorly and hurt engagement. |
| Freshness / fatigue | Down-weight offers a subscriber has seen many times recently to avoid burnout. |
| Caps & pacing | Daily/total conversion caps and budget pacing set by the advertiser. |
| Manual priority | A 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.
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:
| Mechanism | How the sale is confirmed | Notes |
|---|---|---|
| Postback / S2S pixel | Advertiser fires our postback URL on each sale, passing our click ID. | Most reliable; we expose the postback URL and the partner conforms. |
| Network API | We 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 / report | Advertiser pushes or shares a conversion feed. | Fallback for partners without postback support. |
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
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.
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.
| Layer | Recommendation | Why |
|---|---|---|
| Core API / services | Node.js (NestJS) or Python (FastAPI) | Strong async I/O for webhook + send workloads; large talent pool; great ESP SDK support. |
| Primary database | PostgreSQL | Relational integrity for clients/lists/profiles; partitioning for high-volume events; mature ecosystem. |
| Event / engagement store | Postgres partitions + ClickHouse (at scale) | ClickHouse handles billions of open/click events with fast aggregation for the Governor & reporting. |
| Cache & suppression index | Redis | Instant pre-send suppression lookups, rate limiting, and segment caching. |
| Queue / workers | Redis + BullMQ, or Kafka / SQS at scale | Decouples ingestion, send fan-out, and event processing; enables retries & backpressure. |
| Scheduler | Temporal, or cron + queue | Durable, observable workflows for welcome flows and daily AM/PM jobs with built-in retries. |
| Email delivery | SendGrid · Postmark · Mailgun via SMTP relay | Multi-provider routing per send type (§7); SMTP relay keeps all logic on our side. |
| Warm-up services | Warmy · InboxAlly (via adapter) | Automated reputation building for new client subdomains (§15). |
| Deliverability monitoring | Google Postmaster Tools API + seed/placement tool | Real-time reputation, spam rate, and inbox placement feeds for the dashboard (§15). |
| Blog / content site | Next.js (SSR/SSG) + headless CMS | SEO-friendly pages for embedded video + transcribed articles + ad slots. |
| Transcription / article gen | YouTube captions → Whisper fallback → LLM | Cheap captions first; ASR when missing; LLM to shape readable, attributed articles. |
| Admin console | React + your component library | Onboarding, list config, domain setup, dashboards. |
| Infra / hosting | AWS or GCP, containers (ECS/Kubernetes), Terraform | Elastic for send spikes; IaC for repeatable per-client domain/IP provisioning. |
| DNS / domains | Route 53 / Cloudflare API | Programmatic subdomain + DKIM/SPF/DMARC creation during client onboarding. |
| Analytics | ClickHouse + Metabase / Grafana | Real-time open-rate, EPC, and revenue dashboards. |
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.
| Layer | Lean MVP choice | Scales to… |
|---|---|---|
| Email delivery | Amazon SES (or SendGrid) | Multi-ESP routing (§7) |
| DB + ingestion | Supabase (Postgres + edge functions) | Dedicated Postgres + ClickHouse |
| Workers / scheduler | Railway | Temporal + Kafka/SQS |
| Blog / CMS | WordPress (AdSense-friendly) or Shopify | Next.js + headless CMS |
| AI | Anthropic (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.
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
| Metric | Cadence | Source | Why it matters |
|---|---|---|---|
| Domain & IP reputation (per subdomain) | Real-time / daily | Google Postmaster Tools API | Leading indicator of inbox vs. spam placement |
| Spam / complaint rate (per list & domain) | Real-time | Postmaster + ESP feedback loops | Must stay under 0.3% (Gmail/Yahoo limit) |
| Authenticated traffic % (SPF/DKIM/DMARC) | Daily | Postmaster Tools | Confirms every send is properly authenticated |
| Delivery errors & bounce rate | Daily | ESP + Postmaster | Spikes signal list-quality or reputation problems |
| Inbox placement by ISP (seed tests) | Daily | Seed lists / placement tool | Catches spam-foldering before opens crater |
| Unique open rate (per list & per ISP) | Real-time | Engagement events | Drives the Open-Rate Governor (§8) |
| Unsubscribe rate | Daily | Engagement events | Early warning of content/frequency fatigue |
| Blocklist status (Spamhaus, etc.) | Daily / weekly | Blocklist lookups | Immediate action if a domain/IP is listed |
| Reputation & deliverability trend | Weekly | Rollup of the above | Per-domain and per-list health scorecard over time |
| Warm-up progress (new domains) | Daily / weekly | Warm-up service + Postmaster | Tracks each new subdomain toward graduation (below) |
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.
How the automation works
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.
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).
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.
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.
Exception alerts only
Humans are notified only on anomalies (reputation drop, blocklist hit, stalled warm-up) — never to run the warm-up by hand.
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.
Suggested Build Roadmap
A phased path to a working platform, front-loading the pieces that protect deliverability and prove the revenue model.
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
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
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
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
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.