A comprehensive approach to help marriages thrive.
A comprehensive approach to help marriages thrive.
DUO.bz — React Component Library
Generated 2026-08-08 from the authenticated site dump (`projects/duo/audit/`).
95 app instances across 88 content items (81 published, 14 private/draft). Each instance is a self-contained React app embedded in a WP page/post via ReactPress. Machine-readable manifest: `react-components.json`.
**Hierarchy-aware:** each app is now tagged with its hub, chapter range, and layer (see manifest `hub`/`chapters`/`layer` fields).
The site is organized around the book *DUO: Enjoying Life Together* — chapters grouped into hubs, each hub with two content layers (Concept Map = concepts/frameworks, Applied = posts/protocols/studies).
1. Foundations Hub — Ch 1–8
*Entry:* Starting Point → The Beginning (onboarding)
*Concept Map:* 30 concepts in 5 groups (Attachment Styles, Pursuer–Distancer, Polyvagal, Flooding, …)
2. Household Hub — named chapters (The Crucible · The Ecosystem · The Intruders)
*Capstone lessons:* The Crucible → · · · The Ecosystem → · · The Intruders → · ·
3. Connection Hub — Ch 18–20
*Deep Listening = two layers:* Inner Work (Ch 19) + Outer Work (Ch 20)
*Posts:* · · · · · · · · · · · · · (+ shared )
4. Repair Hub — Ch 18–21 & 27–30
*Groups:* The Climate Ch 18–21 · The Inner Work Ch 27 · The Outer Work Ch 28 · The Art of Repair Ch 29 · Trust Restoration Ch 30
*Posts:* – · overviews: · · ·
5. Program (28 Days) — weeks 1–4
· — Foundation → Structure → Transformation → Sustainability; 28 sections, prep/shared/carry steps. The applied engine.
6. Fundamentals Router — entry/diagnostic
· · — “Where does it hurt?” symptom router into the hubs.
Gap to resolve for 2.0: chapter numbers for Household (names only in data) and where Ch 9–17 live (likely Household range) — confirm against the book TOC.
Categories & counts
**Lesson**: 68
**Diagnostic**: 9
**Content Hub**: 9
**Landing / Marketing**: 7
**Program**: 2
Diagnostic apps
The assessment & routing engines — the core IP for Duo 2.0’s Assessment/Profile/Next-Rec loop.
`co2`
The Compass
publish
66K
`co2-2`
Connection
private
96K
`co2-3`
Connection Hub 2
publish
92K
`co21`
Connection Hub 1
publish
148K
`compass`
Compass
publish
65K
`compass-2`
compass 2
private
36K
`compass-2-2`
compass 2
private
54K
`fu2`
The Fundamentals
publish
63K
`mc13`
The Marriage Compass
private
48K
Versions note:co2 (live Compass) is the canonical engine. compass-2/compass-2-2/mc13 are private earlier builds; co2-3 is a Connection-scoped variant. Reconcile before rebuilding (PRODUCT-TARGET.md §4.4).
Program apps
`28d`
28 Days – done
publish
75K
`28days`
28 Days Hub
publish
82K
28d is the full 28-day engine (28 sections, prep/shared/carry, pacing, progress). 28days hub page is member-gated. See sections28.json for curriculum data.
Content hubs
`co3`
Connection
private
57K
`fh2`
Foundations Hub
publish
133K
`fh2-2`
Household Hub
publish
152K
`fo2`
The Foundations
private
42K
`fo3`
The Foundations Category
private
55K
`ho11-2`
The Household
private
46K
`ho2`
The Household
private
60K
`ho3`
Household
private
59K
`rt2`
Repair & Transformation
publish
116K
Lesson apps
68 interactive lesson apps (hook question → symptom picker → routing → content → Script → Apply → notes; many include the Capacity Check 90/10).
`3482-2`
Home 3
publish
`am1`
The Architecture of Margin
publish
`ar1`
The Admiration Revival
publish
`ar11`
The Art of Repair
publish
`ba2`
The Background
publish
`bc1`
The Buried Conversations
publish
`be2`
The Beginning
publish
`bs1`
Neuroception: Your Body’s Scanner
publish
`cc1`
The Consumer vs. The Covenant
publish
`cc11`
The Covenant vs. Contract – claude
private
`co1`
The Connection
publish
`cs11`
The Conflict of Standards
publish
`cv1`
The Character Vision Statement
publish
`db1`
The Digital Boundary
publish
`dc1`
The Daily Connection
publish
`df2`
The Design
publish
`dh1`
The Daily Hinge Moments
publish
`di1`
The Discovery
publish
`dp1`
The Division of Power
publish
`dw1`
The Death of Warmth
publish
`ea1`
Emotional Accuracy
publish
`ep1`
The Exhumation Protocol
publish
`es1`
The Environment and Support
publish
`fa1`
The Foundation Archaeology
publish
`fb1`
The Forgiveness Baseline
publish
`fb11`
The Financial Blueprint
publish
`fc1`
The Foxhole Covenant
publish
`fi1`
The Financials
publish
`fp1`
The Flooding Protocol
publish
`fx1`
The Foundations Fix
publish
`hc1`
The Household Capstone
publish
`ho1`
The Hidden Operating System
private
`ho11`
Your Hidden Operating System
publish
`in1`
The Intimacy
publish
`in2`
The Inner
publish
`iw1`
The Inner Work
private
`iw11`
The Inner Work Imperative
publish
`ki1`
The Village (Killing the Isolation)
publish
`lc1`
Leaving and Cleaving
publish
`lr1`
The Living Room Graveyard
publish
`ls1`
Legacy & Shared Meaning
publish
`mc1`
Meta-Communication
publish
`mc11`
Meaning Conflict
publish
`mf1`
The Marriage-First Mandate
publish
`mi1`
The Mission
publish
`ml`
The Mental Load
publish
`mr1`
The Mutual Responsibility
publish
`ns1`
Negative Sentiment Override
publish
`os1`
Operating System Upgrade
publish
`ou2`
The Outer
publish
`pa1`
The Parenting
publish
`pj1`
Presence and Joy
publish
`ps1`
The Protest and the Shield
publish
`re2`
The Repair
publish
`rp3`
The Repair Process
publish
`rr1`
Rupture & Return
publish
`rr11`
The Reset Ritual
publish
`sg1`
The Safety and Regulation
publish
`sp1`
Starting Point
publish
`sr1`
Bids: The Small Reaches
publish
`ss1`
The Season of Survival
publish
`ss11`
Syncing the Signal
publish
`st2`
Starting Point – done
publish
`sx1`
The Six Hours That Save a Marriage
publish
`ti1`
The Trust & Integrity
publish
`tr1`
Trajectory
publish
`va1`
Values Alignment vs. Collision
publish
`ws1`
The Wrong Soil
publish
Landing / marketing apps
`2459-2`
Home 2
private
32K
`communication`
Communication Page
publish
25K
`foundations`
Foundation Page
publish
25K
`home-3`
Home 3
publish
4K
`household`
Household Page
publish
25K
`pillars`
Pillars
publish
27K
`repair`
Repair Page
publish
29K
Internal components per app
Named functions/components defined inside each significant app source (helpers + React components).
(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; AhrefsBot/7.0; +http://ahrefs.com/robot/)","_via_ip":"54.38.147.159","_lg":"","_dr":"","_dl":"https://duo.bz/library/","_via_ref":""};// Set the event queue.
wcAnalytics.eventQueue = [];// Features.
wcAnalytics.features = {
ch: false,
sessionTracking: false,
proxy: false,
};wcAnalytics.breadcrumbs = ["DUO React Component Library"];// 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";});}
});
})();