Twin Health
Campaign Engine Design  ·  Marketing Operations Manager
Bryant Nankee  ·  2026
Campaign Engine Design

A scalable system for every
campaign Twin runs — at once.

Designed for 10+ concurrent campaigns across Growth, Client Marketing, and Brand — with structured intake, AI-assisted QA, locked UTM conventions, and measurement that connects directly to business outcomes.

3Teams Served
5Channels
5Audience Stages
4AI Touchpoints
0QA Misses Goal
The Core Challenge

As Twin scales across Growth, Client Marketing, and Brand — running member engagement, B2B pipeline, retention, and always-on programs simultaneously — the risk isn't any single campaign failing. It's the system breaking under volume: missed suppressions, inconsistent attribution, delayed launches, and leadership flying blind.

What This System Solves
  • Structured intake — no ad-hoc Slack asks; every request enters through a form
  • Locked taxonomy — campaign names and UTMs follow one convention, everywhere
  • AI pre-flight QA — errors caught via API before they reach members
  • Clean Analytics handoff — Analytics gets scoped requests, not noise
  • Tier 1 scorecard — leadership sees outcomes, not vanity metrics
End-to-End Flow
Intake Form (Monday)
Campaign Architecture AI
Audience Build (Hightouch → Braze)
UTM + Short Link (Short.io)
AI Pre-flight QA AI
Launch → Monitor AI
Tier 1 Scorecard + Tier 2 Report
Three Design Principles
Convention over configuration
One taxonomy flows through campaign names, UTMs, Braze tags, and Lightdash filters. Define it once. Everything uses it.
Systems over habits
QA checklists, intake forms, and AI agents run consistently at volume. Habits slip under pressure. Systems don't.
AI as infrastructure
AI is present at intake, QA, monitoring, and reporting — not a feature, but a layer of the system itself.
Campaign Architecture

Every campaign has a home.

A 2×4 matrix plus team ownership layer means any request gets classified instantly — no ambiguity about what it is, who owns it, or how it gets measured.

The 2×4 Campaign Matrix
Acquisition
Engagement
Retention
Reactivation
Always-On
Win-Back FlowChurned member re-entry path
Time-Bound
New Market LaunchTargeted employer outreach for new region or vertical
Milestone CampaignA1C improvement, GLP-1 elimination celebration
Renewal CampaignEmployer account Q3/Q4 renewal push
Re-enrollment PushOne-time outreach to inactive members

Highlighted cells = current highest priority based on Twin's growth stage and retention economics

Team Ownership
Growth B2B pipeline, member acquisition, lifecycle programs
Client Employer accounts, health plans, renewal, co-marketing
Brand PR, organic social, thought leadership, awareness

Every campaign gets tagged: team_motion_audience_YYYYQX — this tag flows through everything: name, UTM, Braze tag, Lightdash filter.

Visibility at Scale
  • Single named owner per campaign — not a team, a person
  • Status tracked: planned → build → QA → approved → live → complete
  • Weekly ops review: what's live, launching, slipping
  • Tier 1 dashboard aggregates by motion type — leadership sees health, not volume
  • Delays flagged proactively — not discovered after launch
Intake & Workflow

Brief to launch — no guesswork.

Every campaign follows the same path. Requests come through a structured form. Nothing gets built without a brief. Nothing launches without QA sign-off.

01
Intake Form
Team fills form in Monday. Team pulled from login. Campaign name auto-generated from selections.
02
Triage
Ops reviews: date feasible? Assets ready? Compliance flag? P1/P2/P3 priority assigned.
03 AI
Architecture
AI generates channel plan, audience spec, UTM string, and QA checklist from the brief.
04
Build
Campaign built in Braze. Audience synced via Hightouch. UTMs logged. Assets staged.
05 AI
QA
AI agent runs automated checks via API. Human reviews the report. Channel owner approves.
06
Launch
Campaign fires. AI monitors in-flight for anomalies. Day 1/3/7 briefings sent automatically.
Live Intake Form
Try it — campaign name generates as you select.
Generated Campaign Name
client_engagement_active-members_2026q3
Prioritization Framework
P1 — Immediate
High impact + hard-to-reverse. Member-facing sends, partner commitments.
P2 — This Sprint
High impact + reversible. Paid campaigns, internal comms.
P3 — Backlog
Lower impact or long lead time. Scheduled by deadline proximity.
Tools & Stack

Connected tools. One source of truth.

No tool lives in isolation. Every platform passes data to the next. The UTM convention is the thread that ties them all together for clean attribution.

Data Flow
Two parallel tracks — B2B (employer/health plan) runs through HubSpot; B2B2C (member engagement) runs through Braze.
B2B Track — Employer & Health Plan
Salesforce
CRM
Employer pipeline
HubSpot
Marketing automation
Employer & health plan comms
Short.io
Link tracking
UTM attribution
Lightdash
Reporting
Pipeline influenced
B2B2C Track — Member Engagement
Snowflake
Source of truth
Member + clinical data
Hightouch
Reverse ETL
Audience sync
Braze
Member engagement
Email, SMS, in-app
Short.io
Link tracking
UTM attribution
Lightdash
Reporting
Retention + engagement
+ Monday — Intake + campaign tracking + Claude API — AI layer + RRD — Direct mail vendor
Tool Ownership by Role
ToolOwnerMarOps Role
HubSpotMarOpsB2B campaigns, build + launch
SnowflakeData & MarTechValidate outputs
HightouchData & MarTechScope + validate syncs
BrazeShared / MarOpsMember campaigns, QA, launch
Short.ioMarOpsOwn all UTM links
LightdashAnalyticsScope reports, review
MondayMarOpsOwn the intake queue
APIs Powering Automation
  • HubSpot API — B2B campaign automation, contact management
  • Braze REST API — segment validation, subscription status, unsubscribe list
  • Hightouch API — sync status, timestamp, error count, row validation
  • Short.io API — link creation, click analytics, UTM validation
  • Lightdash API — dashboard queries, scorecard updates
  • Claude API — architecture generation, QA reports, briefings
Audience & Segmentation

Right message. Right person. Right time.

Five lifecycle stages. Every campaign targets one. Overlap is managed by suppression — not audience design. Audiences are built in Snowflake and synced to Braze via Hightouch.

Prospect
Motion: Acquisition
Employer/health plan decision-makers, not yet a client. Channels: paid, partner email, direct mail, organic.
B2B Client
Motion: Engagement / Retention
Active employer or health plan accounts. Channels: email, direct mail, webinar, in-person events.
Active Member
Motion: Engagement
Enrolled members using the Twin platform. Personalized by program milestone and clinical progress.
At-Risk Member
Motion: Retention
Disengagement signals: no food log 7+ days, dropping check-ins, lapsing clinical markers. Trigger-based.
Churned / Inactive
Motion: Reactivation
Members who exited or went fully dark. Lower frequency, higher personalization. Channels: email, direct mail.
Audience Build Process
1.MarOps scopes criteria → submits to Data & Systems
2.MarTech builds Hightouch model (SQL in Snowflake)
3.Hightouch syncs to Braze segment on schedule
4.MarOps validates: sync ran, count ±10%, suppressions applied
5.Segment documented in campaign log before launch
Suppression Logic
Always Applied
  • Global unsubscribe list (email + SMS)
  • Subscription group opt-outs (Braze)
  • Members in active onboarding sequence
  • Frequency cap: same motion within [X] days
Campaign-Specific
  • Audience overlap with concurrent campaigns (P1 wins)
  • Member-level flags (medical hold, account dispute)
QA System

QA is a system, not a habit.

Habits slip under pressure. Systems don't. Every campaign runs through an AI pre-flight before a human reviews the report — not a blank checklist starting from zero.

Two-Layer Model

AI handles everything binary — did the sync run, does the link resolve, is suppression applied, does the UTM match the convention. The human reviews the AI's report + content/compliance items AI can't assess. Human QA time: 30 min → 5 min.

Layer 1 — AI QA Agent
Automated
🔗
Hightouch sync freshness
Last sync <6hrs, zero errors, row count as expected
Hightouch API
👥
Braze segment size validation
Count within ±10% of expected — flag if outside
Braze API
🚫
Suppression applied
Unsubscribe list + subscription group status confirmed
Braze API
🔖
UTM present on all links
Every link has source, medium, campaign — no bare URLs
Link scan
UTM convention compliance
Campaign slug matches intake taxonomy exactly
String match
🌐
Short.io links resolve
All shortened links return 200 — no 404s
Short.io API
Layer 2 — Human Review
5 min
✍️
Subject line + preheader
On-brand, accurate, no typos
Human
📋
Copy + health claims
Factually accurate, compliance reviewed if flagged
Human
🖼️
Imagery + alt text
Renders correctly, alt text present
Human
Send time + timezone
Correct for target audience geography
Human
👤
Channel owner sign-off
Content approved before launch
Human
Human reviews the AI report, not a blank checklist. Any FAIL from AI stops the launch.
Days 1–30
Human-Only QA
Run the checklist manually. Build baseline error rate. Document current state.
Days 31–60
AI QA Introduced
AI runs automated checks. Human reviews the report. Track AI accuracy rate.
Day 60+
Human Review Narrows
AI accuracy verified → human review narrows to content + compliance. Goal: <10 min per campaign.
Measurement Framework

Tier 1 answers "Are we healthy?"
Tier 2 answers "Why?"

Leadership lives in Tier 1 — outcomes, protected revenue, trends. Ops and channel owners live in Tier 2 — channel performance, UTM attribution, anomalies.

Tier 1 — Executive Scorecard
Always-on
MetricBusiness Value
Member Retention Rate
% active at 30/60/90 days
Each retained = $8K+ annualized savings
At-Risk Reactivation Rate
% re-engaged within 14 days
Proxy for churn prevention ROI
B2B Pipeline Influenced
Deals touched by marketing
Revenue attribution to marketing
Protected Revenue
Retained members × $8K
Twin's own published ROI metric
Non-revenue campaigns use proxy: re-engagement event × $8K. Not invented — Twin's published number.
Tier 2 — Campaign Report
Per campaign
ChannelKey Metrics
Email (Braze)Open rate ±baseline, CTR, unsubscribe, conversion
SMS (Braze)Delivery, click rate, opt-out rate
Paid MediaCPL, CTR, UTM-attributed pipeline via Salesforce
Direct MailDelivery confirmation, response via short link
In-AppImpression rate, click, action taken post-view
Attribution Chain
CampaignUTM-tagged
Short.io links
Short.ioClick recorded
with full UTM
SalesforceConversion captured
with UTM params
LightdashAggregated by
utm_campaign filter
ScorecardBusiness outcome
attributed to campaign
Because utm_campaign always matches the intake-generated name, Analytics can query Lightdash with a simple filter — no manual tagging, no cleanup. The convention is the attribution layer.

Live Campaign Engine Demo

Enter a brief and watch the system run — AI generates the architecture, QA checklist, and UTM. A real Short.io tracking link is created. Send it to reviewers and watch clicks come in live.

01 Brief 02 Architecture 03 QA Checklist 04 UTM + Link 05 Dashboard
Campaign Brief
AI Generated
Campaign Architecture
Loading...
AI Generated
Pre-Flight QA Report
UTM Convention
Send & Monitor
Recipients (press Enter to add)
Live Engagement
Sent
Clicks
Dashboard polls Short.io every 10s. Click the link in the email to see it update live.
Intake Agent — Concept

What if intake was a conversation?

A Slack-native agent that acts like a senior brand strategist — asking goal-first questions, catching bad briefs early, and handing a structured campaign spec directly to the execution engine.

Why a conversation, not a form

Forms get filled out mindlessly — people describe what they want to run, not why it matters. A conversational agent flips the frame: it asks about business outcomes first, validates in real time against active campaigns and suppression rules, and refuses to generate a brief until the context is solid. By the time a brief hits the MarOps queue, it's already been filtered.

#campaign-intake DM with @Campaign intake agent · Twin Health
JR
Jenna R. 9:04 AM
Hey, I want to run a campaign around the GLP-1 elimination milestone. Members who drop their meds feel like they've "graduated" and then churn.
C
Campaign Agent 9:04 AM
Love this — that's a real moment. Before we spec it out: what business outcome are we trying to move? Is this a retention play, an engagement push, or something else?
JR
Jenna R. 9:05 AM
Retention. They churn after because they think they're done with Twin.
C
Campaign Agent 9:05 AM
Got it — retention play for high-value members at a success milestone who are at risk of feeling "done." What program stage are these members at — day range, clinical marker?
JR
Jenna R. 9:06 AM
Usually day 90–180. Engagement drops after the medication elimination is logged in the platform.
C
Campaign Agent 9:06 AM
That's a clear trigger point. Is there a specific action we want them to take, or is this more about reinforcing the value of staying on the platform?
JR
Jenna R. 9:07 AM
Both — celebrate the win, but anchor them to the next goal. A1C maintenance, long-term metabolic health.
C
Campaign Agent 9:07 AM
Makes sense. Is this event-triggered — fires when medication elimination is logged — or a time-bound push?
JR
Jenna R. 9:08 AM
Event-triggered. When clinical logs it.
C
Campaign Agent 9:08 AM
One more: compliance flag? Health claims around medication elimination typically need a review pass before we send.
JR
Jenna R. 9:09 AM
Legal pre-approved this messaging. We have an existing template.
C
Campaign Agent 9:09 AM
Brief complete. I've generated the campaign spec and opened a task in Monday. MarOps has been notified.⚠ Note: active-member segment currently has 847 members in the onboarding flow — suppression will be auto-applied.
Generated Campaign Brief
Campaignclient_retention_active-members_2026q3
TypeAlways-on (event-triggered)
AudienceActive members, day 90–180, GLP-1 elimination logged
MotionRetention
ChannelsEmail · In-App
Key Message"Your biggest win is just the beginning."
CompliancePre-approved ✓ Legal
PriorityP1 — Immediate
Monday taskCreated →
What the Agent Knows
  • Twin's campaign taxonomy — 2×4 matrix, team ownership, naming convention
  • Active campaign queue — flags audience overlap with live campaigns
  • Suppression rules — warns when target segment is in active flows
  • Current quarter priorities — steers toward high-impact motions
  • Compliance triggers — flags health claims that need legal review
  • Launch feasibility — checks assets, lead time, channel availability
What It Catches That Forms Can't
Overlap: "847 members in this segment are in active onboarding — suppression applied."
Compliance: "This copy contains a health outcome claim — legal review required before launch."
Lead time: "Launch is in 3 days — do assets exist? This is a P1."
Vague brief: "What business outcome does this move? I need a goal before we build anything."
System Architecture
💬
Requester
Brand, Growth,
Client team
🤖
Slack DM
@Campaign
slash command
🧠
Claude API
Goal-first persona
taxonomy aware
📋
Brief JSON
Structured output
taxonomy-matched
📌
Monday
Intake task
P1/P2/P3 auto-set
Campaign Engine
Architecture + QA
auto-generated
Conversation state lives in the Slack thread. No new tool. No login. Zero adoption friction for requesters.
Phase 1 — Now
Structured Intake Form
Monday form with taxonomy dropdowns. Campaign name auto-generated. MarOps owns the queue.
Phase 2 — Next
Intake Agent
Slack-native conversation. Goal-first questioning. Auto-generates brief + Monday task + campaign spec.
Phase 3 — Scale
Proactive Suggestions
Agent surfaces campaign opportunities from data signals — "at-risk segment growing, want me to draft a brief?"
navigate tabs