A comprehensive approach to help marriages thrive.
A comprehensive approach to help marriages thrive.
DUO Product Target — What We Have · What We Want · How We Get There
Prepared by Revenue | 2026-08-08 | For: Duo 2.0 redesign kickoff (Marcus, Manager, Builder, Operator)
Source of truth for inventory: `projects/duo/audit/` (full site dump, 2026-08-08)
Status: **DRAFT for decision** — open decisions in §4
—
0. One-Page Summary
We have a live, content-rich marriage product on duo.bz (Compass diagnostic, 28-day program, 67 lessons, strong brand) that is technically a pile of hand-built React apps inside WordPress — brilliant content, fragile delivery, zero backend, and a membership gate that is client-side only.
We want Duo 2.0: a real product with the loop Assessment → Relationship Profile → Personalized Journey → Learning + Couple Activities → AI Coach → Progress/Check-ins → Next Recommendation — subscription-based, account-backed, built on the salvageable IP already on the site, *not* a port of its pages.
We get there in 4 phases: design (2 wks) → build (6 wks) → commerce/accounts (parallel) → launch & growth. Audit is already done. The existing projects/duo/ Next.js app is the seed — but it needs the assessment engine, real accounts, and one canonical curriculum.
—
1. What We Have
1.1 Live product (duo.bz) — audited 2026-08-08, full dump in `projects/duo/audit/`
Assets worth keeping (the salvage):
**The Compass**
12-dimension couple diagnostic: questions, 3–5 options each (+10…−10), scoring ranges w/ insight copy + actions, Partner A/B model
`compass_dims.json`, `apps/co2.app0.js`
**Zone model**
4 zones: Flourishing “The Eight” (≥80) · Growth “The Solid Fifteen” (≥60) · Stability “The Broader Twenty-Three” (≥40) · Restoration “The Seventy-Seven” (<40), each with positioning copy
`apps/co2.app0.js`
**Flight Plan**
3 priority tracks (Structural Damage / The Drift / The Stall) w/ root-cause copy, timelines, primary+secondary module routing, legacy projection
**Days 1–3 fully built** (State of the Union, Defensiveness Detox, The Inventory) with exercises + AI Coach widget + faith integration; **Days 4–28 content spec’d** in `data.jsx`, placeholder rendering
**EmailCaptureGate** (locked days 3–7), **AICoachWidget**, Supabase lib
⚠️ **The app’s 28-day structure differs from the WP site’s** (app: Gottman-style titles — Softened Startup, Four Horsemen Deep Dive, Emotional Bids…; WP: The Brutal Assessment, Identify Your Pattern, Stop the Bleeding…). Same underlying concepts, two curricula. **Must reconcile to one canonical structure** (decision §4.4).
1.3 Strategy assets (May 2026 docs)
**Vision: “Relationship OS”** — one brand across dating → marriage → repair (`offering-doc-duo.md`)
**Flywheel:** social content → duo.bz → free Compass → email → 28 Days → directory/dating (`duo-bz-strategy.md`)
**Personas:** the 2AM searcher, the church small-group leader, the dating-app refugee
**Future lines:** DUO Directory ($39/mo pros), DUO Dating ($24/mo) — Year 2+ per strategy docs
1.4 What we do NOT have yet (gaps 2.0 must close)
1. No accounts/auth backend (Supabase anon key only — no auth flow, no couples table)
2. No assessment engine in the app (Compass exists only as WP-embedded JS)
3. No payment/subscription integration in the app (WP-only today)
4. No server-side gating
5. No real AI coach (widget UI exists; no backend logic)
6. No email/nurture wiring (Klaviyo present on WP, unused in app)
7. No analytics on user journeys
8. Two unreconciled 28-day curricula + forked Compass instances
—
2. What We Want
2.1 Product vision
**DUO 2.0 is the relationship operating system: one product that takes a couple from assessment to lasting partnership — assessment-first, personalized journey, AI-supported, subscription-based.**
(function(){
if(window.__duoEmailInit)return;
window.__duoEmailInit=true;
var U="https://afgmlkduuapquqkcqdsk.supabase.co";
var K="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFmZ21sa2R1dWFwcXVxa2NxZHNrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgzNDA2NzYsImV4cCI6MjA5MzkxNjY3Nn0.-WQ34Jxy9CmI-SsQfcMNWPZi5AfZCzv9jZHDQ6ccEWc";
async function s(f,sr){
var e=f.querySelector("input[type=email]"),n=f.querySelector("input[name=duo_name]"),m=f.querySelector(".duo-msg"),b=f.querySelector("button"),em=e.value.trim(),nm=n?n.value.trim():"";
if(!em||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(em)){if(m){m.textContent="Please enter a valid email.";m.style.display="block";m.style.color="#ef4444";}return;}
if(b){b.disabled=true;if(!b.getAttribute("data-original"))b.setAttribute("data-original",b.textContent);b.textContent="Subscribing...";}
try{
var r=await fetch(U+"/rest/v1/duo_subscribers",{method:"POST",headers:{"Content-Type":"application/json",apikey:K,Authorization:"Bearer "+K},body:JSON.stringify({email:em,name:nm||null,source:sr})});
if(r.ok){if(m){m.textContent="✓ Welcome to DUO!";m.style.display="block";m.style.color="#22c55e";}if(e)e.value="";if(n)n.value="";}
else{var er=await r.json();if(er.code==="23505"){if(m){m.textContent="Already subscribed!";m.style.display="block";m.style.color="#22c55e";}}else{throw new Error(er.message||"Error");}}
}catch(err){if(m){m.textContent=err.message||"Please try again.";m.style.display="block";m.style.color="#ef4444";}}
finally{if(b){b.disabled=false;b.textContent=b.getAttribute("data-original")||"Subscribe";}}
}
document.addEventListener("DOMContentLoaded",function(){
document.querySelectorAll(".duo-email-form").forEach(function(f){
var sr=f.getAttribute("data-duo-source")||"website";
f.addEventListener("submit",function(e){e.preventDefault();s(f,sr);});
});
var ov=document.getElementById("duo-popup-overlay");
if(ov&&!sessionStorage.getItem("duo_popup_shown")){
setTimeout(function(){ov.style.display="flex";sessionStorage.setItem("duo_popup_shown","1");},8000);
}
var cb=document.getElementById("duo-popup-close");
if(cb){cb.addEventListener("click",function(){document.getElementById("duo-popup-overlay").style.display="none";});}
if(ov){ov.addEventListener("click",function(e){if(e.target===ov)ov.style.display="none";});}
});
})();
(function() {
window.wcAnalytics = window.wcAnalytics || {};
const wcAnalytics = window.wcAnalytics;// Set the assets URL for webpack to find the split assets.
wcAnalytics.assets_url = 'https://duo.bz/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/src/../build/';// Set the REST API tracking endpoint URL.
wcAnalytics.trackEndpoint = "https://duo.bz/wp-json/woocommerce-analytics/v1/track";// Set common properties for all events.
wcAnalytics.commonProps = {"session_id":null,"landing_page":null,"is_engaged":null,"ui":0,"blog_id":252820655,"store_id":"4735d1d5-c7ab-4559-898b-2f4ef0eaef06","url":"https://duo.bz","woo_version":"10.6.1","wp_version":"7.0.3","store_admin":0,"device":"desktop","store_currency":"USD","timezone":"+00:00","is_guest":1,"_via_ua":"Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; help@moz.com)","_via_ip":"216.244.66.202","_lg":"","_dr":"","_dl":"https://duo.bz/product-target/","_via_ref":""};// Set the event queue.
wcAnalytics.eventQueue = [];// Features.
wcAnalytics.features = {
ch: false,
sessionTracking: false,
proxy: false,
};wcAnalytics.breadcrumbs = ["DUO Product Target"];// Page context flags.
wcAnalytics.pages = {
isAccountPage: false,
isCart: false,
};
})();
(function(){
if(window.__duoEmailInit)return;
window.__duoEmailInit=true;
var U="https://afgmlkduuapquqkcqdsk.supabase.co";
var K="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFmZ21sa2R1dWFwcXVxa2NxZHNrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgzNDA2NzYsImV4cCI6MjA5MzkxNjY3Nn0.-WQ34Jxy9CmI-SsQfcMNWPZi5AfZCzv9jZHDQ6ccEWc";
async function s(f,sr){
var e=f.querySelector("input[type=email]"),n=f.querySelector("input[name=duo_name]"),m=f.querySelector(".duo-msg"),b=f.querySelector("button"),em=e.value.trim(),nm=n?n.value.trim():"";
if(!em||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(em)){if(m){m.textContent="Please enter a valid email.";m.style.display="block";m.style.color="#ef4444";}return;}
if(b){b.disabled=true;if(!b.getAttribute("data-original"))b.setAttribute("data-original",b.textContent);b.textContent="Subscribing...";}
try{
var r=await fetch(U+"/rest/v1/duo_subscribers",{method:"POST",headers:{"Content-Type":"application/json",apikey:K,Authorization:"Bearer "+K},body:JSON.stringify({email:em,name:nm||null,source:sr})});
if(r.ok){if(m){m.textContent="✓ Welcome to DUO!";m.style.display="block";m.style.color="#22c55e";}if(e)e.value="";if(n)n.value="";}
else{var er=await r.json();if(er.code==="23505"){if(m){m.textContent="Already subscribed!";m.style.display="block";m.style.color="#22c55e";}}else{throw new Error(er.message||"Error");}}
}catch(err){if(m){m.textContent=err.message||"Please try again.";m.style.display="block";m.style.color="#ef4444";}}
finally{if(b){b.disabled=false;b.textContent=b.getAttribute("data-original")||"Subscribe";}}
}
document.addEventListener("DOMContentLoaded",function(){
document.querySelectorAll(".duo-email-form").forEach(function(f){
var sr=f.getAttribute("data-duo-source")||"website";
f.addEventListener("submit",function(e){e.preventDefault();s(f,sr);});
});
var ov=document.getElementById("duo-popup-overlay");
if(ov&&!sessionStorage.getItem("duo_popup_shown")){
setTimeout(function(){ov.style.display="flex";sessionStorage.setItem("duo_popup_shown","1");},8000);
}
var cb=document.getElementById("duo-popup-close");
if(cb){cb.addEventListener("click",function(){document.getElementById("duo-popup-overlay").style.display="none";});}
if(ov){ov.addEventListener("click",function(e){if(e.target===ov)ov.style.display="none";});}
});
})();