From 04ded989ffd5a7560f54d8ed034b448994e93dc1 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 22:42:27 -0400 Subject: [PATCH 01/57] research(pdr-010): competitor family taxonomy + apples-to-apples DB - 24 brands, 233 classified body profiles across 6 ZELEX families - SQLite DB with competitor_rows, brand_summary, brand_geographic, market_tiers, market_regions, inventory_only tables - Pricing, quality signals, geographic metadata per brand - Irontech official + Tayu sitemap + Dollstudio multi-brand crawl - RealDoll 13-model inventory captured (classification pending) - Approved PDR-010 design spec added --- db/competitor_family_coverage.json | 6795 +---------------- db/competitor_family_coverage.sqlite | Bin 270336 -> 131072 bytes .../competitor-family-coverage-matrix.csv | 262 - .../competitor-family-coverage-matrix.md | 64 +- scripts/build_competitor_catalog_taxonomy.py | 182 +- 5 files changed, 19 insertions(+), 7284 deletions(-) diff --git a/db/competitor_family_coverage.json b/db/competitor_family_coverage.json index 78070c2..de1bacc 100644 --- a/db/competitor_family_coverage.json +++ b/db/competitor_family_coverage.json @@ -23,17 +23,11 @@ "https://us.dollstudio.org/supplier/gynoid", "https://us.dollstudio.org/supplier/zelex", "https://www.tayu-doll.com/product-sitemap.xml", - "https://www.realdoll.com/product-sitemap.xml", - "https://www.siliconwives.com/collections/sanhui-doll-brand/products.json?limit=250", - "https://www.siliconwives.com/collections/shop-funwest-doll/products.json?limit=250", - "https://www.siliconwives.com/collections/shop-dime-doll/products.json?limit=250", - "https://www.siliconwives.com/collections/shop-lilydoll-brand/products.json?limit=250", - "https://www.siliconwives.com/collections/shop-md-doll-brand-sex-dolls/products.json?limit=250", - "https://www.siliconwives.com/collections/shop-lusandy-doll/products.json?limit=250" + "https://www.realdoll.com/product-sitemap.xml" ], "summary": { - "row_count": 495, - "brand_count": 30, + "row_count": 233, + "brand_count": 24, "brands": [ { "brand": "6YE Premium", @@ -152,85 +146,6 @@ "exact": 1 } }, - { - "brand": "Dime Doll", - "total": 31, - "top_two_share_pct": 83.9, - "family_counts": { - "The Classic": 2, - "The Icon": 2, - "The Muse": 21, - "The Siren": 0, - "The Empress": 5, - "The Sculpt": 1 - }, - "materials": [ - "silicone" - ], - "height_min_cm": 165.0, - "height_max_cm": 172.0, - "pricing": { - "count": 31, - "coverage_pct": 100.0, - "median_usd": 1699.0, - "min_usd": 1399.0, - "max_usd": 1799.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 100.0, - "tpe_share_pct": 0.0, - "exact_plus_near_pct": 58.1, - "source_tier_mix": { - "secondary": 31 - } - }, - "confidence_mix": { - "near": 17, - "manual-review": 13, - "exact": 1 - } - }, - { - "brand": "FunWest", - "total": 106, - "top_two_share_pct": 73.6, - "family_counts": { - "The Classic": 0, - "The Icon": 40, - "The Muse": 38, - "The Siren": 10, - "The Empress": 1, - "The Sculpt": 17 - }, - "materials": [ - "TPE", - "silicone" - ], - "height_min_cm": 150.0, - "height_max_cm": 168.0, - "pricing": { - "count": 106, - "coverage_pct": 100.0, - "median_usd": 1599.0, - "min_usd": 1299.0, - "max_usd": 2499.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 46.2, - "tpe_share_pct": 53.8, - "exact_plus_near_pct": 78.3, - "source_tier_mix": { - "secondary": 106 - } - }, - "confidence_mix": { - "near": 72, - "exact": 11, - "manual-review": 23 - } - }, { "brand": "Game Lady", "total": 6, @@ -656,121 +571,6 @@ "near": 3 } }, - { - "brand": "Lilydoll", - "total": 14, - "top_two_share_pct": 78.6, - "family_counts": { - "The Classic": 6, - "The Icon": 1, - "The Muse": 0, - "The Siren": 0, - "The Empress": 5, - "The Sculpt": 2 - }, - "materials": [ - "hybrid" - ], - "height_min_cm": 157.0, - "height_max_cm": 168.0, - "pricing": { - "count": 14, - "coverage_pct": 100.0, - "median_usd": 1199.0, - "min_usd": 1199.0, - "max_usd": 1299.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 0.0, - "tpe_share_pct": 0.0, - "exact_plus_near_pct": 100.0, - "source_tier_mix": { - "secondary": 14 - } - }, - "confidence_mix": { - "near": 9, - "exact": 5 - } - }, - { - "brand": "Lusandy Doll", - "total": 35, - "top_two_share_pct": 85.7, - "family_counts": { - "The Classic": 0, - "The Icon": 10, - "The Muse": 20, - "The Siren": 0, - "The Empress": 0, - "The Sculpt": 5 - }, - "materials": [ - "hybrid", - "silicone" - ], - "height_min_cm": 159.0, - "height_max_cm": 170.0, - "pricing": { - "count": 35, - "coverage_pct": 100.0, - "median_usd": 2699.0, - "min_usd": 2599.0, - "max_usd": 2699.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 82.9, - "tpe_share_pct": 0.0, - "exact_plus_near_pct": 100.0, - "source_tier_mix": { - "secondary": 35 - } - }, - "confidence_mix": { - "near": 35 - } - }, - { - "brand": "MD Doll", - "total": 69, - "top_two_share_pct": 72.5, - "family_counts": { - "The Classic": 1, - "The Icon": 7, - "The Muse": 9, - "The Siren": 2, - "The Empress": 13, - "The Sculpt": 37 - }, - "materials": [ - "silicone" - ], - "height_min_cm": 150.0, - "height_max_cm": 168.0, - "pricing": { - "count": 69, - "coverage_pct": 100.0, - "median_usd": 2599.0, - "min_usd": 1674.0, - "max_usd": 2599.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 33.3, - "tpe_share_pct": 0.0, - "exact_plus_near_pct": 72.5, - "source_tier_mix": { - "secondary": 69 - } - }, - "confidence_mix": { - "exact": 40, - "manual-review": 19, - "near": 10 - } - }, { "brand": "Piper Doll", "total": 10, @@ -928,45 +728,6 @@ "near": 4 } }, - { - "brand": "Sanhui", - "total": 7, - "top_two_share_pct": 57.1, - "family_counts": { - "The Classic": 1, - "The Icon": 3, - "The Muse": 1, - "The Siren": 1, - "The Empress": 0, - "The Sculpt": 1 - }, - "materials": [ - "silicone" - ], - "height_min_cm": 163.0, - "height_max_cm": 168.0, - "pricing": { - "count": 7, - "coverage_pct": 100.0, - "median_usd": 2599.0, - "min_usd": 2499.0, - "max_usd": 3199.0 - }, - "quality_signals": { - "measurement_completeness_pct": 100.0, - "silicone_share_pct": 100.0, - "tpe_share_pct": 0.0, - "exact_plus_near_pct": 85.7, - "source_tier_mix": { - "secondary": 7 - } - }, - "confidence_mix": { - "near": 2, - "manual-review": 1, - "exact": 4 - } - }, { "brand": "Tayu", "total": 21, @@ -7166,6556 +6927,6 @@ "family_confidence": "manual-review", "family_basis": "Nearest family center outside both range bands", "notes": "Deduplicated by body descriptor from Tayu product sitemap" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/pippa-japanese-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PIPPA JAPANESE SEX DOLL", - "title": "Pippa: Asian Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 163.0, - "weight_kg": 31.0, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 76.2, - "underbust_cm": null, - "cup": null, - "price": 3199.0, - "price_currency": "USD", - "WHR": 0.734, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/ruby-165cm-silicone-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "RUBY 165CM SILICONE SEX DOLL", - "title": "Ruby: Huge Tits Silicone Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 40.0, - "bust_cm": 111.8, - "waist_cm": 53.3, - "hip_cm": 86.4, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.617, - "BWR": 2.098, - "assigned_family": "The Siren", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/samantha-165cm-silicone-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SAMANTHA 165CM SILICONE SEX DOLL", - "title": "Samantha: Brunette Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 33.0, - "bust_cm": 78.7, - "waist_cm": 53.3, - "hip_cm": 76.2, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.699, - "BWR": 1.477, - "assigned_family": "The Classic", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/tall-blonde-japanese-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TALL BLONDE JAPANESE SEX DOLL", - "title": "Ahri: Tall Blonde Japanese Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 25.0, - "bust_cm": 81.3, - "waist_cm": 53.3, - "hip_cm": 76.2, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.699, - "BWR": 1.525, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/cat-cosplay-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CAT COSPLAY SEX DOLL", - "title": "Cat: Cosplay Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 32.0, - "bust_cm": 83.8, - "waist_cm": 53.3, - "hip_cm": 86.4, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.617, - "BWR": 1.572, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/goldie-silicone-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GOLDIE SILICONE SEX DOLL", - "title": "Goldie: Silicone Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 32.0, - "bust_cm": 83.8, - "waist_cm": 53.3, - "hip_cm": 86.4, - "underbust_cm": null, - "cup": null, - "price": 2999.0, - "price_currency": "USD", - "WHR": 0.617, - "BWR": 1.572, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Sanhui", - "source_url": "https://www.siliconwives.com/products/jade-korean-silicone-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JADE KOREAN SILICONE SEX DOLL", - "title": "Jade: Korean Silicone Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 32.0, - "bust_cm": 83.8, - "waist_cm": 53.3, - "hip_cm": 86.4, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.617, - "BWR": 1.572, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/princesa-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PRINCESA READY TO SHIP", - "title": "Princesa: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 150.0, - "weight_kg": 28.0, - "bust_cm": 80.0, - "waist_cm": 48.0, - "hip_cm": 74.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.641, - "BWR": 1.667, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/princesa-sexy-nightclub-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PRINCESA SEXY NIGHTCLUB SEX DOLL", - "title": "Princesa: Sexy Nightclub Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 150.0, - "weight_kg": 28.0, - "bust_cm": 80.0, - "waist_cm": 48.0, - "hip_cm": 74.9, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.641, - "BWR": 1.667, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/iris-cover-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "IRIS COVER GIRL SEX DOLL", - "title": "Iris: Cover Girl Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 47.8, - "hip_cm": 75.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.63, - "BWR": 1.504, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/iris-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "IRIS READY TO SHIP", - "title": "Iris: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 47.8, - "hip_cm": 75.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.63, - "BWR": 1.504, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/luana-cute-teacher-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUANA CUTE TEACHER SEX DOLL", - "title": "Luana: Cute Teacher Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 47.8, - "hip_cm": 75.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.63, - "BWR": 1.504, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/luana-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUANA READY TO SHIP", - "title": "Luana: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 47.8, - "hip_cm": 75.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.63, - "BWR": 1.504, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/nika-japanese-beach-club-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIKA JAPANESE BEACH CLUB SEX DOLL", - "title": "Nika: Japanese Beach Club Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.1, - "waist_cm": 48.0, - "hip_cm": 77.0, - "underbust_cm": null, - "cup": null, - "price": 2049.0, - "price_currency": "USD", - "WHR": 0.623, - "BWR": 1.481, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/nika-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIKA READY TO SHIP", - "title": "Nika: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.1, - "waist_cm": 48.0, - "hip_cm": 77.0, - "underbust_cm": null, - "cup": null, - "price": 1949.0, - "price_currency": "USD", - "WHR": 0.623, - "BWR": 1.481, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/peppa-japanese-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PEPPA JAPANESE TEEN SEX DOLL", - "title": "Peppa: Japanese Teen Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 152.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 47.8, - "hip_cm": 75.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.63, - "BWR": 1.504, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/bella-hot-christmas-eve-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BELLA HOT CHRISTMAS EVE SEX DOLL", - "title": "Bella: Hot Christmas Eve Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/bella-ready-to-ship-1", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BELLA READY TO SHIP 1", - "title": "Bella: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/darlene-baseball-cheerleader-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DARLENE BASEBALL CHEERLEADER SEX DOLL", - "title": "Darlene: Baseball Cheerleader Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/darlene-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DARLENE READY TO SHIP", - "title": "Darlene: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/luz-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUZ READY TO SHIP", - "title": "Luz: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/luz-reindeer-stripper-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUZ REINDEER STRIPPER SEX DOLL", - "title": "Luz: Reindeer Stripper Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/quince-after-school-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "QUINCE AFTER SCHOOL SEX DOLL", - "title": "Quince: After School Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/quince-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "QUINCE READY TO SHIP", - "title": "Quince: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/winslow-freaky-fantasy-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "WINSLOW FREAKY FANTASY SEX DOLL", - "title": "Winslow: Freaky Fantasy Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/winslow-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "WINSLOW READY TO SHIP", - "title": "Winslow: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 155.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 87.4, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.596, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/skye-tropical-paradise-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SKYE TROPICAL PARADISE SEX DOLL", - "title": "Skye: Tropical Paradise Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 156.0, - "weight_kg": 29.0, - "bust_cm": 79.0, - "waist_cm": 52.8, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.562, - "BWR": 1.496, - "assigned_family": "The Icon", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/alice-cute-maid-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ALICE CUTE MAID SEX DOLL", - "title": "Alice: Cute Maid Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/amy-winter-lover-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "AMY WINTER LOVER SEX DOLL", - "title": "Amy: Winter Lover Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/andy-island-fling-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANDY ISLAND FLING SEX DOLL", - "title": "Andy: Island Fling Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/aris-cyber-stripper-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ARIS CYBER STRIPPER SEX DOLL", - "title": "Aris: Cyber Stripper Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/aris-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ARIS READY TO SHIP", - "title": "Aris: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/assos-music-festival-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ASSOS MUSIC FESTIVAL SEX DOLL", - "title": "Assos: Music Festival Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/bella-sun-goddess-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BELLA SUN GODDESS SEX DOLL", - "title": "Bella: Sun Goddess Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/brie-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BRIE READY TO SHIP", - "title": "Brie: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 81.0, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.525, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/brie-seductive-lounge-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BRIE SEDUCTIVE LOUNGE SEX DOLL", - "title": "Brie: Smoking Lounge Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 81.0, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.525, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/contessa-hot-co-worker-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CONTESSA HOT CO WORKER SEX DOLL", - "title": "Contessa: Hot Co-worker Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 81.0, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.525, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/eloise-blone-idol-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ELOISE BLONE IDOL SEX DOLL", - "title": "Eloise: Blone Idol Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lily-pink-bunny-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LILY PINK BUNNY SEX DOLL", - "title": "Lily: Pink Bunny Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lucy-military-combat-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUCY MILITARY COMBAT SEX DOLL", - "title": "Lucy: Military Combat Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyla-clubbing-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYLA CLUBBING TEEN SEX DOLL", - "title": "Lyla: Clubbing Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyla-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYLA READY TO SHIP", - "title": "Lyla: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyra-christmas-present-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYRA CHRISTMAS PRESENT SEX DOLL", - "title": "Lyra: Christmas Present Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyra-nightclub-singer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYRA NIGHTCLUB SINGER SEX DOLL", - "title": "Lyra: Nightclub Singer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/meta-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "META READY TO SHIP", - "title": "Meta: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/meta-rebellious-sci-fi-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "META REBELLIOUS SCI FI SEX DOLL", - "title": "Meta: Rebellious Sci-fi Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/rosey-little-red-dress-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ROSEY LITTLE RED DRESS SEX DOLL", - "title": "Rosey: Little Red Dress Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/rosey-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ROSEY READY TO SHIP", - "title": "Rosey: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 33.0, - "bust_cm": 80.8, - "waist_cm": 52.8, - "hip_cm": 96.8, - "underbust_cm": null, - "cup": null, - "price": 2399.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.53, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sloane-drill-sergeant-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SLOANE DRILL SERGEANT SEX DOLL", - "title": "Sloane: Drill Sergeant Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sloane-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SLOANE READY TO SHIP", - "title": "Sloane: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/tetty-punk-rock-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TETTY PUNK ROCK SEX DOLL", - "title": "Tetty: Punk Rock Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 32.0, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 83.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.622, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/westerly-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "WESTERLY READY TO SHIP", - "title": "Westerly: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/westerly-young-maiden-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "WESTERLY YOUNG MAIDEN SEX DOLL", - "title": "Westerly: Young Maiden Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 157.0, - "weight_kg": 40.0, - "bust_cm": 74.9, - "waist_cm": 53.1, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.547, - "BWR": 1.411, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/zenni-bosss-daughter-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZENNI BOSSS DAUGHTER SEX DOLL", - "title": "Zenni: Boss's Daughter Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 157.0, - "weight_kg": 32.0, - "bust_cm": 80.0, - "waist_cm": 52.1, - "hip_cm": 83.8, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.622, - "BWR": 1.536, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/aerie-fantasy-school-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "AERIE FANTASY SCHOOL GIRL SEX DOLL", - "title": "Aerie: Fantasy School Girl Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/anakin-cute-egirl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANAKIN CUTE EGIRL SEX DOLL", - "title": "Anakin: Cute eGirl Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/anakin-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANAKIN READY TO SHIP", - "title": "Anakin: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/carol-christmas-eve-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CAROL CHRISTMAS EVE SEX DOLL", - "title": "Carol: Christmas Eve Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/carol-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CAROL READY TO SHIP", - "title": "Carol: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/clarina-tropical-honeymoon-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CLARINA TROPICAL HONEYMOON SEX DOLL", - "title": "Clarina: Tropical Honeymoon Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/erin-date-night-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ERIN DATE NIGHT SEX DOLL", - "title": "Erin: Date Night Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/esme-double-agent-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ESME DOUBLE AGENT SEX DOLL", - "title": "Esme: Double Agent Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/eudora-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EUDORA READY TO SHIP", - "title": "Eudora: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/eudora-sassy-brat-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EUDORA SASSY BRAT SEX DOLL", - "title": "Eudora: Sassy Brat Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/giselle-cute-blonde-maid-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GISELLE CUTE BLONDE MAID SEX DOLL", - "title": "Giselle: Cute Blonde Maid Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/giselle-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GISELLE READY TO SHIP", - "title": "Giselle: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/iridessa-blackjack-dealer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "IRIDESSA BLACKJACK DEALER SEX DOLL", - "title": "Iridessa: Blackjack Dealer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/iridessa-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "IRIDESSA READY TO SHIP", - "title": "Iridessa: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/jinxy-anime-gunslinger-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JINXY ANIME GUNSLINGER SEX DOLL", - "title": "Jinxy: Anime Gunslinger Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/jinxy-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JINXY READY TO SHIP", - "title": "Jinxy: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lacy-art-student-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LACY ART STUDENT SEX DOLL", - "title": "Lacy: Art Student Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyra-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYRA READY TO SHIP", - "title": "Lyra: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyra-romantic-chateau-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYRA ROMANTIC CHATEAU SEX DOLL", - "title": "Lyra: Romantic Chateau Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lyra-sexy-casino-dealer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LYRA SEXY CASINO DEALER SEX DOLL", - "title": "Lyra: Sexy Casino Dealer Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/minara-date-night-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MINARA DATE NIGHT SEX DOLL", - "title": "Minara: Date Night Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/minara-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MINARA READY TO SHIP", - "title": "Minara: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/nidalee-jungle-babe-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIDALEE JUNGLE BABE SEX DOLL", - "title": "Nidalee: Jungle Babe Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/nidalee-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIDALEE READY TO SHIP", - "title": "Nidalee: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/niko-petite-teen-asian-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIKO PETITE TEEN ASIAN SEX DOLL", - "title": "Niko: Petite Teen Asian Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 37.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/niko-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIKO READY TO SHIP", - "title": "Niko: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 37.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sophiemina-college-girlfriend-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SOPHIEMINA COLLEGE GIRLFRIEND SEX DOLL", - "title": "Sophiemina: College Girlfriend Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sophiemina-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SOPHIEMINA READY TO SHIP", - "title": "Sophiemina: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/stormy-supernatural-powers-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "STORMY SUPERNATURAL POWERS SEX DOLL", - "title": "Stormy: Supernatural Powers Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 30.0, - "bust_cm": 71.9, - "waist_cm": 53.8, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.336, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/zinna-pink-ninja-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZINNA PINK NINJA SEX DOLL", - "title": "Zinna: Pink Ninja Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/zinna-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZINNA READY TO SHIP", - "title": "Zinna: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 159.0, - "weight_kg": 44.0, - "bust_cm": 71.9, - "waist_cm": 58.7, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.225, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/cherie-pure-blonde-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CHERIE PURE BLONDE SEX DOLL", - "title": "Cherie: Pure Blonde Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/jasmin-extreme-sports-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JASMIN EXTREME SPORTS SEX DOLL", - "title": "Jasmin: Extreme Sports Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/jasmin-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JASMIN READY TO SHIP", - "title": "Jasmin: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 1874.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/jeany-prom-night-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JEANY PROM NIGHT SEX DOLL", - "title": "Jeany: Prom Night Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/juliette-casino-waitress-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JULIETTE CASINO WAITRESS SEX DOLL", - "title": "Juliette: Casino Waitress Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/morticia-spooky-nurse-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MORTICIA SPOOKY NURSE SEX DOLL", - "title": "Morticia: Spooky Nurse Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/natalie-russian-wife-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NATALIE RUSSIAN WIFE SEX DOLL", - "title": "Natalie: Russian Wife Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/tripoli-ethereal-sorceress-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TRIPOLI ETHEREAL SORCERESS SEX DOLL", - "title": "Tripoli: Ethereal Sorceress Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 32.0, - "bust_cm": 81.8, - "waist_cm": 49.3, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2149.0, - "price_currency": "USD", - "WHR": 0.548, - "BWR": 1.659, - "assigned_family": "The Siren", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/assos-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ASSOS READY TO SHIP", - "title": "Assos: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/assos-sexy-blonde-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ASSOS SEXY BLONDE TEEN SEX DOLL", - "title": "Assos: Sexy Blonde Teen Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/harlow-honeymoon-suite-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "HARLOW HONEYMOON SUITE SEX DOLL", - "title": "Harlow: Honeymoon Suite Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/samara-occult-witch-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SAMARA OCCULT WITCH SEX DOLL", - "title": "Samara: Occult Witch Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/samara-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SAMARA READY TO SHIP", - "title": "Samara: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/talvi-badass-blonde-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TALVI BADASS BLONDE SEX DOLL", - "title": "Talvi: Badass Blonde Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/talvi-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TALVI READY TO SHIP", - "title": "Talvi: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 162.0, - "weight_kg": 44.5, - "bust_cm": 80.0, - "waist_cm": 55.1, - "hip_cm": 85.1, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.647, - "BWR": 1.452, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/dayna-curvy-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DAYNA CURVY TEEN SEX DOLL", - "title": "Dayna: Curvy Teen Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 163.0, - "weight_kg": 47.0, - "bust_cm": 91.9, - "waist_cm": 59.9, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1649.0, - "price_currency": "USD", - "WHR": 0.618, - "BWR": 1.534, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/eira-sexy-ski-weekend-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EIRA SEXY SKI WEEKEND SEX DOLL", - "title": "Eira: Sexy Ski Weekend Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 163.0, - "weight_kg": 47.0, - "bust_cm": 91.9, - "waist_cm": 59.9, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1649.0, - "price_currency": "USD", - "WHR": 0.618, - "BWR": 1.534, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lena-after-prom-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LENA AFTER PROM SEX DOLL", - "title": "Lena: After Prom Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 163.0, - "weight_kg": 47.0, - "bust_cm": 91.9, - "waist_cm": 59.9, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1649.0, - "price_currency": "USD", - "WHR": 0.618, - "BWR": 1.534, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lexie-hot-half-asian-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LEXIE HOT HALF ASIAN SEX DOLL", - "title": "Lexie: Hot Half-Asian Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 165.0, - "weight_kg": 47.0, - "bust_cm": 75.9, - "waist_cm": 56.9, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.633, - "BWR": 1.334, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/lexie-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LEXIE READY TO SHIP", - "title": "Lexie: Ready To Ship", - "series": null, - "material": "TPE", - "height_cm": 165.0, - "weight_kg": 47.0, - "bust_cm": 75.9, - "waist_cm": 56.9, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.633, - "BWR": 1.334, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sheila-cute-intern-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SHEILA CUTE INTERN SEX DOLL", - "title": "Sheila: Cute Intern Sex Doll", - "series": null, - "material": "TPE", - "height_cm": 165.0, - "weight_kg": 47.0, - "bust_cm": 75.9, - "waist_cm": 56.9, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 1599.0, - "price_currency": "USD", - "WHR": 0.633, - "BWR": 1.334, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/estelle-super-model-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ESTELLE SUPER MODEL SEX DOLL", - "title": "Estelle: Super Model Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 166.0, - "weight_kg": 33.0, - "bust_cm": 86.4, - "waist_cm": 53.8, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2167.0, - "price_currency": "USD", - "WHR": 0.598, - "BWR": 1.606, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/alexi-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ALEXI READY TO SHIP", - "title": "Alexi: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2199.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/alexi-steampunk-cosplay-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ALEXI STEAMPUNK COSPLAY SEX DOLL", - "title": "Alexi: Steampunk Cosplay Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/elio-bottle-service-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ELIO BOTTLE SERVICE SEX DOLL", - "title": "Elio: Bottle Service Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/skyler-hot-assassin-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SKYLER HOT ASSASSIN SEX DOLL", - "title": "Skyler: Hot Assassin Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/sophiemina-innocent-secretary-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SOPHIEMINA INNOCENT SECRETARY SEX DOLL", - "title": "Sophiemina: Innocent Secretary Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "FunWest", - "source_url": "https://www.siliconwives.com/products/vesper-hot-sex-dungeon-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "VESPER HOT SEX DUNGEON SEX DOLL", - "title": "Vesper: Hot Sex Dungeon Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 42.0, - "bust_cm": 89.9, - "waist_cm": 62.0, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.639, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/cervine-70s-babe-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CERVINE 70S BABE SEX DOLL", - "title": "Cervine: 70s Babe Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 32.0, - "bust_cm": 78.7, - "waist_cm": 55.9, - "hip_cm": 83.1, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.673, - "BWR": 1.408, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/enid-fortune-teller-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ENID FORTUNE TELLER SEX DOLL", - "title": "Enid: Fortune Teller Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 34.0, - "bust_cm": 83.8, - "waist_cm": 52.3, - "hip_cm": 96.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.602, - "assigned_family": "The Empress", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/erika-busty-butterfly-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ERIKA BUSTY BUTTERFLY SEX DOLL", - "title": "Erika: Busty Butterfly Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 34.0, - "bust_cm": 83.8, - "waist_cm": 52.3, - "hip_cm": 96.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.602, - "assigned_family": "The Empress", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/judy-european-royalty-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JUDY EUROPEAN ROYALTY SEX DOLL", - "title": "Judy: European Royalty Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 34.0, - "bust_cm": 83.8, - "waist_cm": 52.3, - "hip_cm": 96.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.602, - "assigned_family": "The Empress", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/lizabeth-exotic-dancer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LIZABETH EXOTIC DANCER SEX DOLL", - "title": "Lizabeth: Exotic Dancer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 34.0, - "bust_cm": 83.8, - "waist_cm": 52.3, - "hip_cm": 96.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.602, - "assigned_family": "The Empress", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/remi-after-school-sex-doll-copy", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "REMI AFTER SCHOOL SEX DOLL COPY", - "title": "Remi: After School Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 34.0, - "bust_cm": 83.8, - "waist_cm": 52.3, - "hip_cm": 96.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.545, - "BWR": 1.602, - "assigned_family": "The Empress", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/cora-fancy-gala-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CORA FANCY GALA SEX DOLL", - "title": "Cora: Fancy Gala Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/giusta-jazz-singer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GIUSTA JAZZ SINGER SEX DOLL", - "title": "Giusta: Jazz Singer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/hailey-teen-nextdoor-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "HAILEY TEEN NEXTDOOR SEX DOLL", - "title": "Hailey: Teen Nextdoor Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/jack-perky-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JACK PERKY TEEN SEX DOLL", - "title": "Jack: Perky Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/sienna-angelic-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SIENNA ANGELIC TEEN SEX DOLL", - "title": "Sienna: Angelic Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/skylar-milf-nextdoor-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SKYLAR MILF NEXTDOOR SEX DOLL", - "title": "Skylar: MILF Nextdoor Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/sofia-spring-break-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SOFIA SPRING BREAK SEX DOLL", - "title": "Sofia: Spring Break Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/alani-pink-lady-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ALANI PINK LADY SEX DOLL", - "title": "Alani: Pink Lady Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/alina-buxom-brunette-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ALINA BUXOM BRUNETTE SEX DOLL", - "title": "Alina: Buxom Brunette Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/dita-curvy-red-head-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DITA CURVY RED HEAD SEX DOLL", - "title": "Dita: Curvy Red Head Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/elvira-club-dancer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ELVIRA CLUB DANCER SEX DOLL", - "title": "Elvira: Club Dancer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/jasmina-piercing-gaze-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JASMINA PIERCING GAZE SEX DOLL", - "title": "Jasmina: Piercing Gaze Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/mazena-blonde-lingerie-model-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAZENA BLONDE LINGERIE MODEL SEX DOLL", - "title": "Mazena: Blonde Lingerie Model Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/perla-porn-audition-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PERLA PORN AUDITION SEX DOLL", - "title": "Perla: Porn Audition Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 169.0, - "weight_kg": 50.0, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/claire-sexy-pigtails-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CLAIRE SEXY PIGTAILS SEX DOLL", - "title": "Claire: Sexy Pigtails Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 31.75, - "bust_cm": 76.2, - "waist_cm": 55.9, - "hip_cm": 88.9, - "underbust_cm": null, - "cup": null, - "price": 1499.0, - "price_currency": "USD", - "WHR": 0.629, - "BWR": 1.363, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/cordelia-country-cutie-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CORDELIA COUNTRY CUTIE SEX DOLL", - "title": "Cordelia: Country Cutie Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/isladora-naughty-brat-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ISLADORA NAUGHTY BRAT SEX DOLL", - "title": "Isladora: Naughty Brat Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/josy-hip-hop-dancer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOSY HIP HOP DANCER SEX DOLL", - "title": "Josy: Hip Hop Dancer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/laura-croft-sexy-raider-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LAURA CROFT SEXY RAIDER SEX DOLL", - "title": "Laura Croft: Sexy Raider Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/paige-blonde-bridesmaid-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PAIGE BLONDE BRIDESMAID SEX DOLL", - "title": "Paige: Blonde Bridesmaid Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/teo-purple-bunny-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TEO PURPLE BUNNY SEX DOLL", - "title": "Teo: Purple Bunny Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 30.8, - "bust_cm": 89.9, - "waist_cm": 69.8, - "hip_cm": 97.0, - "underbust_cm": null, - "cup": null, - "price": 1799.0, - "price_currency": "USD", - "WHR": 0.72, - "BWR": 1.288, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/eleanor-naughty-housekeeper-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ELEANOR NAUGHTY HOUSEKEEPER SEX DOLL", - "title": "Eleanor: Naughty Housekeeper Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 171.0, - "weight_kg": 39.0, - "bust_cm": 87.9, - "waist_cm": 58.4, - "hip_cm": 98.3, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.594, - "BWR": 1.505, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/camilia-pretty-mouth-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CAMILIA PRETTY MOUTH SEX DOLL", - "title": "Camilia: Pretty Mouth Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 172.0, - "weight_kg": 46.0, - "bust_cm": 94.5, - "waist_cm": 66.0, - "hip_cm": 105.9, - "underbust_cm": null, - "cup": null, - "price": 1699.0, - "price_currency": "USD", - "WHR": 0.623, - "BWR": 1.432, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/katherine-golden-goddess-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KATHERINE GOLDEN GODDESS SEX DOLL", - "title": "Katherine: Golden Goddess Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 172.0, - "weight_kg": 29.75, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 86.4, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.615, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Dime Doll", - "source_url": "https://www.siliconwives.com/products/nara-tanned-babe-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NARA TANNED BABE SEX DOLL", - "title": "Nara: Tanned Babe Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 172.0, - "weight_kg": 27.8, - "bust_cm": 77.2, - "waist_cm": 50.8, - "hip_cm": 78.7, - "underbust_cm": null, - "cup": null, - "price": 1399.0, - "price_currency": "USD", - "WHR": 0.645, - "BWR": 1.52, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/buttercup-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BUTTERCUP READY TO SHIP", - "title": "Buttercup: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 157.0, - "weight_kg": 54.0, - "bust_cm": 93.0, - "waist_cm": 62.0, - "hip_cm": 105.9, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.585, - "BWR": 1.5, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/aria-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ARIA READY TO SHIP", - "title": "Aria: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 158.0, - "weight_kg": 34.0, - "bust_cm": 78.0, - "waist_cm": 50.0, - "hip_cm": 85.6, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.56, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/ember-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EMBER READY TO SHIP", - "title": "Ember: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 158.0, - "weight_kg": 34.0, - "bust_cm": 78.0, - "waist_cm": 50.0, - "hip_cm": 85.6, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.56, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/fig-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "FIG READY TO SHIP", - "title": "Fig: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 158.0, - "weight_kg": 34.0, - "bust_cm": 78.0, - "waist_cm": 50.0, - "hip_cm": 85.6, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.56, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/honey-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "HONEY READY TO SHIP", - "title": "Honey: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 158.0, - "weight_kg": 34.0, - "bust_cm": 78.0, - "waist_cm": 50.0, - "hip_cm": 85.6, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.56, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/maple-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAPLE READY TO SHIP", - "title": "Maple: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 158.0, - "weight_kg": 34.0, - "bust_cm": 78.0, - "waist_cm": 50.0, - "hip_cm": 85.6, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.56, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/adette-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ADETTE READY TO SHIP", - "title": "Adette: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 166.0, - "weight_kg": 34.0, - "bust_cm": 73.7, - "waist_cm": 50.3, - "hip_cm": 81.3, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.465, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/rue-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "RUE READY TO SHIP", - "title": "Rue: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 166.0, - "weight_kg": 34.0, - "bust_cm": 73.7, - "waist_cm": 50.3, - "hip_cm": 81.3, - "underbust_cm": null, - "cup": null, - "price": 1199.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.465, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/anelis-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANELIS READY TO SHIP", - "title": "Anelis: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/elara-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ELARA READY TO SHIP", - "title": "Elara: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/jadey-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JADEY READY TO SHIP", - "title": "Jadey: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/seline-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SELINE READY TO SHIP", - "title": "Seline: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/torin-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TORIN READY TO SHIP", - "title": "Torin: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lilydoll", - "source_url": "https://www.siliconwives.com/products/vanta-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "VANTA READY TO SHIP", - "title": "Vanta: Ready To Ship", - "series": null, - "material": "hybrid", - "height_cm": 168.0, - "weight_kg": 41.0, - "bust_cm": 86.9, - "waist_cm": 61.0, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 1299.0, - "price_currency": "USD", - "WHR": 0.671, - "BWR": 1.425, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/ameli-pink-pixie-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "AMELI PINK PIXIE SEX DOLL", - "title": "Ameli: Pink Pixie Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/angela-nature-photographer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANGELA NATURE PHOTOGRAPHER SEX DOLL", - "title": "Angela: Nature Photographer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/celina-fine-art-student-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CELINA FINE ART STUDENT SEX DOLL", - "title": "Celina: Fine Art Student Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/gigi-cute-tea-party-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GIGI CUTE TEA PARTY SEX DOLL", - "title": "Gigi: Cute Tea Party Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/gigi-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GIGI READY TO SHIP", - "title": "Gigi: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/jacqueline-punk-rocker-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JACQUELINE PUNK ROCKER SEX DOLL", - "title": "Jacqueline: Punk Rocker Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/letitia-bad-student-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LETITIA BAD STUDENT SEX DOLL", - "title": "Letitia: Bad Student Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/mabel-fun-cosplay-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MABEL FUN COSPLAY SEX DOLL", - "title": "Mabel: Fun Cosplay Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/phoebe-cute-japanese-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PHOEBE CUTE JAPANESE SEX DOLL", - "title": "Phoebe: Cute Japanese Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/poppy-bed-time-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "POPPY BED TIME SEX DOLL", - "title": "Poppy: Bed Time Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/sophia-forest-elf-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SOPHIA FOREST ELF SEX DOLL", - "title": "Sophia: Forest Elf Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/susan-cute-shy-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SUSAN CUTE SHY SEX DOLL", - "title": "Susan: Cute Shy Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 26.0, - "bust_cm": 71.4, - "waist_cm": 56.4, - "hip_cm": 79.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.714, - "BWR": 1.266, - "assigned_family": "The Muse", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/theresa-fun-asian-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "THERESA FUN ASIAN TEEN SEX DOLL", - "title": "Theresa: Fun Asian Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/tina-chinese-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "TINA CHINESE TEEN SEX DOLL", - "title": "Tina: Chinese Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 150.0, - "weight_kg": 27.0, - "bust_cm": 77.0, - "waist_cm": 53.1, - "hip_cm": 81.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.656, - "BWR": 1.45, - "assigned_family": "The Sculpt", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/camila-pink-princess-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CAMILA PINK PRINCESS SEX DOLL", - "title": "Camila: Pink Princess Sex Doll", - "series": null, - "material": null, - "height_cm": 151.0, - "weight_kg": 25.0, - "bust_cm": 78.0, - "waist_cm": 48.0, - "hip_cm": 77.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.623, - "BWR": 1.625, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/lanthe-rock-n-roll-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LANTHE ROCK N ROLL SEX DOLL", - "title": "Lanthe: Rock n Roll Sex Doll", - "series": null, - "material": null, - "height_cm": 159.0, - "weight_kg": 27.0, - "bust_cm": 71.1, - "waist_cm": 50.0, - "hip_cm": 79.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.633, - "BWR": 1.422, - "assigned_family": "The Classic", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/fanny-busty-red-head-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "FANNY BUSTY RED HEAD SEX DOLL", - "title": "Fanny: Busty Red Head Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 160.0, - "weight_kg": 28.0, - "bust_cm": 80.0, - "waist_cm": 56.9, - "hip_cm": 87.1, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.653, - "BWR": 1.406, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/aaliyah-curvy-black-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "AALIYAH CURVY BLACK GIRL SEX DOLL", - "title": "Aaliyah: Curvy Black Girl Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/belinda-full-figured-blonde-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BELINDA FULL FIGURED BLONDE SEX DOLL", - "title": "Belinda: Full-Figured Blonde Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/belinda-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BELINDA READY TO SHIP", - "title": "Belinda: Ready To Ship", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/jezebel-voluptuous-blonde-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JEZEBEL VOLUPTUOUS BLONDE SEX DOLL", - "title": "Jezebel: Voluptuous Blonde Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/joelle-atlanta-stripper-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOELLE ATLANTA STRIPPER SEX DOLL", - "title": "Joelle: Atlanta Stripper Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/nia-plump-tan-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIA PLUMP TAN SEX DOLL", - "title": "Nia: Plump Secretary Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/nia-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIA READY TO SHIP", - "title": "Nia: Ready To Ship", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/norma-curvy-blonde-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NORMA CURVY BLONDE SEX DOLL", - "title": "Norma: Curvy Blonde Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/norma-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NORMA READY TO SHIP", - "title": "Norma: Ready To Ship", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/olive-sexy-bridesmaid-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "OLIVE SEXY BRIDESMAID SEX DOLL", - "title": "Olive: Busty Bridesmaid Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/zuri-curvy-rich-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZURI CURVY RICH GIRL SEX DOLL", - "title": "Zuri: Curvy Rich Girl Sex Doll", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/zuri-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZURI READY TO SHIP", - "title": "Zuri: Ready To Ship", - "series": null, - "material": null, - "height_cm": 162.0, - "weight_kg": 40.5, - "bust_cm": 94.5, - "waist_cm": 59.9, - "hip_cm": 102.6, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.584, - "BWR": 1.578, - "assigned_family": "The Empress", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/cindy-sexy-professor-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "CINDY SEXY PROFESSOR SEX DOLL", - "title": "Cindy: Sexy Professor Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 163.0, - "weight_kg": 37.0, - "bust_cm": 83.1, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.487, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/vicky-beach-babe-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "VICKY BEACH BABE SEX DOLL", - "title": "Vicky: Beach Babe Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 163.0, - "weight_kg": 37.0, - "bust_cm": 83.1, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.487, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/coco-fashion-intern-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "COCO FASHION INTERN SEX DOLL", - "title": "Coco: Fashion Intern Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 164.0, - "weight_kg": 38.0, - "bust_cm": 86.6, - "waist_cm": 51.6, - "hip_cm": 87.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.587, - "BWR": 1.678, - "assigned_family": "The Siren", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/linda-bubble-party-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LINDA BUBBLE PARTY SEX DOLL", - "title": "Linda: Bubble Party Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 164.0, - "weight_kg": 45.0, - "bust_cm": 86.6, - "waist_cm": 55.9, - "hip_cm": 89.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.622, - "BWR": 1.549, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/lolly-busty-cute-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LOLLY BUSTY CUTE TEEN SEX DOLL", - "title": "Lolly: Busty Cute Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 164.0, - "weight_kg": 38.0, - "bust_cm": 86.6, - "waist_cm": 51.6, - "hip_cm": 87.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.587, - "BWR": 1.678, - "assigned_family": "The Siren", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/andrea-sporty-fit-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANDREA SPORTY FIT SEX DOLL", - "title": "Andrea: Sporty Fit Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/ann-hot-yoga-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANN HOT YOGA SEX DOLL", - "title": "Ann: Hot Yoga Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 63.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.676, - "BWR": 1.332, - "assigned_family": "The Muse", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/ann-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANN READY TO SHIP", - "title": "Ann: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 63.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.676, - "BWR": 1.332, - "assigned_family": "The Muse", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/bonnie-photography-club-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BONNIE PHOTOGRAPHY CLUB SEX DOLL", - "title": "Bonnie: Photography Club Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 41.0, - "bust_cm": 89.4, - "waist_cm": 60.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.644, - "BWR": 1.478, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/bonnie-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BONNIE READY TO SHIP", - "title": "Bonnie: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 41.0, - "bust_cm": 89.4, - "waist_cm": 60.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.644, - "BWR": 1.478, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/brianna-sexy-mma-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BRIANNA SEXY MMA SEX DOLL", - "title": "Brianna: Sexy MMA Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 43.0, - "bust_cm": 84.6, - "waist_cm": 55.1, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.606, - "BWR": 1.535, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/doreen-netflix-and-chill-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DOREEN NETFLIX AND CHILL SEX DOLL", - "title": "Doreen: Netflix and Chill Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/doris-asian-secretary-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DORIS ASIAN SECRETARY SEX DOLL", - "title": "Doris: Asian Secretary Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/eileen-sultry-pale-skin-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EILEEN SULTRY PALE SKIN SEX DOLL", - "title": "Eileen: Sultry Pale Skin Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/gianna-goth-rocker-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GIANNA GOTH ROCKER SEX DOLL", - "title": "Gianna: Goth Rocker Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/grace-captivating-eyes-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "GRACE CAPTIVATING EYES SEX DOLL", - "title": "Grace: Captivating Eyes Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/heather-sexy-dj-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "HEATHER SEXY DJ SEX DOLL", - "title": "Heather: Sexy DJ Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 55.1, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.606, - "BWR": 1.535, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/jennifer-magicians-assistant-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JENNIFER MAGICIANS ASSISTANT SEX DOLL", - "title": "Jennifer: Magician's Assistant Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 43.0, - "bust_cm": 84.6, - "waist_cm": 57.7, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.635, - "BWR": 1.466, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/joan-real-estate-agent-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOAN REAL ESTATE AGENT SEX DOLL", - "title": "Joan: Real Estate Agent Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 55.1, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.606, - "BWR": 1.535, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/joanna-camping-fling-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOANNA CAMPING FLING SEX DOLL", - "title": "Joanna: Camping Fling Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/joanna-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOANNA READY TO SHIP", - "title": "Joanna: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/judy-rich-chinese-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JUDY RICH CHINESE GIRL SEX DOLL", - "title": "Judy: Rich Chinese Girl Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 43.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/kamari-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KAMARI READY TO SHIP", - "title": "Kamari: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/kamari-sexy-lips-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KAMARI SEXY LIPS SEX DOLL", - "title": "Kamari: Sexy Lips Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/kylie-shanghai-escort-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KYLIE SHANGHAI ESCORT SEX DOLL", - "title": "Kylie: Shanghai Escort Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/may-emperors-mistress-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAY EMPERORS MISTRESS SEX DOLL", - "title": "May: Emperor's Mistress Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 43.0, - "bust_cm": 84.6, - "waist_cm": 57.7, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.635, - "BWR": 1.466, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/nancy-whips-and-chains-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NANCY WHIPS AND CHAINS GIRL SEX DOLL", - "title": "Nancy: Whips and Chains Girl Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 43.0, - "bust_cm": 84.6, - "waist_cm": 55.1, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.606, - "BWR": 1.535, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/rebeca-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "REBECA READY TO SHIP", - "title": "Rebeca: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 63.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.676, - "BWR": 1.332, - "assigned_family": "The Muse", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/rebeca-sultry-latina-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "REBECA SULTRY LATINA SEX DOLL", - "title": "Rebeca: Sultry Latina Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 63.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.676, - "BWR": 1.332, - "assigned_family": "The Muse", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/rose-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ROSE READY TO SHIP", - "title": "Rose: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 41.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/rose-sunset-romance-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ROSE SUNSET ROMANCE SEX DOLL", - "title": "Rose: Sunset Romance Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 41.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/sammy-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SAMMY READY TO SHIP", - "title": "Sammy: Ready To Ship", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/sammy-sexy-ceo-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SAMMY SEXY CEO SEX DOLL", - "title": "Sammy: Sexy CEO Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/seren-teen-brat-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "SEREN TEEN BRAT SEX DOLL", - "title": "Seren: Teen Brat Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 55.1, - "hip_cm": 90.9, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.606, - "BWR": 1.535, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/victoria-mature-seductress-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "VICTORIA MATURE SEDUCTRESS SEX DOLL", - "title": "Victoria: Mature Seductress Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 39.5, - "bust_cm": 84.6, - "waist_cm": 63.5, - "hip_cm": 94.0, - "underbust_cm": null, - "cup": null, - "price": 2499.0, - "price_currency": "USD", - "WHR": 0.676, - "BWR": 1.332, - "assigned_family": "The Muse", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/viona-pink-treat-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "VIONA PINK TREAT SEX DOLL", - "title": "Viona: Pink Treat Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/zuki-extra-credit-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZUKI EXTRA CREDIT SEX DOLL", - "title": "Zuki: Extra Credit Sex Doll", - "series": null, - "material": null, - "height_cm": 166.0, - "weight_kg": 38.0, - "bust_cm": 81.0, - "waist_cm": 55.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.608, - "BWR": 1.449, - "assigned_family": "The Sculpt", - "family_confidence": "manual-review", - "family_basis": "Nearest family center outside both range bands", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/jeane-brown-goddess-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JEANE BROWN GODDESS SEX DOLL", - "title": "Jeane: Brown Goddess Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 43.0, - "bust_cm": 88.9, - "waist_cm": 64.0, - "hip_cm": 114.3, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.56, - "BWR": 1.389, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/jeane-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JEANE READY TO SHIP", - "title": "Jeane: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 167.0, - "weight_kg": 43.0, - "bust_cm": 88.9, - "waist_cm": 64.0, - "hip_cm": 114.3, - "underbust_cm": null, - "cup": null, - "price": 1674.0, - "price_currency": "USD", - "WHR": 0.56, - "BWR": 1.389, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "MD Doll", - "source_url": "https://www.siliconwives.com/products/irissa-fantasy-elf-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "IRISSA FANTASY ELF SEX DOLL", - "title": "Irissa: Fantasy Elf Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 168.0, - "weight_kg": 31.5, - "bust_cm": 83.1, - "waist_cm": 53.1, - "hip_cm": 84.6, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.628, - "BWR": 1.565, - "assigned_family": "The Icon", - "family_confidence": "exact", - "family_basis": "Both WHR and BWR fall inside the family range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/kailani-big-tit-asian-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KAILANI BIG TIT ASIAN SEX DOLL", - "title": "Kailani: Big Tit Asian Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/kailani-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KAILANI READY TO SHIP", - "title": "Kailani: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/kasumi-japanese-swimsuit-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "KASUMI JAPANESE SWIMSUIT SEX DOLL", - "title": "Kasumi: Japanese Swimsuit Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/laguna-oiled-up-stripper-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LAGUNA OILED UP STRIPPER SEX DOLL", - "title": "Laguna: Oiled Up Stripper Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/lisha-slutty-egirl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LISHA SLUTTY EGIRL SEX DOLL", - "title": "Lisha: Slutty eGirl Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/luella-country-girl-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LUELLA COUNTRY GIRL SEX DOLL", - "title": "Luella: Country Girl Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/marlo-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MARLO READY TO SHIP", - "title": "Marlo: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/marlo-sexy-streamer-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MARLO SEXY STREAMER SEX DOLL", - "title": "Marlo: Sexy Streamer Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/monica-oil-massage-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MONICA OIL MASSAGE SEX DOLL", - "title": "Monica: Oil Massage Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/nari-private-study-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NARI PRIVATE STUDY SEX DOLL", - "title": "Nari: Private Study Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/peace-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PEACE READY TO SHIP", - "title": "Peace: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/peace-slutty-santa-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "PEACE SLUTTY SANTA SEX DOLL", - "title": "Peace: Slutty Santa Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/yuzu-curvy-asian-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "YUZU CURVY ASIAN SEX DOLL", - "title": "Yuzu: Curvy Asian Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 159.0, - "weight_kg": 43.0, - "bust_cm": 96.0, - "waist_cm": 63.0, - "hip_cm": 109.0, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.578, - "BWR": 1.524, - "assigned_family": "The Icon", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/lani-summer-love-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "LANI SUMMER LOVE SEX DOLL", - "title": "Lani: Summer Love Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 161.0, - "weight_kg": 30.2, - "bust_cm": 79.0, - "waist_cm": 56.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.388, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/mei-mei-loving-teen-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MEI MEI LOVING TEEN SEX DOLL", - "title": "Mei Mei: Loving Teen Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 161.0, - "weight_kg": 30.2, - "bust_cm": 79.0, - "waist_cm": 56.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.388, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/naomi-business-trip-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NAOMI BUSINESS TRIP SEX DOLL", - "title": "Naomi: Business Trip Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 161.0, - "weight_kg": 30.2, - "bust_cm": 79.0, - "waist_cm": 56.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.388, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/zoe-fitness-babe-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ZOE FITNESS BABE SEX DOLL", - "title": "Zoe: Fitness Babe Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 161.0, - "weight_kg": 30.2, - "bust_cm": 79.0, - "waist_cm": 56.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.619, - "BWR": 1.388, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/balia-italian-lingerie-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BALIA ITALIAN LINGERIE SEX DOLL", - "title": "Balia: Italian Lingerie Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/dusk-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DUSK READY TO SHIP", - "title": "Dusk: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/dusk-winter-cottage-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "DUSK WINTER COTTAGE SEX DOLL", - "title": "Dusk: Winter Cottage Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/effie-office-affair-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "EFFIE OFFICE AFFAIR SEX DOLL", - "title": "Effie: Office Affair Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/hailee-seductive-red-head-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "HAILEE SEDUCTIVE RED HEAD SEX DOLL", - "title": "Hailee: Seductive Red Head Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 30.2, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 99.8, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.611, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/maia-elegant-brunette-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAIA ELEGANT BRUNETTE SEX DOLL", - "title": "Maia: Elegant Brunette Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/maia-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAIA READY TO SHIP", - "title": "Maia: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/natalee-fun-ski-weekend-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NATALEE FUN SKI WEEKEND SEX DOLL", - "title": "Natalee: Fun Ski Weekend Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/natalee-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NATALEE READY TO SHIP", - "title": "Natalee: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 165.0, - "weight_kg": 43.0, - "bust_cm": 82.8, - "waist_cm": 61.0, - "hip_cm": 100.1, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.609, - "BWR": 1.357, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/anais-christmas-in-paris-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANAIS CHRISTMAS IN PARIS SEX DOLL", - "title": "Anais: Christmas in Paris Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 167.0, - "weight_kg": 39.0, - "bust_cm": 77.0, - "waist_cm": 59.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.652, - "BWR": 1.285, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/anais-teen-babysitter-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "ANAIS TEEN BABYSITTER SEX DOLL", - "title": "Anais: Teen Babysitter Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 167.0, - "weight_kg": 39.0, - "bust_cm": 77.0, - "waist_cm": 59.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.652, - "BWR": 1.285, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/becker-bedroom-angel-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "BECKER BEDROOM ANGEL SEX DOLL", - "title": "Becker: Bedroom Angel Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 167.0, - "weight_kg": 39.0, - "bust_cm": 77.0, - "waist_cm": 59.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.652, - "BWR": 1.285, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/jilian-summer-love-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JILIAN SUMMER LOVE SEX DOLL", - "title": "Jilian: Summer Love Sex Doll", - "series": null, - "material": "hybrid", - "height_cm": 167.0, - "weight_kg": 39.0, - "bust_cm": 77.0, - "waist_cm": 59.9, - "hip_cm": 91.9, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.652, - "BWR": 1.285, - "assigned_family": "The Muse", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/joan-fitness-chick-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "JOAN FITNESS CHICK SEX DOLL", - "title": "Joan: Fitness Chick Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 41.5, - "bust_cm": 90.9, - "waist_cm": 61.0, - "hip_cm": 99.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.616, - "BWR": 1.49, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/maya-hot-mom-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAYA HOT MOM SEX DOLL", - "title": "Maya: Hot Mom Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 41.5, - "bust_cm": 90.9, - "waist_cm": 61.0, - "hip_cm": 99.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.616, - "BWR": 1.49, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/maya-ready-to-ship", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MAYA READY TO SHIP", - "title": "Maya: Ready To Ship", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 41.5, - "bust_cm": 90.9, - "waist_cm": 61.0, - "hip_cm": 99.1, - "underbust_cm": null, - "cup": null, - "price": 2599.0, - "price_currency": "USD", - "WHR": 0.616, - "BWR": 1.49, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/mizuki-bangkok-escort-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "MIZUKI BANGKOK ESCORT SEX DOLL", - "title": "Mizuki: Bangkok Escort Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 41.5, - "bust_cm": 90.9, - "waist_cm": 61.0, - "hip_cm": 99.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.616, - "BWR": 1.49, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" - }, - { - "brand": "Lusandy Doll", - "source_url": "https://www.siliconwives.com/products/nikky-orange-bikini-sex-doll", - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": "NIKKY ORANGE BIKINI SEX DOLL", - "title": "Nikky: Orange Bikini Sex Doll", - "series": null, - "material": "silicone", - "height_cm": 170.0, - "weight_kg": 41.5, - "bust_cm": 90.9, - "waist_cm": 61.0, - "hip_cm": 99.1, - "underbust_cm": null, - "cup": null, - "price": 2699.0, - "price_currency": "USD", - "WHR": 0.616, - "BWR": 1.49, - "assigned_family": "The Sculpt", - "family_confidence": "near", - "family_basis": "Nearest family center with one ratio inside range", - "notes": "Extracted from Shopify product body_html via SiliconWives" } ] } \ No newline at end of file diff --git a/db/competitor_family_coverage.sqlite b/db/competitor_family_coverage.sqlite index 0c346483e1b1322f9ac40cc62f1b4249a8285b5d..0e7002e8c9870840b19341a8906c94210b199373 100644 GIT binary patch delta 2569 zcmZuy4Nw&48QyQdy}jMN-Tn4B;qE+vLq&-w%I|<03koWTNI=J*(I9~n&jR8BD#0Jt z9}*|AO5d4YCNoWlKY-#-U=eZPIacfa?!j!Q;IhjiHI#2m-@>Gkv%(=|Qw1mg>|$k$pZhX2NKfTksIDlZ$xn*XY56>a4=&B z8V5?|PUM2uGcWL4W8hlWcI1SG*?W)ySF$%E0vS1-{7xO_%JS%! zIr4Y%CHXD+l>CC6Bge_xug`4Z^Ue;MOK1S z!-=ROP+jjYt*&h|bex3BgH3^u^^mAI9+d=Jn>Pj;>vUFCvb#D|9}Ki;R7%(q*9g;gQ4ltpcg zn}fAB#%@t{L%?Du(4`_bmrXTvg&u}G_;XIH)D~!&ps&w?SJyv;UDe&RQIAmM^O{68 zd~ppj3@ekr!|AW7x72jUC>TxSVR}<1eAv_jo3<3f&$r~C>mn#}C-guKk9v?NTxCOA z7la6ulz>&MEO8Dt#m7(bSiC1y;7xAC`C%HlBy&qPDPL( z$)nKNk&MmO!tjsY!*PSBy76)n<%Cs^{Da&kUyy4NqvI-~#4}Jt-8-y?znF=p%x34^ zE2MCwo$&e&?OUxwv#W>HWJjOFuN;ye%B|9P9zhGZX#bARd*bduLg#jUju5=e; z)9!`Fp4X&p9wpwL7@G~>^`t{qZ@yIHR=gBQh8?|A;Y4qa5sFiM3~=%BZR~SE*I7Tr z_7zI&W1|nCx-SI=&cwibeMu4;XMyQ(wJ!}G_bt`ex}sT0ysNmN61ux5f_WlM+7hEA zS+5y9kxKL8;PHuR(gx?)inC6pz{@9drCMVQc!vU?oy?J{$QYpXr$BChh9v2ZB)2;@ z9YXzS(9^$M+N~*x?sy8|Q!^p=)DkI9b$BhH|L6?(5pZM>D3?c!ZKS1twP z>=ayHumCQeoiCd_Qrwh70o*yB1?PKWAiF1LHaoUneTXBk69;jV)ufJO=(qI|QbKO( zPsl|wPrpvClD9~R^ym-BZt^!Wg$$5K`Vjs4yP`_reRg_1-_M<;8)I{4>Bg8WSh`UX zo#SzA9t$e1d33P}E@-R^)ccnNo0~257?T?3Gh=Hoza%OTgqG}nX6p6l=2-iFz*WYP z$qy4T$5XLV2%dy;Ru}opLxF~1YlHlpNLjj38I>#M zdrT#H3A<%WQwJ_3=v228hs&vMHw`bNx_xQ*C4?d7dIjPkKrMoy>t*^mjy$B(`zLap zd_>OCrvH@Guy?f9w}h%^G(~w^jK+K$+fzfZ_USXhj$JIqth=wY*471DX3&tAu~&|U zOaVk~6-V|EQQxck=|A2o`l3ROUn|0zuh&tALth6e!-;omD8tUXCS@qyYo`qN-Rm$! za)TqIjdJuKdV-dz7CY7`o8)%s zko|~w-u9{RYkY(M1NxF1?dtk4JnF{<;i@Ej0k@b7!f8G{Jv?_JzCxqH0+4)xO`^i{vcoc4gBbsh#@#;j!G#QIu z3E%R=+(=i~rNI#cmnnkTVivQ47sK!R@DSc+E@n~O|670i1bj{0Y%cP0>EWbA>2^ei<* XKgR}D*gMY*hSToz?!kj2d^7$JnIEnO literal 270336 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

Ie;Tic8URJMiUPz@{X6# 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 str: SupplierConfig("Game Lady", "game-lady"), SupplierConfig("Gynoid", "gynoid"), # ZELEX via Dollstudio (cross-check against local baseline) - SupplierConfig("ZELEX", "zelex", source_label="Dollstudio supplier catalogue (ZELEX cross-check)"), + SupplierConfig("ZELEX (Dollstudio)", "zelex"), ] -BRAND_ALIASES = { - "ZELEX (Dollstudio)": "ZELEX", -} - - -def canonical_brand(brand: str) -> str: - return BRAND_ALIASES.get(brand, brand) - # --------------------------------------------------------------------------- # Geographic / market metadata — encoded from public brand knowledge # --------------------------------------------------------------------------- @@ -191,36 +183,10 @@ def canonical_brand(brand: str) -> str: "primary_markets": ["NA", "EU", "APAC"], "tier": "mid", "tier_usd_floor": 1600, "segment": "silicone_tpe", "market_notes": "Volume mid-tier; moderate Western distribution"}, - "Sanhui": {"country": "China", "hq_city": "Shenzhen", "region": "Asia", - "primary_markets": ["NA", "EU"], - "tier": "premium", "tier_usd_floor": 3000, - "segment": "silicone", - "market_notes": "Full-silicone premium brand; boutique catalogue; strong realism reputation"}, - "FunWest": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA", "EU"], - "tier": "budget-mid", "tier_usd_floor": 1000, - "segment": "tpe", - "market_notes": "High-volume TPE; broad body range; strong reseller distribution"}, - "Dime Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA"], - "tier": "mid", "tier_usd_floor": 1500, - "segment": "silicone", - "market_notes": "Silicone-focused mid brand; growing NA DTC presence via SiliconWives"}, - "Lilydoll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA", "EU"], - "tier": "mid", "tier_usd_floor": 1500, - "segment": "silicone_tpe", - "market_notes": "Plush-skew body range; Empress/BBW-adjacent catalogue"}, - "MD Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA", "EU"], - "tier": "mid", "tier_usd_floor": 1400, - "segment": "tpe", - "market_notes": "Volume TPE brand; broad height and cup range"}, - "Lusandy Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA", "EU"], - "tier": "mid", "tier_usd_floor": 1400, - "segment": "silicone_tpe", - "market_notes": "Mid-tier multi-material catalogue; moderate Western distribution"}, + "ZELEX (Dollstudio)": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA", "EU", "AU", "APAC"], + "tier": "premium", "tier_usd_floor": 2800, + "segment": "silicone", "market_notes": "Same brand as baseline; Dollstudio cross-check"}, } # Market tier definitions for the market analysis table @@ -235,8 +201,6 @@ def canonical_brand(brand: str) -> str: # Geographic market segments referenced in BRAND_GEO MARKET_REGIONS = [ - {"code": "US", "label": "United States", "key_countries": "USA", - "notes": "Strict US-only market view (distinct from wider North America rollup)"}, {"code": "NA", "label": "North America", "key_countries": "USA, Canada", "notes": "Largest single revenue market; highest price tolerance; RealDoll, Irontech, Tayu strong here"}, {"code": "EU", "label": "Europe", "key_countries": "Germany, UK, France, Netherlands", @@ -258,6 +222,12 @@ def canonical_brand(brand: str) -> str: "reason": "No stable machine-readable body-style catalogue endpoint has been integrated yet.", "source_url": "https://www.dollforever.com/", }, + { + "brand": "Tayu", + "status": "pending-source", + "reason": "No stable machine-readable body-style catalogue endpoint has been integrated yet.", + "source_url": "https://www.tayudoll.com/", + }, { "brand": "Sanhui", "status": "pending-source", @@ -464,7 +434,7 @@ def scrape_supplier(config: SupplierConfig, session: requests.Session, families: rows.append( { - "brand": canonical_brand(config.brand), + "brand": config.brand, "source_url": url, "source_tier": config.source_tier, "source_label": config.source_label, @@ -726,127 +696,6 @@ def capture_realdoll_inventory(session: requests.Session) -> list[dict]: return inventory -# --------------------------------------------------------------------------- -# SiliconWives Shopify adapter — brands not available via Dollstudio -# --------------------------------------------------------------------------- - -@dataclass(frozen=True) -class SiliconWivesConfig: - brand: str - collection_slug: str - min_height_cm: float = 100.0 - - @property - def url(self) -> str: - return f"https://www.siliconwives.com/collections/{self.collection_slug}/products.json?limit=250" - - -SW_COLLECTIONS = [ - SiliconWivesConfig("Sanhui", "sanhui-doll-brand"), - SiliconWivesConfig("FunWest", "shop-funwest-doll"), - SiliconWivesConfig("Dime Doll", "shop-dime-doll"), - SiliconWivesConfig("Lilydoll", "shop-lilydoll-brand"), - SiliconWivesConfig("MD Doll", "shop-md-doll-brand-sex-dolls"), - SiliconWivesConfig("Lusandy Doll", "shop-lusandy-doll"), -] - -# Strict US market evidence is tied to brands observed in US-facing channels used by this pipeline. -US_MARKET_BRANDS = {canonical_brand(s.brand) for s in SUPPLIERS} | {canonical_brand(s.brand) for s in SW_COLLECTIONS} | {"RealDoll"} - - -def with_us_market_code(brand_name: str, markets: list[str]) -> list[str]: - out = list(markets or []) - if canonical_brand(brand_name) in US_MARKET_BRANDS and "US" not in out: - out.append("US") - return out - - -def _sw_body_html_measurements(body_html: str) -> tuple[float | None, ...]: - """Extract (height_cm, bust_cm, waist_cm, hip_cm, weight_kg, cup) from SW body_html.""" - text = normalize_space(BeautifulSoup(body_html, "html.parser").get_text(" ", strip=True)) - - def get(pattern: str) -> float | None: - m = re.search(pattern, text, re.IGNORECASE) - if not m: - return None - val = float(m.group(1)) - if m.lastindex >= 2 and m.group(2): - return float(m.group(2)) - return round(val * 2.54, 1) if val < 60 else val - - height = get(r"Height:\s*[\d.]+\s*(?:feet[^(]*)?\(?([\d.]+)\s*cm") or get(r"Height:\s*([\d.]+)\s*cm") - bust = get(r"Bust:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Bust:\s*([\d.]+)\s*(?:cm|inch)") - waist = get(r"Waist:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Waist:\s*([\d.]+)\s*(?:cm|inch)") - hips = get(r"Hips?:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Hips?:\s*([\d.]+)\s*(?:cm|inch)") - weight_m = re.search(r"Weight:\s*[\d.]+\s*lbs?\s*[\(/]?\s*([\d.]+)\s*kg", text, re.I) - weight = float(weight_m.group(1)) if weight_m else None - cup_m = re.search(r"\b([A-M])\s*[Cc]up\b", text) - cup = cup_m.group(1) if cup_m else None - return height, bust, waist, hips, weight, cup - - -def scrape_siliconwives(config: SiliconWivesConfig, session: requests.Session, families: list[dict]) -> list[dict]: - resp = session.get(config.url, headers=HEADERS, timeout=30) - resp.raise_for_status() - products = resp.json().get("products", []) - rows = [] - seen_codes: set[str] = set() - for prod in products: - body_html = prod.get("body_html", "") - height, bust, waist, hips, weight, cup = _sw_body_html_measurements(body_html) - if not (height and bust and waist and hips): - continue - if height < config.min_height_cm: - continue - title = prod.get("title", "") - handle = prod.get("handle", "") - body_code = extract_body_code(title, handle) or handle.upper() - if body_code in seen_codes: - continue - seen_codes.add(body_code) - price_raw = None - for v in prod.get("variants", []): - try: - price_raw = float(v["price"]) - break - except (KeyError, ValueError): - pass - whr = round(waist / hips, 3) - bwr = round(bust / waist, 3) - family, confidence, basis = nearest_family(whr, bwr, families) - source_url = f"https://www.siliconwives.com/products/{handle}" - rows.append({ - "brand": canonical_brand(config.brand), - "source_url": source_url, - "source_tier": "secondary", - "source_label": "SiliconWives US reseller (Shopify product JSON)", - "body_code": body_code, - "title": title, - "series": None, - "material": next( - (t for t in (prod.get("tags") or []) if t.lower() in ("silicone","tpe","s-tpe","hybrid")), - None, - ), - "height_cm": height, - "weight_kg": weight, - "bust_cm": bust, - "waist_cm": waist, - "hip_cm": hips, - "underbust_cm": None, - "cup": cup, - "price": price_raw, - "price_currency": "USD" if price_raw is not None else None, - "WHR": whr, - "BWR": bwr, - "assigned_family": family, - "family_confidence": confidence, - "family_basis": basis, - "notes": "Extracted from Shopify product body_html via SiliconWives", - }) - rows.sort(key=lambda r: (r["height_cm"], r["body_code"])) - return rows - - def build_summary(rows: list[dict], unavailable: list[dict], inventory_only: list[dict] | None = None) -> dict: brand_rows: dict[str, list[dict]] = {} for row in rows: @@ -1147,11 +996,11 @@ def write_sqlite(rows: list[dict], summary: dict) -> None: "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", [ ( - canonical_brand(brand_name), + brand_name, geo.get("country"), geo.get("hq_city"), geo.get("region"), - json.dumps(with_us_market_code(brand_name, geo.get("primary_markets", [])), ensure_ascii=False), + json.dumps(geo.get("primary_markets", []), ensure_ascii=False), geo.get("tier"), geo.get("tier_usd_floor"), geo.get("segment"), @@ -1319,8 +1168,6 @@ def main() -> None: rows.extend(scrape_supplier(supplier, session, families)) rows.extend(scrape_irontech(session, families)) rows.extend(scrape_tayu(session, families)) - for sw_config in SW_COLLECTIONS: - rows.extend(scrape_siliconwives(sw_config, session, families)) realdoll_inventory = capture_realdoll_inventory(session) unavailable = list(UNAVAILABLE_COMPETITORS) @@ -1344,7 +1191,6 @@ def main() -> None: *[supplier.url for supplier in SUPPLIERS], "https://www.tayu-doll.com/product-sitemap.xml", "https://www.realdoll.com/product-sitemap.xml", - *[sw.url for sw in SW_COLLECTIONS], ], "summary": summary, "rows": rows, From a5bb574994071a806c248c62280db653ad2ee99d Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:15:56 -0400 Subject: [PATCH 02/57] PDR-010: expand competitor coverage and add independent grouping heatmaps --- db/competitor_family_coverage.json | 6795 ++++++++++++++++- db/competitor_family_coverage.sqlite | Bin 131072 -> 270336 bytes db/independent_catalog_groupings.json | 427 +- .../competitor-family-coverage-matrix.csv | 262 + .../competitor-family-coverage-matrix.md | 64 +- .../independent-catalog-grouping-heatmap.md | 68 +- .../independent-catalog-grouping-matrix.csv | 2 +- scripts/analyze_independent_groupings.py | 63 +- scripts/build_competitor_catalog_taxonomy.py | 176 +- 9 files changed, 7303 insertions(+), 554 deletions(-) diff --git a/db/competitor_family_coverage.json b/db/competitor_family_coverage.json index de1bacc..78070c2 100644 --- a/db/competitor_family_coverage.json +++ b/db/competitor_family_coverage.json @@ -23,11 +23,17 @@ "https://us.dollstudio.org/supplier/gynoid", "https://us.dollstudio.org/supplier/zelex", "https://www.tayu-doll.com/product-sitemap.xml", - "https://www.realdoll.com/product-sitemap.xml" + "https://www.realdoll.com/product-sitemap.xml", + "https://www.siliconwives.com/collections/sanhui-doll-brand/products.json?limit=250", + "https://www.siliconwives.com/collections/shop-funwest-doll/products.json?limit=250", + "https://www.siliconwives.com/collections/shop-dime-doll/products.json?limit=250", + "https://www.siliconwives.com/collections/shop-lilydoll-brand/products.json?limit=250", + "https://www.siliconwives.com/collections/shop-md-doll-brand-sex-dolls/products.json?limit=250", + "https://www.siliconwives.com/collections/shop-lusandy-doll/products.json?limit=250" ], "summary": { - "row_count": 233, - "brand_count": 24, + "row_count": 495, + "brand_count": 30, "brands": [ { "brand": "6YE Premium", @@ -146,6 +152,85 @@ "exact": 1 } }, + { + "brand": "Dime Doll", + "total": 31, + "top_two_share_pct": 83.9, + "family_counts": { + "The Classic": 2, + "The Icon": 2, + "The Muse": 21, + "The Siren": 0, + "The Empress": 5, + "The Sculpt": 1 + }, + "materials": [ + "silicone" + ], + "height_min_cm": 165.0, + "height_max_cm": 172.0, + "pricing": { + "count": 31, + "coverage_pct": 100.0, + "median_usd": 1699.0, + "min_usd": 1399.0, + "max_usd": 1799.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 100.0, + "tpe_share_pct": 0.0, + "exact_plus_near_pct": 58.1, + "source_tier_mix": { + "secondary": 31 + } + }, + "confidence_mix": { + "near": 17, + "manual-review": 13, + "exact": 1 + } + }, + { + "brand": "FunWest", + "total": 106, + "top_two_share_pct": 73.6, + "family_counts": { + "The Classic": 0, + "The Icon": 40, + "The Muse": 38, + "The Siren": 10, + "The Empress": 1, + "The Sculpt": 17 + }, + "materials": [ + "TPE", + "silicone" + ], + "height_min_cm": 150.0, + "height_max_cm": 168.0, + "pricing": { + "count": 106, + "coverage_pct": 100.0, + "median_usd": 1599.0, + "min_usd": 1299.0, + "max_usd": 2499.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 46.2, + "tpe_share_pct": 53.8, + "exact_plus_near_pct": 78.3, + "source_tier_mix": { + "secondary": 106 + } + }, + "confidence_mix": { + "near": 72, + "exact": 11, + "manual-review": 23 + } + }, { "brand": "Game Lady", "total": 6, @@ -571,6 +656,121 @@ "near": 3 } }, + { + "brand": "Lilydoll", + "total": 14, + "top_two_share_pct": 78.6, + "family_counts": { + "The Classic": 6, + "The Icon": 1, + "The Muse": 0, + "The Siren": 0, + "The Empress": 5, + "The Sculpt": 2 + }, + "materials": [ + "hybrid" + ], + "height_min_cm": 157.0, + "height_max_cm": 168.0, + "pricing": { + "count": 14, + "coverage_pct": 100.0, + "median_usd": 1199.0, + "min_usd": 1199.0, + "max_usd": 1299.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 0.0, + "tpe_share_pct": 0.0, + "exact_plus_near_pct": 100.0, + "source_tier_mix": { + "secondary": 14 + } + }, + "confidence_mix": { + "near": 9, + "exact": 5 + } + }, + { + "brand": "Lusandy Doll", + "total": 35, + "top_two_share_pct": 85.7, + "family_counts": { + "The Classic": 0, + "The Icon": 10, + "The Muse": 20, + "The Siren": 0, + "The Empress": 0, + "The Sculpt": 5 + }, + "materials": [ + "hybrid", + "silicone" + ], + "height_min_cm": 159.0, + "height_max_cm": 170.0, + "pricing": { + "count": 35, + "coverage_pct": 100.0, + "median_usd": 2699.0, + "min_usd": 2599.0, + "max_usd": 2699.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 82.9, + "tpe_share_pct": 0.0, + "exact_plus_near_pct": 100.0, + "source_tier_mix": { + "secondary": 35 + } + }, + "confidence_mix": { + "near": 35 + } + }, + { + "brand": "MD Doll", + "total": 69, + "top_two_share_pct": 72.5, + "family_counts": { + "The Classic": 1, + "The Icon": 7, + "The Muse": 9, + "The Siren": 2, + "The Empress": 13, + "The Sculpt": 37 + }, + "materials": [ + "silicone" + ], + "height_min_cm": 150.0, + "height_max_cm": 168.0, + "pricing": { + "count": 69, + "coverage_pct": 100.0, + "median_usd": 2599.0, + "min_usd": 1674.0, + "max_usd": 2599.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 33.3, + "tpe_share_pct": 0.0, + "exact_plus_near_pct": 72.5, + "source_tier_mix": { + "secondary": 69 + } + }, + "confidence_mix": { + "exact": 40, + "manual-review": 19, + "near": 10 + } + }, { "brand": "Piper Doll", "total": 10, @@ -728,6 +928,45 @@ "near": 4 } }, + { + "brand": "Sanhui", + "total": 7, + "top_two_share_pct": 57.1, + "family_counts": { + "The Classic": 1, + "The Icon": 3, + "The Muse": 1, + "The Siren": 1, + "The Empress": 0, + "The Sculpt": 1 + }, + "materials": [ + "silicone" + ], + "height_min_cm": 163.0, + "height_max_cm": 168.0, + "pricing": { + "count": 7, + "coverage_pct": 100.0, + "median_usd": 2599.0, + "min_usd": 2499.0, + "max_usd": 3199.0 + }, + "quality_signals": { + "measurement_completeness_pct": 100.0, + "silicone_share_pct": 100.0, + "tpe_share_pct": 0.0, + "exact_plus_near_pct": 85.7, + "source_tier_mix": { + "secondary": 7 + } + }, + "confidence_mix": { + "near": 2, + "manual-review": 1, + "exact": 4 + } + }, { "brand": "Tayu", "total": 21, @@ -6927,6 +7166,6556 @@ "family_confidence": "manual-review", "family_basis": "Nearest family center outside both range bands", "notes": "Deduplicated by body descriptor from Tayu product sitemap" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/pippa-japanese-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PIPPA JAPANESE SEX DOLL", + "title": "Pippa: Asian Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 163.0, + "weight_kg": 31.0, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 76.2, + "underbust_cm": null, + "cup": null, + "price": 3199.0, + "price_currency": "USD", + "WHR": 0.734, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/ruby-165cm-silicone-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "RUBY 165CM SILICONE SEX DOLL", + "title": "Ruby: Huge Tits Silicone Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 40.0, + "bust_cm": 111.8, + "waist_cm": 53.3, + "hip_cm": 86.4, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.617, + "BWR": 2.098, + "assigned_family": "The Siren", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/samantha-165cm-silicone-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SAMANTHA 165CM SILICONE SEX DOLL", + "title": "Samantha: Brunette Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 33.0, + "bust_cm": 78.7, + "waist_cm": 53.3, + "hip_cm": 76.2, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.699, + "BWR": 1.477, + "assigned_family": "The Classic", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/tall-blonde-japanese-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TALL BLONDE JAPANESE SEX DOLL", + "title": "Ahri: Tall Blonde Japanese Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 25.0, + "bust_cm": 81.3, + "waist_cm": 53.3, + "hip_cm": 76.2, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.699, + "BWR": 1.525, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/cat-cosplay-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CAT COSPLAY SEX DOLL", + "title": "Cat: Cosplay Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 32.0, + "bust_cm": 83.8, + "waist_cm": 53.3, + "hip_cm": 86.4, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.617, + "BWR": 1.572, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/goldie-silicone-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GOLDIE SILICONE SEX DOLL", + "title": "Goldie: Silicone Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 32.0, + "bust_cm": 83.8, + "waist_cm": 53.3, + "hip_cm": 86.4, + "underbust_cm": null, + "cup": null, + "price": 2999.0, + "price_currency": "USD", + "WHR": 0.617, + "BWR": 1.572, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Sanhui", + "source_url": "https://www.siliconwives.com/products/jade-korean-silicone-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JADE KOREAN SILICONE SEX DOLL", + "title": "Jade: Korean Silicone Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 32.0, + "bust_cm": 83.8, + "waist_cm": 53.3, + "hip_cm": 86.4, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.617, + "BWR": 1.572, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/princesa-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PRINCESA READY TO SHIP", + "title": "Princesa: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 150.0, + "weight_kg": 28.0, + "bust_cm": 80.0, + "waist_cm": 48.0, + "hip_cm": 74.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.641, + "BWR": 1.667, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/princesa-sexy-nightclub-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PRINCESA SEXY NIGHTCLUB SEX DOLL", + "title": "Princesa: Sexy Nightclub Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 150.0, + "weight_kg": 28.0, + "bust_cm": 80.0, + "waist_cm": 48.0, + "hip_cm": 74.9, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.641, + "BWR": 1.667, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/iris-cover-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "IRIS COVER GIRL SEX DOLL", + "title": "Iris: Cover Girl Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 47.8, + "hip_cm": 75.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.63, + "BWR": 1.504, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/iris-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "IRIS READY TO SHIP", + "title": "Iris: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 47.8, + "hip_cm": 75.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.63, + "BWR": 1.504, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/luana-cute-teacher-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUANA CUTE TEACHER SEX DOLL", + "title": "Luana: Cute Teacher Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 47.8, + "hip_cm": 75.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.63, + "BWR": 1.504, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/luana-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUANA READY TO SHIP", + "title": "Luana: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 47.8, + "hip_cm": 75.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.63, + "BWR": 1.504, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/nika-japanese-beach-club-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIKA JAPANESE BEACH CLUB SEX DOLL", + "title": "Nika: Japanese Beach Club Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.1, + "waist_cm": 48.0, + "hip_cm": 77.0, + "underbust_cm": null, + "cup": null, + "price": 2049.0, + "price_currency": "USD", + "WHR": 0.623, + "BWR": 1.481, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/nika-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIKA READY TO SHIP", + "title": "Nika: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.1, + "waist_cm": 48.0, + "hip_cm": 77.0, + "underbust_cm": null, + "cup": null, + "price": 1949.0, + "price_currency": "USD", + "WHR": 0.623, + "BWR": 1.481, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/peppa-japanese-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PEPPA JAPANESE TEEN SEX DOLL", + "title": "Peppa: Japanese Teen Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 152.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 47.8, + "hip_cm": 75.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.63, + "BWR": 1.504, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/bella-hot-christmas-eve-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BELLA HOT CHRISTMAS EVE SEX DOLL", + "title": "Bella: Hot Christmas Eve Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/bella-ready-to-ship-1", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BELLA READY TO SHIP 1", + "title": "Bella: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/darlene-baseball-cheerleader-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DARLENE BASEBALL CHEERLEADER SEX DOLL", + "title": "Darlene: Baseball Cheerleader Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/darlene-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DARLENE READY TO SHIP", + "title": "Darlene: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/luz-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUZ READY TO SHIP", + "title": "Luz: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/luz-reindeer-stripper-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUZ REINDEER STRIPPER SEX DOLL", + "title": "Luz: Reindeer Stripper Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/quince-after-school-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "QUINCE AFTER SCHOOL SEX DOLL", + "title": "Quince: After School Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/quince-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "QUINCE READY TO SHIP", + "title": "Quince: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/winslow-freaky-fantasy-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "WINSLOW FREAKY FANTASY SEX DOLL", + "title": "Winslow: Freaky Fantasy Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/winslow-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "WINSLOW READY TO SHIP", + "title": "Winslow: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 155.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 87.4, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.596, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/skye-tropical-paradise-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SKYE TROPICAL PARADISE SEX DOLL", + "title": "Skye: Tropical Paradise Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 156.0, + "weight_kg": 29.0, + "bust_cm": 79.0, + "waist_cm": 52.8, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.562, + "BWR": 1.496, + "assigned_family": "The Icon", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/alice-cute-maid-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ALICE CUTE MAID SEX DOLL", + "title": "Alice: Cute Maid Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/amy-winter-lover-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "AMY WINTER LOVER SEX DOLL", + "title": "Amy: Winter Lover Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/andy-island-fling-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANDY ISLAND FLING SEX DOLL", + "title": "Andy: Island Fling Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/aris-cyber-stripper-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ARIS CYBER STRIPPER SEX DOLL", + "title": "Aris: Cyber Stripper Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/aris-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ARIS READY TO SHIP", + "title": "Aris: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/assos-music-festival-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ASSOS MUSIC FESTIVAL SEX DOLL", + "title": "Assos: Music Festival Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/bella-sun-goddess-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BELLA SUN GODDESS SEX DOLL", + "title": "Bella: Sun Goddess Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/brie-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BRIE READY TO SHIP", + "title": "Brie: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 81.0, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.525, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/brie-seductive-lounge-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BRIE SEDUCTIVE LOUNGE SEX DOLL", + "title": "Brie: Smoking Lounge Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 81.0, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.525, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/contessa-hot-co-worker-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CONTESSA HOT CO WORKER SEX DOLL", + "title": "Contessa: Hot Co-worker Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 81.0, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.525, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/eloise-blone-idol-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ELOISE BLONE IDOL SEX DOLL", + "title": "Eloise: Blone Idol Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lily-pink-bunny-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LILY PINK BUNNY SEX DOLL", + "title": "Lily: Pink Bunny Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lucy-military-combat-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUCY MILITARY COMBAT SEX DOLL", + "title": "Lucy: Military Combat Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyla-clubbing-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYLA CLUBBING TEEN SEX DOLL", + "title": "Lyla: Clubbing Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyla-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYLA READY TO SHIP", + "title": "Lyla: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyra-christmas-present-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYRA CHRISTMAS PRESENT SEX DOLL", + "title": "Lyra: Christmas Present Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyra-nightclub-singer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYRA NIGHTCLUB SINGER SEX DOLL", + "title": "Lyra: Nightclub Singer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/meta-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "META READY TO SHIP", + "title": "Meta: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/meta-rebellious-sci-fi-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "META REBELLIOUS SCI FI SEX DOLL", + "title": "Meta: Rebellious Sci-fi Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/rosey-little-red-dress-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ROSEY LITTLE RED DRESS SEX DOLL", + "title": "Rosey: Little Red Dress Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/rosey-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ROSEY READY TO SHIP", + "title": "Rosey: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 33.0, + "bust_cm": 80.8, + "waist_cm": 52.8, + "hip_cm": 96.8, + "underbust_cm": null, + "cup": null, + "price": 2399.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.53, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sloane-drill-sergeant-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SLOANE DRILL SERGEANT SEX DOLL", + "title": "Sloane: Drill Sergeant Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sloane-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SLOANE READY TO SHIP", + "title": "Sloane: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/tetty-punk-rock-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TETTY PUNK ROCK SEX DOLL", + "title": "Tetty: Punk Rock Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 32.0, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 83.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.622, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/westerly-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "WESTERLY READY TO SHIP", + "title": "Westerly: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/westerly-young-maiden-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "WESTERLY YOUNG MAIDEN SEX DOLL", + "title": "Westerly: Young Maiden Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 157.0, + "weight_kg": 40.0, + "bust_cm": 74.9, + "waist_cm": 53.1, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.547, + "BWR": 1.411, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/zenni-bosss-daughter-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZENNI BOSSS DAUGHTER SEX DOLL", + "title": "Zenni: Boss's Daughter Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 157.0, + "weight_kg": 32.0, + "bust_cm": 80.0, + "waist_cm": 52.1, + "hip_cm": 83.8, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.622, + "BWR": 1.536, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/aerie-fantasy-school-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "AERIE FANTASY SCHOOL GIRL SEX DOLL", + "title": "Aerie: Fantasy School Girl Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/anakin-cute-egirl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANAKIN CUTE EGIRL SEX DOLL", + "title": "Anakin: Cute eGirl Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/anakin-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANAKIN READY TO SHIP", + "title": "Anakin: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/carol-christmas-eve-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CAROL CHRISTMAS EVE SEX DOLL", + "title": "Carol: Christmas Eve Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/carol-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CAROL READY TO SHIP", + "title": "Carol: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/clarina-tropical-honeymoon-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CLARINA TROPICAL HONEYMOON SEX DOLL", + "title": "Clarina: Tropical Honeymoon Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/erin-date-night-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ERIN DATE NIGHT SEX DOLL", + "title": "Erin: Date Night Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/esme-double-agent-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ESME DOUBLE AGENT SEX DOLL", + "title": "Esme: Double Agent Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/eudora-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EUDORA READY TO SHIP", + "title": "Eudora: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/eudora-sassy-brat-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EUDORA SASSY BRAT SEX DOLL", + "title": "Eudora: Sassy Brat Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/giselle-cute-blonde-maid-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GISELLE CUTE BLONDE MAID SEX DOLL", + "title": "Giselle: Cute Blonde Maid Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/giselle-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GISELLE READY TO SHIP", + "title": "Giselle: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/iridessa-blackjack-dealer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "IRIDESSA BLACKJACK DEALER SEX DOLL", + "title": "Iridessa: Blackjack Dealer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/iridessa-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "IRIDESSA READY TO SHIP", + "title": "Iridessa: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/jinxy-anime-gunslinger-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JINXY ANIME GUNSLINGER SEX DOLL", + "title": "Jinxy: Anime Gunslinger Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/jinxy-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JINXY READY TO SHIP", + "title": "Jinxy: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lacy-art-student-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LACY ART STUDENT SEX DOLL", + "title": "Lacy: Art Student Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyra-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYRA READY TO SHIP", + "title": "Lyra: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyra-romantic-chateau-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYRA ROMANTIC CHATEAU SEX DOLL", + "title": "Lyra: Romantic Chateau Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lyra-sexy-casino-dealer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LYRA SEXY CASINO DEALER SEX DOLL", + "title": "Lyra: Sexy Casino Dealer Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/minara-date-night-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MINARA DATE NIGHT SEX DOLL", + "title": "Minara: Date Night Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/minara-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MINARA READY TO SHIP", + "title": "Minara: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/nidalee-jungle-babe-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIDALEE JUNGLE BABE SEX DOLL", + "title": "Nidalee: Jungle Babe Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/nidalee-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIDALEE READY TO SHIP", + "title": "Nidalee: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/niko-petite-teen-asian-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIKO PETITE TEEN ASIAN SEX DOLL", + "title": "Niko: Petite Teen Asian Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 37.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/niko-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIKO READY TO SHIP", + "title": "Niko: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 37.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sophiemina-college-girlfriend-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SOPHIEMINA COLLEGE GIRLFRIEND SEX DOLL", + "title": "Sophiemina: College Girlfriend Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sophiemina-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SOPHIEMINA READY TO SHIP", + "title": "Sophiemina: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/stormy-supernatural-powers-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "STORMY SUPERNATURAL POWERS SEX DOLL", + "title": "Stormy: Supernatural Powers Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 30.0, + "bust_cm": 71.9, + "waist_cm": 53.8, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.336, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/zinna-pink-ninja-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZINNA PINK NINJA SEX DOLL", + "title": "Zinna: Pink Ninja Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/zinna-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZINNA READY TO SHIP", + "title": "Zinna: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 159.0, + "weight_kg": 44.0, + "bust_cm": 71.9, + "waist_cm": 58.7, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.225, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/cherie-pure-blonde-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CHERIE PURE BLONDE SEX DOLL", + "title": "Cherie: Pure Blonde Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/jasmin-extreme-sports-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JASMIN EXTREME SPORTS SEX DOLL", + "title": "Jasmin: Extreme Sports Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/jasmin-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JASMIN READY TO SHIP", + "title": "Jasmin: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 1874.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/jeany-prom-night-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JEANY PROM NIGHT SEX DOLL", + "title": "Jeany: Prom Night Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/juliette-casino-waitress-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JULIETTE CASINO WAITRESS SEX DOLL", + "title": "Juliette: Casino Waitress Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/morticia-spooky-nurse-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MORTICIA SPOOKY NURSE SEX DOLL", + "title": "Morticia: Spooky Nurse Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/natalie-russian-wife-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NATALIE RUSSIAN WIFE SEX DOLL", + "title": "Natalie: Russian Wife Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/tripoli-ethereal-sorceress-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TRIPOLI ETHEREAL SORCERESS SEX DOLL", + "title": "Tripoli: Ethereal Sorceress Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 32.0, + "bust_cm": 81.8, + "waist_cm": 49.3, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2149.0, + "price_currency": "USD", + "WHR": 0.548, + "BWR": 1.659, + "assigned_family": "The Siren", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/assos-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ASSOS READY TO SHIP", + "title": "Assos: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/assos-sexy-blonde-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ASSOS SEXY BLONDE TEEN SEX DOLL", + "title": "Assos: Sexy Blonde Teen Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/harlow-honeymoon-suite-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "HARLOW HONEYMOON SUITE SEX DOLL", + "title": "Harlow: Honeymoon Suite Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/samara-occult-witch-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SAMARA OCCULT WITCH SEX DOLL", + "title": "Samara: Occult Witch Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/samara-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SAMARA READY TO SHIP", + "title": "Samara: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/talvi-badass-blonde-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TALVI BADASS BLONDE SEX DOLL", + "title": "Talvi: Badass Blonde Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/talvi-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TALVI READY TO SHIP", + "title": "Talvi: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 162.0, + "weight_kg": 44.5, + "bust_cm": 80.0, + "waist_cm": 55.1, + "hip_cm": 85.1, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.647, + "BWR": 1.452, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/dayna-curvy-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DAYNA CURVY TEEN SEX DOLL", + "title": "Dayna: Curvy Teen Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 163.0, + "weight_kg": 47.0, + "bust_cm": 91.9, + "waist_cm": 59.9, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1649.0, + "price_currency": "USD", + "WHR": 0.618, + "BWR": 1.534, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/eira-sexy-ski-weekend-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EIRA SEXY SKI WEEKEND SEX DOLL", + "title": "Eira: Sexy Ski Weekend Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 163.0, + "weight_kg": 47.0, + "bust_cm": 91.9, + "waist_cm": 59.9, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1649.0, + "price_currency": "USD", + "WHR": 0.618, + "BWR": 1.534, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lena-after-prom-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LENA AFTER PROM SEX DOLL", + "title": "Lena: After Prom Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 163.0, + "weight_kg": 47.0, + "bust_cm": 91.9, + "waist_cm": 59.9, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1649.0, + "price_currency": "USD", + "WHR": 0.618, + "BWR": 1.534, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lexie-hot-half-asian-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LEXIE HOT HALF ASIAN SEX DOLL", + "title": "Lexie: Hot Half-Asian Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 165.0, + "weight_kg": 47.0, + "bust_cm": 75.9, + "waist_cm": 56.9, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.633, + "BWR": 1.334, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/lexie-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LEXIE READY TO SHIP", + "title": "Lexie: Ready To Ship", + "series": null, + "material": "TPE", + "height_cm": 165.0, + "weight_kg": 47.0, + "bust_cm": 75.9, + "waist_cm": 56.9, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.633, + "BWR": 1.334, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sheila-cute-intern-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SHEILA CUTE INTERN SEX DOLL", + "title": "Sheila: Cute Intern Sex Doll", + "series": null, + "material": "TPE", + "height_cm": 165.0, + "weight_kg": 47.0, + "bust_cm": 75.9, + "waist_cm": 56.9, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 1599.0, + "price_currency": "USD", + "WHR": 0.633, + "BWR": 1.334, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/estelle-super-model-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ESTELLE SUPER MODEL SEX DOLL", + "title": "Estelle: Super Model Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 166.0, + "weight_kg": 33.0, + "bust_cm": 86.4, + "waist_cm": 53.8, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2167.0, + "price_currency": "USD", + "WHR": 0.598, + "BWR": 1.606, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/alexi-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ALEXI READY TO SHIP", + "title": "Alexi: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2199.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/alexi-steampunk-cosplay-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ALEXI STEAMPUNK COSPLAY SEX DOLL", + "title": "Alexi: Steampunk Cosplay Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/elio-bottle-service-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ELIO BOTTLE SERVICE SEX DOLL", + "title": "Elio: Bottle Service Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/skyler-hot-assassin-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SKYLER HOT ASSASSIN SEX DOLL", + "title": "Skyler: Hot Assassin Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/sophiemina-innocent-secretary-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SOPHIEMINA INNOCENT SECRETARY SEX DOLL", + "title": "Sophiemina: Innocent Secretary Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "FunWest", + "source_url": "https://www.siliconwives.com/products/vesper-hot-sex-dungeon-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "VESPER HOT SEX DUNGEON SEX DOLL", + "title": "Vesper: Hot Sex Dungeon Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 42.0, + "bust_cm": 89.9, + "waist_cm": 62.0, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.639, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/cervine-70s-babe-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CERVINE 70S BABE SEX DOLL", + "title": "Cervine: 70s Babe Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 32.0, + "bust_cm": 78.7, + "waist_cm": 55.9, + "hip_cm": 83.1, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.673, + "BWR": 1.408, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/enid-fortune-teller-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ENID FORTUNE TELLER SEX DOLL", + "title": "Enid: Fortune Teller Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 34.0, + "bust_cm": 83.8, + "waist_cm": 52.3, + "hip_cm": 96.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.602, + "assigned_family": "The Empress", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/erika-busty-butterfly-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ERIKA BUSTY BUTTERFLY SEX DOLL", + "title": "Erika: Busty Butterfly Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 34.0, + "bust_cm": 83.8, + "waist_cm": 52.3, + "hip_cm": 96.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.602, + "assigned_family": "The Empress", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/judy-european-royalty-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JUDY EUROPEAN ROYALTY SEX DOLL", + "title": "Judy: European Royalty Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 34.0, + "bust_cm": 83.8, + "waist_cm": 52.3, + "hip_cm": 96.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.602, + "assigned_family": "The Empress", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/lizabeth-exotic-dancer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LIZABETH EXOTIC DANCER SEX DOLL", + "title": "Lizabeth: Exotic Dancer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 34.0, + "bust_cm": 83.8, + "waist_cm": 52.3, + "hip_cm": 96.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.602, + "assigned_family": "The Empress", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/remi-after-school-sex-doll-copy", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "REMI AFTER SCHOOL SEX DOLL COPY", + "title": "Remi: After School Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 34.0, + "bust_cm": 83.8, + "waist_cm": 52.3, + "hip_cm": 96.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.545, + "BWR": 1.602, + "assigned_family": "The Empress", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/cora-fancy-gala-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CORA FANCY GALA SEX DOLL", + "title": "Cora: Fancy Gala Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/giusta-jazz-singer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GIUSTA JAZZ SINGER SEX DOLL", + "title": "Giusta: Jazz Singer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/hailey-teen-nextdoor-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "HAILEY TEEN NEXTDOOR SEX DOLL", + "title": "Hailey: Teen Nextdoor Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/jack-perky-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JACK PERKY TEEN SEX DOLL", + "title": "Jack: Perky Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/sienna-angelic-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SIENNA ANGELIC TEEN SEX DOLL", + "title": "Sienna: Angelic Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/skylar-milf-nextdoor-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SKYLAR MILF NEXTDOOR SEX DOLL", + "title": "Skylar: MILF Nextdoor Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/sofia-spring-break-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SOFIA SPRING BREAK SEX DOLL", + "title": "Sofia: Spring Break Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/alani-pink-lady-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ALANI PINK LADY SEX DOLL", + "title": "Alani: Pink Lady Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/alina-buxom-brunette-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ALINA BUXOM BRUNETTE SEX DOLL", + "title": "Alina: Buxom Brunette Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/dita-curvy-red-head-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DITA CURVY RED HEAD SEX DOLL", + "title": "Dita: Curvy Red Head Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/elvira-club-dancer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ELVIRA CLUB DANCER SEX DOLL", + "title": "Elvira: Club Dancer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/jasmina-piercing-gaze-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JASMINA PIERCING GAZE SEX DOLL", + "title": "Jasmina: Piercing Gaze Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/mazena-blonde-lingerie-model-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAZENA BLONDE LINGERIE MODEL SEX DOLL", + "title": "Mazena: Blonde Lingerie Model Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/perla-porn-audition-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PERLA PORN AUDITION SEX DOLL", + "title": "Perla: Porn Audition Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 169.0, + "weight_kg": 50.0, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/claire-sexy-pigtails-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CLAIRE SEXY PIGTAILS SEX DOLL", + "title": "Claire: Sexy Pigtails Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 31.75, + "bust_cm": 76.2, + "waist_cm": 55.9, + "hip_cm": 88.9, + "underbust_cm": null, + "cup": null, + "price": 1499.0, + "price_currency": "USD", + "WHR": 0.629, + "BWR": 1.363, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/cordelia-country-cutie-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CORDELIA COUNTRY CUTIE SEX DOLL", + "title": "Cordelia: Country Cutie Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/isladora-naughty-brat-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ISLADORA NAUGHTY BRAT SEX DOLL", + "title": "Isladora: Naughty Brat Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/josy-hip-hop-dancer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOSY HIP HOP DANCER SEX DOLL", + "title": "Josy: Hip Hop Dancer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/laura-croft-sexy-raider-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LAURA CROFT SEXY RAIDER SEX DOLL", + "title": "Laura Croft: Sexy Raider Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/paige-blonde-bridesmaid-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PAIGE BLONDE BRIDESMAID SEX DOLL", + "title": "Paige: Blonde Bridesmaid Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/teo-purple-bunny-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TEO PURPLE BUNNY SEX DOLL", + "title": "Teo: Purple Bunny Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 30.8, + "bust_cm": 89.9, + "waist_cm": 69.8, + "hip_cm": 97.0, + "underbust_cm": null, + "cup": null, + "price": 1799.0, + "price_currency": "USD", + "WHR": 0.72, + "BWR": 1.288, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/eleanor-naughty-housekeeper-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ELEANOR NAUGHTY HOUSEKEEPER SEX DOLL", + "title": "Eleanor: Naughty Housekeeper Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 171.0, + "weight_kg": 39.0, + "bust_cm": 87.9, + "waist_cm": 58.4, + "hip_cm": 98.3, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.594, + "BWR": 1.505, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/camilia-pretty-mouth-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CAMILIA PRETTY MOUTH SEX DOLL", + "title": "Camilia: Pretty Mouth Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 172.0, + "weight_kg": 46.0, + "bust_cm": 94.5, + "waist_cm": 66.0, + "hip_cm": 105.9, + "underbust_cm": null, + "cup": null, + "price": 1699.0, + "price_currency": "USD", + "WHR": 0.623, + "BWR": 1.432, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/katherine-golden-goddess-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KATHERINE GOLDEN GODDESS SEX DOLL", + "title": "Katherine: Golden Goddess Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 172.0, + "weight_kg": 29.75, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 86.4, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.615, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Dime Doll", + "source_url": "https://www.siliconwives.com/products/nara-tanned-babe-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NARA TANNED BABE SEX DOLL", + "title": "Nara: Tanned Babe Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 172.0, + "weight_kg": 27.8, + "bust_cm": 77.2, + "waist_cm": 50.8, + "hip_cm": 78.7, + "underbust_cm": null, + "cup": null, + "price": 1399.0, + "price_currency": "USD", + "WHR": 0.645, + "BWR": 1.52, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/buttercup-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BUTTERCUP READY TO SHIP", + "title": "Buttercup: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 157.0, + "weight_kg": 54.0, + "bust_cm": 93.0, + "waist_cm": 62.0, + "hip_cm": 105.9, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.585, + "BWR": 1.5, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/aria-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ARIA READY TO SHIP", + "title": "Aria: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 158.0, + "weight_kg": 34.0, + "bust_cm": 78.0, + "waist_cm": 50.0, + "hip_cm": 85.6, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.56, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/ember-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EMBER READY TO SHIP", + "title": "Ember: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 158.0, + "weight_kg": 34.0, + "bust_cm": 78.0, + "waist_cm": 50.0, + "hip_cm": 85.6, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.56, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/fig-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "FIG READY TO SHIP", + "title": "Fig: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 158.0, + "weight_kg": 34.0, + "bust_cm": 78.0, + "waist_cm": 50.0, + "hip_cm": 85.6, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.56, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/honey-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "HONEY READY TO SHIP", + "title": "Honey: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 158.0, + "weight_kg": 34.0, + "bust_cm": 78.0, + "waist_cm": 50.0, + "hip_cm": 85.6, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.56, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/maple-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAPLE READY TO SHIP", + "title": "Maple: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 158.0, + "weight_kg": 34.0, + "bust_cm": 78.0, + "waist_cm": 50.0, + "hip_cm": 85.6, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.56, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/adette-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ADETTE READY TO SHIP", + "title": "Adette: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 166.0, + "weight_kg": 34.0, + "bust_cm": 73.7, + "waist_cm": 50.3, + "hip_cm": 81.3, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.465, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/rue-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "RUE READY TO SHIP", + "title": "Rue: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 166.0, + "weight_kg": 34.0, + "bust_cm": 73.7, + "waist_cm": 50.3, + "hip_cm": 81.3, + "underbust_cm": null, + "cup": null, + "price": 1199.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.465, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/anelis-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANELIS READY TO SHIP", + "title": "Anelis: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/elara-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ELARA READY TO SHIP", + "title": "Elara: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/jadey-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JADEY READY TO SHIP", + "title": "Jadey: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/seline-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SELINE READY TO SHIP", + "title": "Seline: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/torin-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TORIN READY TO SHIP", + "title": "Torin: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lilydoll", + "source_url": "https://www.siliconwives.com/products/vanta-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "VANTA READY TO SHIP", + "title": "Vanta: Ready To Ship", + "series": null, + "material": "hybrid", + "height_cm": 168.0, + "weight_kg": 41.0, + "bust_cm": 86.9, + "waist_cm": 61.0, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 1299.0, + "price_currency": "USD", + "WHR": 0.671, + "BWR": 1.425, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/ameli-pink-pixie-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "AMELI PINK PIXIE SEX DOLL", + "title": "Ameli: Pink Pixie Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/angela-nature-photographer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANGELA NATURE PHOTOGRAPHER SEX DOLL", + "title": "Angela: Nature Photographer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/celina-fine-art-student-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CELINA FINE ART STUDENT SEX DOLL", + "title": "Celina: Fine Art Student Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/gigi-cute-tea-party-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GIGI CUTE TEA PARTY SEX DOLL", + "title": "Gigi: Cute Tea Party Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/gigi-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GIGI READY TO SHIP", + "title": "Gigi: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/jacqueline-punk-rocker-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JACQUELINE PUNK ROCKER SEX DOLL", + "title": "Jacqueline: Punk Rocker Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/letitia-bad-student-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LETITIA BAD STUDENT SEX DOLL", + "title": "Letitia: Bad Student Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/mabel-fun-cosplay-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MABEL FUN COSPLAY SEX DOLL", + "title": "Mabel: Fun Cosplay Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/phoebe-cute-japanese-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PHOEBE CUTE JAPANESE SEX DOLL", + "title": "Phoebe: Cute Japanese Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/poppy-bed-time-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "POPPY BED TIME SEX DOLL", + "title": "Poppy: Bed Time Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/sophia-forest-elf-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SOPHIA FOREST ELF SEX DOLL", + "title": "Sophia: Forest Elf Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/susan-cute-shy-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SUSAN CUTE SHY SEX DOLL", + "title": "Susan: Cute Shy Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 26.0, + "bust_cm": 71.4, + "waist_cm": 56.4, + "hip_cm": 79.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.714, + "BWR": 1.266, + "assigned_family": "The Muse", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/theresa-fun-asian-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "THERESA FUN ASIAN TEEN SEX DOLL", + "title": "Theresa: Fun Asian Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/tina-chinese-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "TINA CHINESE TEEN SEX DOLL", + "title": "Tina: Chinese Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 150.0, + "weight_kg": 27.0, + "bust_cm": 77.0, + "waist_cm": 53.1, + "hip_cm": 81.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.656, + "BWR": 1.45, + "assigned_family": "The Sculpt", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/camila-pink-princess-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CAMILA PINK PRINCESS SEX DOLL", + "title": "Camila: Pink Princess Sex Doll", + "series": null, + "material": null, + "height_cm": 151.0, + "weight_kg": 25.0, + "bust_cm": 78.0, + "waist_cm": 48.0, + "hip_cm": 77.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.623, + "BWR": 1.625, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/lanthe-rock-n-roll-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LANTHE ROCK N ROLL SEX DOLL", + "title": "Lanthe: Rock n Roll Sex Doll", + "series": null, + "material": null, + "height_cm": 159.0, + "weight_kg": 27.0, + "bust_cm": 71.1, + "waist_cm": 50.0, + "hip_cm": 79.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.633, + "BWR": 1.422, + "assigned_family": "The Classic", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/fanny-busty-red-head-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "FANNY BUSTY RED HEAD SEX DOLL", + "title": "Fanny: Busty Red Head Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 160.0, + "weight_kg": 28.0, + "bust_cm": 80.0, + "waist_cm": 56.9, + "hip_cm": 87.1, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.653, + "BWR": 1.406, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/aaliyah-curvy-black-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "AALIYAH CURVY BLACK GIRL SEX DOLL", + "title": "Aaliyah: Curvy Black Girl Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/belinda-full-figured-blonde-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BELINDA FULL FIGURED BLONDE SEX DOLL", + "title": "Belinda: Full-Figured Blonde Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/belinda-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BELINDA READY TO SHIP", + "title": "Belinda: Ready To Ship", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/jezebel-voluptuous-blonde-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JEZEBEL VOLUPTUOUS BLONDE SEX DOLL", + "title": "Jezebel: Voluptuous Blonde Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/joelle-atlanta-stripper-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOELLE ATLANTA STRIPPER SEX DOLL", + "title": "Joelle: Atlanta Stripper Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/nia-plump-tan-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIA PLUMP TAN SEX DOLL", + "title": "Nia: Plump Secretary Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/nia-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIA READY TO SHIP", + "title": "Nia: Ready To Ship", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/norma-curvy-blonde-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NORMA CURVY BLONDE SEX DOLL", + "title": "Norma: Curvy Blonde Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/norma-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NORMA READY TO SHIP", + "title": "Norma: Ready To Ship", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/olive-sexy-bridesmaid-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "OLIVE SEXY BRIDESMAID SEX DOLL", + "title": "Olive: Busty Bridesmaid Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/zuri-curvy-rich-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZURI CURVY RICH GIRL SEX DOLL", + "title": "Zuri: Curvy Rich Girl Sex Doll", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/zuri-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZURI READY TO SHIP", + "title": "Zuri: Ready To Ship", + "series": null, + "material": null, + "height_cm": 162.0, + "weight_kg": 40.5, + "bust_cm": 94.5, + "waist_cm": 59.9, + "hip_cm": 102.6, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.584, + "BWR": 1.578, + "assigned_family": "The Empress", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/cindy-sexy-professor-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "CINDY SEXY PROFESSOR SEX DOLL", + "title": "Cindy: Sexy Professor Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 163.0, + "weight_kg": 37.0, + "bust_cm": 83.1, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.487, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/vicky-beach-babe-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "VICKY BEACH BABE SEX DOLL", + "title": "Vicky: Beach Babe Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 163.0, + "weight_kg": 37.0, + "bust_cm": 83.1, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.487, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/coco-fashion-intern-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "COCO FASHION INTERN SEX DOLL", + "title": "Coco: Fashion Intern Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 164.0, + "weight_kg": 38.0, + "bust_cm": 86.6, + "waist_cm": 51.6, + "hip_cm": 87.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.587, + "BWR": 1.678, + "assigned_family": "The Siren", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/linda-bubble-party-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LINDA BUBBLE PARTY SEX DOLL", + "title": "Linda: Bubble Party Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 164.0, + "weight_kg": 45.0, + "bust_cm": 86.6, + "waist_cm": 55.9, + "hip_cm": 89.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.622, + "BWR": 1.549, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/lolly-busty-cute-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LOLLY BUSTY CUTE TEEN SEX DOLL", + "title": "Lolly: Busty Cute Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 164.0, + "weight_kg": 38.0, + "bust_cm": 86.6, + "waist_cm": 51.6, + "hip_cm": 87.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.587, + "BWR": 1.678, + "assigned_family": "The Siren", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/andrea-sporty-fit-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANDREA SPORTY FIT SEX DOLL", + "title": "Andrea: Sporty Fit Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/ann-hot-yoga-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANN HOT YOGA SEX DOLL", + "title": "Ann: Hot Yoga Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 63.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.676, + "BWR": 1.332, + "assigned_family": "The Muse", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/ann-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANN READY TO SHIP", + "title": "Ann: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 63.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.676, + "BWR": 1.332, + "assigned_family": "The Muse", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/bonnie-photography-club-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BONNIE PHOTOGRAPHY CLUB SEX DOLL", + "title": "Bonnie: Photography Club Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 41.0, + "bust_cm": 89.4, + "waist_cm": 60.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.644, + "BWR": 1.478, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/bonnie-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BONNIE READY TO SHIP", + "title": "Bonnie: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 41.0, + "bust_cm": 89.4, + "waist_cm": 60.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.644, + "BWR": 1.478, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/brianna-sexy-mma-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BRIANNA SEXY MMA SEX DOLL", + "title": "Brianna: Sexy MMA Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 43.0, + "bust_cm": 84.6, + "waist_cm": 55.1, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.606, + "BWR": 1.535, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/doreen-netflix-and-chill-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DOREEN NETFLIX AND CHILL SEX DOLL", + "title": "Doreen: Netflix and Chill Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/doris-asian-secretary-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DORIS ASIAN SECRETARY SEX DOLL", + "title": "Doris: Asian Secretary Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/eileen-sultry-pale-skin-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EILEEN SULTRY PALE SKIN SEX DOLL", + "title": "Eileen: Sultry Pale Skin Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/gianna-goth-rocker-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GIANNA GOTH ROCKER SEX DOLL", + "title": "Gianna: Goth Rocker Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/grace-captivating-eyes-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "GRACE CAPTIVATING EYES SEX DOLL", + "title": "Grace: Captivating Eyes Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/heather-sexy-dj-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "HEATHER SEXY DJ SEX DOLL", + "title": "Heather: Sexy DJ Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 55.1, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.606, + "BWR": 1.535, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/jennifer-magicians-assistant-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JENNIFER MAGICIANS ASSISTANT SEX DOLL", + "title": "Jennifer: Magician's Assistant Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 43.0, + "bust_cm": 84.6, + "waist_cm": 57.7, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.635, + "BWR": 1.466, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/joan-real-estate-agent-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOAN REAL ESTATE AGENT SEX DOLL", + "title": "Joan: Real Estate Agent Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 55.1, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.606, + "BWR": 1.535, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/joanna-camping-fling-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOANNA CAMPING FLING SEX DOLL", + "title": "Joanna: Camping Fling Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/joanna-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOANNA READY TO SHIP", + "title": "Joanna: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/judy-rich-chinese-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JUDY RICH CHINESE GIRL SEX DOLL", + "title": "Judy: Rich Chinese Girl Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 43.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/kamari-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KAMARI READY TO SHIP", + "title": "Kamari: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/kamari-sexy-lips-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KAMARI SEXY LIPS SEX DOLL", + "title": "Kamari: Sexy Lips Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/kylie-shanghai-escort-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KYLIE SHANGHAI ESCORT SEX DOLL", + "title": "Kylie: Shanghai Escort Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/may-emperors-mistress-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAY EMPERORS MISTRESS SEX DOLL", + "title": "May: Emperor's Mistress Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 43.0, + "bust_cm": 84.6, + "waist_cm": 57.7, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.635, + "BWR": 1.466, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/nancy-whips-and-chains-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NANCY WHIPS AND CHAINS GIRL SEX DOLL", + "title": "Nancy: Whips and Chains Girl Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 43.0, + "bust_cm": 84.6, + "waist_cm": 55.1, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.606, + "BWR": 1.535, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/rebeca-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "REBECA READY TO SHIP", + "title": "Rebeca: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 63.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.676, + "BWR": 1.332, + "assigned_family": "The Muse", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/rebeca-sultry-latina-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "REBECA SULTRY LATINA SEX DOLL", + "title": "Rebeca: Sultry Latina Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 63.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.676, + "BWR": 1.332, + "assigned_family": "The Muse", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/rose-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ROSE READY TO SHIP", + "title": "Rose: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 41.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/rose-sunset-romance-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ROSE SUNSET ROMANCE SEX DOLL", + "title": "Rose: Sunset Romance Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 41.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/sammy-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SAMMY READY TO SHIP", + "title": "Sammy: Ready To Ship", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/sammy-sexy-ceo-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SAMMY SEXY CEO SEX DOLL", + "title": "Sammy: Sexy CEO Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/seren-teen-brat-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "SEREN TEEN BRAT SEX DOLL", + "title": "Seren: Teen Brat Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 55.1, + "hip_cm": 90.9, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.606, + "BWR": 1.535, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/victoria-mature-seductress-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "VICTORIA MATURE SEDUCTRESS SEX DOLL", + "title": "Victoria: Mature Seductress Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 39.5, + "bust_cm": 84.6, + "waist_cm": 63.5, + "hip_cm": 94.0, + "underbust_cm": null, + "cup": null, + "price": 2499.0, + "price_currency": "USD", + "WHR": 0.676, + "BWR": 1.332, + "assigned_family": "The Muse", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/viona-pink-treat-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "VIONA PINK TREAT SEX DOLL", + "title": "Viona: Pink Treat Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/zuki-extra-credit-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZUKI EXTRA CREDIT SEX DOLL", + "title": "Zuki: Extra Credit Sex Doll", + "series": null, + "material": null, + "height_cm": 166.0, + "weight_kg": 38.0, + "bust_cm": 81.0, + "waist_cm": 55.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.608, + "BWR": 1.449, + "assigned_family": "The Sculpt", + "family_confidence": "manual-review", + "family_basis": "Nearest family center outside both range bands", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/jeane-brown-goddess-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JEANE BROWN GODDESS SEX DOLL", + "title": "Jeane: Brown Goddess Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 43.0, + "bust_cm": 88.9, + "waist_cm": 64.0, + "hip_cm": 114.3, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.56, + "BWR": 1.389, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/jeane-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JEANE READY TO SHIP", + "title": "Jeane: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 167.0, + "weight_kg": 43.0, + "bust_cm": 88.9, + "waist_cm": 64.0, + "hip_cm": 114.3, + "underbust_cm": null, + "cup": null, + "price": 1674.0, + "price_currency": "USD", + "WHR": 0.56, + "BWR": 1.389, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "MD Doll", + "source_url": "https://www.siliconwives.com/products/irissa-fantasy-elf-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "IRISSA FANTASY ELF SEX DOLL", + "title": "Irissa: Fantasy Elf Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 168.0, + "weight_kg": 31.5, + "bust_cm": 83.1, + "waist_cm": 53.1, + "hip_cm": 84.6, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.628, + "BWR": 1.565, + "assigned_family": "The Icon", + "family_confidence": "exact", + "family_basis": "Both WHR and BWR fall inside the family range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/kailani-big-tit-asian-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KAILANI BIG TIT ASIAN SEX DOLL", + "title": "Kailani: Big Tit Asian Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/kailani-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KAILANI READY TO SHIP", + "title": "Kailani: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/kasumi-japanese-swimsuit-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "KASUMI JAPANESE SWIMSUIT SEX DOLL", + "title": "Kasumi: Japanese Swimsuit Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/laguna-oiled-up-stripper-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LAGUNA OILED UP STRIPPER SEX DOLL", + "title": "Laguna: Oiled Up Stripper Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/lisha-slutty-egirl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LISHA SLUTTY EGIRL SEX DOLL", + "title": "Lisha: Slutty eGirl Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/luella-country-girl-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LUELLA COUNTRY GIRL SEX DOLL", + "title": "Luella: Country Girl Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/marlo-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MARLO READY TO SHIP", + "title": "Marlo: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/marlo-sexy-streamer-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MARLO SEXY STREAMER SEX DOLL", + "title": "Marlo: Sexy Streamer Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/monica-oil-massage-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MONICA OIL MASSAGE SEX DOLL", + "title": "Monica: Oil Massage Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/nari-private-study-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NARI PRIVATE STUDY SEX DOLL", + "title": "Nari: Private Study Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/peace-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PEACE READY TO SHIP", + "title": "Peace: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/peace-slutty-santa-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "PEACE SLUTTY SANTA SEX DOLL", + "title": "Peace: Slutty Santa Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/yuzu-curvy-asian-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "YUZU CURVY ASIAN SEX DOLL", + "title": "Yuzu: Curvy Asian Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 159.0, + "weight_kg": 43.0, + "bust_cm": 96.0, + "waist_cm": 63.0, + "hip_cm": 109.0, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.578, + "BWR": 1.524, + "assigned_family": "The Icon", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/lani-summer-love-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "LANI SUMMER LOVE SEX DOLL", + "title": "Lani: Summer Love Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 161.0, + "weight_kg": 30.2, + "bust_cm": 79.0, + "waist_cm": 56.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.388, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/mei-mei-loving-teen-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MEI MEI LOVING TEEN SEX DOLL", + "title": "Mei Mei: Loving Teen Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 161.0, + "weight_kg": 30.2, + "bust_cm": 79.0, + "waist_cm": 56.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.388, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/naomi-business-trip-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NAOMI BUSINESS TRIP SEX DOLL", + "title": "Naomi: Business Trip Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 161.0, + "weight_kg": 30.2, + "bust_cm": 79.0, + "waist_cm": 56.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.388, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/zoe-fitness-babe-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ZOE FITNESS BABE SEX DOLL", + "title": "Zoe: Fitness Babe Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 161.0, + "weight_kg": 30.2, + "bust_cm": 79.0, + "waist_cm": 56.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.619, + "BWR": 1.388, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/balia-italian-lingerie-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BALIA ITALIAN LINGERIE SEX DOLL", + "title": "Balia: Italian Lingerie Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/dusk-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DUSK READY TO SHIP", + "title": "Dusk: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/dusk-winter-cottage-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "DUSK WINTER COTTAGE SEX DOLL", + "title": "Dusk: Winter Cottage Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/effie-office-affair-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "EFFIE OFFICE AFFAIR SEX DOLL", + "title": "Effie: Office Affair Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/hailee-seductive-red-head-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "HAILEE SEDUCTIVE RED HEAD SEX DOLL", + "title": "Hailee: Seductive Red Head Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 30.2, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 99.8, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.611, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/maia-elegant-brunette-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAIA ELEGANT BRUNETTE SEX DOLL", + "title": "Maia: Elegant Brunette Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/maia-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAIA READY TO SHIP", + "title": "Maia: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/natalee-fun-ski-weekend-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NATALEE FUN SKI WEEKEND SEX DOLL", + "title": "Natalee: Fun Ski Weekend Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/natalee-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NATALEE READY TO SHIP", + "title": "Natalee: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 165.0, + "weight_kg": 43.0, + "bust_cm": 82.8, + "waist_cm": 61.0, + "hip_cm": 100.1, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.609, + "BWR": 1.357, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/anais-christmas-in-paris-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANAIS CHRISTMAS IN PARIS SEX DOLL", + "title": "Anais: Christmas in Paris Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 167.0, + "weight_kg": 39.0, + "bust_cm": 77.0, + "waist_cm": 59.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.652, + "BWR": 1.285, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/anais-teen-babysitter-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "ANAIS TEEN BABYSITTER SEX DOLL", + "title": "Anais: Teen Babysitter Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 167.0, + "weight_kg": 39.0, + "bust_cm": 77.0, + "waist_cm": 59.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.652, + "BWR": 1.285, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/becker-bedroom-angel-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "BECKER BEDROOM ANGEL SEX DOLL", + "title": "Becker: Bedroom Angel Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 167.0, + "weight_kg": 39.0, + "bust_cm": 77.0, + "waist_cm": 59.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.652, + "BWR": 1.285, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/jilian-summer-love-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JILIAN SUMMER LOVE SEX DOLL", + "title": "Jilian: Summer Love Sex Doll", + "series": null, + "material": "hybrid", + "height_cm": 167.0, + "weight_kg": 39.0, + "bust_cm": 77.0, + "waist_cm": 59.9, + "hip_cm": 91.9, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.652, + "BWR": 1.285, + "assigned_family": "The Muse", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/joan-fitness-chick-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "JOAN FITNESS CHICK SEX DOLL", + "title": "Joan: Fitness Chick Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 41.5, + "bust_cm": 90.9, + "waist_cm": 61.0, + "hip_cm": 99.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.616, + "BWR": 1.49, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/maya-hot-mom-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAYA HOT MOM SEX DOLL", + "title": "Maya: Hot Mom Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 41.5, + "bust_cm": 90.9, + "waist_cm": 61.0, + "hip_cm": 99.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.616, + "BWR": 1.49, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/maya-ready-to-ship", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MAYA READY TO SHIP", + "title": "Maya: Ready To Ship", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 41.5, + "bust_cm": 90.9, + "waist_cm": 61.0, + "hip_cm": 99.1, + "underbust_cm": null, + "cup": null, + "price": 2599.0, + "price_currency": "USD", + "WHR": 0.616, + "BWR": 1.49, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/mizuki-bangkok-escort-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "MIZUKI BANGKOK ESCORT SEX DOLL", + "title": "Mizuki: Bangkok Escort Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 41.5, + "bust_cm": 90.9, + "waist_cm": 61.0, + "hip_cm": 99.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.616, + "BWR": 1.49, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" + }, + { + "brand": "Lusandy Doll", + "source_url": "https://www.siliconwives.com/products/nikky-orange-bikini-sex-doll", + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": "NIKKY ORANGE BIKINI SEX DOLL", + "title": "Nikky: Orange Bikini Sex Doll", + "series": null, + "material": "silicone", + "height_cm": 170.0, + "weight_kg": 41.5, + "bust_cm": 90.9, + "waist_cm": 61.0, + "hip_cm": 99.1, + "underbust_cm": null, + "cup": null, + "price": 2699.0, + "price_currency": "USD", + "WHR": 0.616, + "BWR": 1.49, + "assigned_family": "The Sculpt", + "family_confidence": "near", + "family_basis": "Nearest family center with one ratio inside range", + "notes": "Extracted from Shopify product body_html via SiliconWives" } ] } \ No newline at end of file diff --git a/db/competitor_family_coverage.sqlite b/db/competitor_family_coverage.sqlite index 0e7002e8c9870840b19341a8906c94210b199373..0c346483e1b1322f9ac40cc62f1b4249a8285b5d 100644 GIT binary patch literal 270336 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

Ie;Tic8URJMiUPz@{X6# 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 XKgR}D*gMY*hSToz?!kj2d^7$JnIEnO diff --git a/db/independent_catalog_groupings.json b/db/independent_catalog_groupings.json index 0a4d94a..08542a2 100644 --- a/db/independent_catalog_groupings.json +++ b/db/independent_catalog_groupings.json @@ -464,424 +464,17 @@ { "brand": "ZELEX", "total_products": 156, - "full_body_skus": 156, - "full-body": 156, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Catalog Depth Leader" - } - ], - "full_body_competitor_matrix": [ - { - "brand": "6Ye", - "total_products": 23, - "full_body_skus": 22, - "full-body": 22, - "torso": 1, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 95.7, - "strategy_group": "Focused Midline" - }, - { - "brand": "AI Tech", - "total_products": 1, - "full_body_skus": 1, - "full-body": 1, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Boutique Premium" - }, - { - "brand": "Angel Kiss", - "total_products": 49, - "full_body_skus": 49, - "full-body": 49, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Arcana", - "total_products": 4, - "full_body_skus": 4, - "full-body": 4, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "CY Doll", - "total_products": 83, - "full_body_skus": 83, - "full-body": 83, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Cyber Girl", - "total_products": 4, - "full_body_skus": 4, - "full-body": 4, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Dime Doll", - "total_products": 35, - "full_body_skus": 35, - "full-body": 35, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "FunWest", - "total_products": 107, - "full_body_skus": 107, - "full-body": 107, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Catalog Depth Leader" - }, - { - "brand": "Irontech", - "total_products": 124, - "full_body_skus": 122, - "full-body": 122, - "torso": 2, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 98.4, - "strategy_group": "Catalog Depth Leader" - }, - { - "brand": "JM Doll", - "total_products": 1, - "full_body_skus": 1, - "full-body": 1, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Jiusheng", - "total_products": 25, - "full_body_skus": 25, - "full-body": 25, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "LilyDoll", - "total_products": 14, - "full_body_skus": 14, - "full-body": 14, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Lusandy", - "total_products": 35, - "full_body_skus": 35, - "full-body": 35, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "MD Doll", - "total_products": 69, - "full_body_skus": 69, - "full-body": 69, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Magic Moment", - "total_products": 3, - "full_body_skus": 3, - "full-body": 3, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Qita", - "total_products": 3, - "full_body_skus": 2, - "full-body": 2, - "torso": 1, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 66.7, - "strategy_group": "Line Extension (torso/male)" - }, - { - "brand": "Real Lady", - "total_products": 64, - "full_body_skus": 64, - "full-body": 64, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "SE Doll", - "total_products": 135, - "full_body_skus": 135, - "full-body": 135, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Catalog Depth Leader" - }, - { - "brand": "SY Doll", - "total_products": 4, - "full_body_skus": 4, - "full-body": 4, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Sanhui", - "total_products": 7, - "full_body_skus": 7, - "full-body": 7, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Boutique Premium" - }, - { - "brand": "Sigafun", - "total_products": 7, - "full_body_skus": 7, - "full-body": 7, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "Sino Doll", - "total_products": 12, - "full_body_skus": 12, - "full-body": 12, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Boutique Premium" - }, - { - "brand": "Starpery", - "total_products": 47, - "full_body_skus": 46, - "full-body": 46, - "torso": 1, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 97.9, - "strategy_group": "Focused Midline" - }, - { - "brand": "WM Doll", - "total_products": 280, - "full_body_skus": 271, - "full-body": 271, - "torso": 5, - "male": 4, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 96.8, - "strategy_group": "Catalog Depth Leader" - }, - { - "brand": "XT Doll", - "total_products": 50, - "full_body_skus": 50, - "full-body": 50, + "full_body_skus": 0, + "full-body": 0, "torso": 0, "male": 0, "exclusive": 0, "house-brand": 0, "multi-brand": 0, "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Focused Midline" - }, - { - "brand": "YL Doll", - "total_products": 33, - "full_body_skus": 32, - "full-body": 32, - "torso": 0, - "male": 1, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 97.0, + "unknown": 2, + "full_body_share_pct": 0.0, "strategy_group": "Focused Midline" - }, - { - "brand": "ZELEX", - "total_products": 156, - "full_body_skus": 156, - "full-body": 156, - "torso": 0, - "male": 0, - "exclusive": 0, - "house-brand": 0, - "multi-brand": 0, - "accessory": 0, - "unknown": 0, - "full_body_share_pct": 100.0, - "strategy_group": "Catalog Depth Leader" } ], "price_matrix": [ @@ -1208,12 +801,6 @@ "full_body_skus": 271, "median_price_usd": 1777.0 }, - { - "brand": "ZELEX", - "strategy_group": "Catalog Depth Leader", - "full_body_skus": 156, - "median_price_usd": 1999.0 - }, { "brand": "6Ye", "strategy_group": "Focused Midline", @@ -1322,6 +909,12 @@ "full_body_skus": 32, "median_price_usd": 2049.0 }, + { + "brand": "ZELEX", + "strategy_group": "Focused Midline", + "full_body_skus": 0, + "median_price_usd": 1999.0 + }, { "brand": "Qita", "strategy_group": "Line Extension (torso/male)", diff --git a/docs/research/competitor-family-coverage-matrix.csv b/docs/research/competitor-family-coverage-matrix.csv index b814874..04f583d 100644 --- a/docs/research/competitor-family-coverage-matrix.csv +++ b/docs/research/competitor-family-coverage-matrix.csv @@ -232,3 +232,265 @@ Tayu,TAYU 163CM D CUP,"163cm D Cup Head#1 Eva Set1 - Tayu Doll: Lighter, Softer, Tayu,TAYU 163CM D CUP WITH SKIN TEXTURE,Ultra Realistic Silicone Sex Doll – TAYU Peach 163cm D - Cup,https://www.tayu-doll.com/product/ultra-realistic-silicone-sex-doll-tayu/,official,163.0,27.5,89.0,63.5,102.0,68.0,D,Silicone Because each doll is made by hand,4300.0,USD,0.623,1.402,The Muse,manual-review,Nearest family center outside both range bands,Deduplicated by body descriptor from Tayu product sitemap Tayu,TAYU DOLL 165CM E CUP SILICONE,"165cm E Cup Head#24 April Set3 - Tayu Doll: Lighter, Softer, Easier",https://www.tayu-doll.com/product/165cm-e-cup-head24-april-set3/,official,165.0,28.5,88.0,66.0,100.0,68.0,E,Silicone Because each doll is made by hand,4300.0,USD,0.66,1.333,The Muse,exact,Both WHR and BWR fall inside the family range,Deduplicated by body descriptor from Tayu product sitemap Tayu,TAYU 170CM E CUP,"170cm E Cup Head#9 Naimei Set1 - Tayu Doll: Lighter, Softer, Easier",https://www.tayu-doll.com/product/170cm-e-cup-head9-naimei-set1/,official,170.0,27.0,88.0,61.0,97.0,68.0,E,Silicone Because each doll is made by hand,4700.0,USD,0.629,1.443,The Sculpt,manual-review,Nearest family center outside both range bands,Deduplicated by body descriptor from Tayu product sitemap +Sanhui,PIPPA JAPANESE SEX DOLL,Pippa: Asian Sex Doll,https://www.siliconwives.com/products/pippa-japanese-sex-doll,secondary,163.0,31.0,76.2,55.9,76.2,,,silicone,3199.0,USD,0.734,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Sanhui,RUBY 165CM SILICONE SEX DOLL,Ruby: Huge Tits Silicone Sex Doll,https://www.siliconwives.com/products/ruby-165cm-silicone-sex-doll,secondary,165.0,40.0,111.8,53.3,86.4,,,silicone,2599.0,USD,0.617,2.098,The Siren,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Sanhui,SAMANTHA 165CM SILICONE SEX DOLL,Samantha: Brunette Sex Doll,https://www.siliconwives.com/products/samantha-165cm-silicone-sex-doll,secondary,165.0,33.0,78.7,53.3,76.2,,,silicone,2499.0,USD,0.699,1.477,The Classic,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Sanhui,TALL BLONDE JAPANESE SEX DOLL,Ahri: Tall Blonde Japanese Sex Doll,https://www.siliconwives.com/products/tall-blonde-japanese-sex-doll,secondary,165.0,25.0,81.3,53.3,76.2,,,silicone,2499.0,USD,0.699,1.525,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Sanhui,CAT COSPLAY SEX DOLL,Cat: Cosplay Sex Doll,https://www.siliconwives.com/products/cat-cosplay-sex-doll,secondary,168.0,32.0,83.8,53.3,86.4,,,silicone,2499.0,USD,0.617,1.572,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Sanhui,GOLDIE SILICONE SEX DOLL,Goldie: Silicone Sex Doll,https://www.siliconwives.com/products/goldie-silicone-sex-doll,secondary,168.0,32.0,83.8,53.3,86.4,,,silicone,2999.0,USD,0.617,1.572,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Sanhui,JADE KOREAN SILICONE SEX DOLL,Jade: Korean Silicone Sex Doll,https://www.siliconwives.com/products/jade-korean-silicone-sex-doll,secondary,168.0,32.0,83.8,53.3,86.4,,,silicone,2699.0,USD,0.617,1.572,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,PRINCESA READY TO SHIP,Princesa: Ready To Ship,https://www.siliconwives.com/products/princesa-ready-to-ship,secondary,150.0,28.0,80.0,48.0,74.9,,,TPE,1299.0,USD,0.641,1.667,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,PRINCESA SEXY NIGHTCLUB SEX DOLL,Princesa: Sexy Nightclub Sex Doll,https://www.siliconwives.com/products/princesa-sexy-nightclub-sex-doll,secondary,150.0,28.0,80.0,48.0,74.9,,,TPE,1399.0,USD,0.641,1.667,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,IRIS COVER GIRL SEX DOLL,Iris: Cover Girl Sex Doll,https://www.siliconwives.com/products/iris-cover-girl-sex-doll,secondary,152.0,30.0,71.9,47.8,75.9,,,TPE,1299.0,USD,0.63,1.504,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,IRIS READY TO SHIP,Iris: Ready To Ship,https://www.siliconwives.com/products/iris-ready-to-ship,secondary,152.0,30.0,71.9,47.8,75.9,,,TPE,1299.0,USD,0.63,1.504,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,LUANA CUTE TEACHER SEX DOLL,Luana: Cute Teacher Sex Doll,https://www.siliconwives.com/products/luana-cute-teacher-sex-doll,secondary,152.0,30.0,71.9,47.8,75.9,,,TPE,1299.0,USD,0.63,1.504,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,LUANA READY TO SHIP,Luana: Ready To Ship,https://www.siliconwives.com/products/luana-ready-to-ship,secondary,152.0,30.0,71.9,47.8,75.9,,,TPE,1299.0,USD,0.63,1.504,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,NIKA JAPANESE BEACH CLUB SEX DOLL,Nika: Japanese Beach Club Sex Doll,https://www.siliconwives.com/products/nika-japanese-beach-club-sex-doll,secondary,152.0,30.0,71.1,48.0,77.0,,,silicone,2049.0,USD,0.623,1.481,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,NIKA READY TO SHIP,Nika: Ready To Ship,https://www.siliconwives.com/products/nika-ready-to-ship,secondary,152.0,30.0,71.1,48.0,77.0,,,silicone,1949.0,USD,0.623,1.481,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,PEPPA JAPANESE TEEN SEX DOLL,Peppa: Japanese Teen Sex Doll,https://www.siliconwives.com/products/peppa-japanese-teen-sex-doll,secondary,152.0,30.0,71.9,47.8,75.9,,,TPE,1299.0,USD,0.63,1.504,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,BELLA HOT CHRISTMAS EVE SEX DOLL,Bella: Hot Christmas Eve Sex Doll,https://www.siliconwives.com/products/bella-hot-christmas-eve-sex-doll,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1399.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,BELLA READY TO SHIP 1,Bella: Ready To Ship,https://www.siliconwives.com/products/bella-ready-to-ship-1,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1399.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,DARLENE BASEBALL CHEERLEADER SEX DOLL,Darlene: Baseball Cheerleader Sex Doll,https://www.siliconwives.com/products/darlene-baseball-cheerleader-sex-doll,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1499.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,DARLENE READY TO SHIP,Darlene: Ready To Ship,https://www.siliconwives.com/products/darlene-ready-to-ship,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1299.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LUZ READY TO SHIP,Luz: Ready To Ship,https://www.siliconwives.com/products/luz-ready-to-ship,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1299.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LUZ REINDEER STRIPPER SEX DOLL,Luz: Reindeer Stripper Sex Doll,https://www.siliconwives.com/products/luz-reindeer-stripper-sex-doll,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1399.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,QUINCE AFTER SCHOOL SEX DOLL,Quince: After School Sex Doll,https://www.siliconwives.com/products/quince-after-school-sex-doll,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1499.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,QUINCE READY TO SHIP,Quince: Ready To Ship,https://www.siliconwives.com/products/quince-ready-to-ship,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1499.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,WINSLOW FREAKY FANTASY SEX DOLL,Winslow: Freaky Fantasy Sex Doll,https://www.siliconwives.com/products/winslow-freaky-fantasy-sex-doll,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1499.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,WINSLOW READY TO SHIP,Winslow: Ready To Ship,https://www.siliconwives.com/products/winslow-ready-to-ship,secondary,155.0,44.5,80.0,52.1,87.4,,,TPE,1499.0,USD,0.596,1.536,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SKYE TROPICAL PARADISE SEX DOLL,Skye: Tropical Paradise Sex Doll,https://www.siliconwives.com/products/skye-tropical-paradise-sex-doll,secondary,156.0,29.0,79.0,52.8,94.0,,,silicone,2199.0,USD,0.562,1.496,The Icon,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ALICE CUTE MAID SEX DOLL,Alice: Cute Maid Sex Doll,https://www.siliconwives.com/products/alice-cute-maid-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,AMY WINTER LOVER SEX DOLL,Amy: Winter Lover Sex Doll,https://www.siliconwives.com/products/amy-winter-lover-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ANDY ISLAND FLING SEX DOLL,Andy: Island Fling Sex Doll,https://www.siliconwives.com/products/andy-island-fling-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ARIS CYBER STRIPPER SEX DOLL,Aris: Cyber Stripper Sex Doll,https://www.siliconwives.com/products/aris-cyber-stripper-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ARIS READY TO SHIP,Aris: Ready To Ship,https://www.siliconwives.com/products/aris-ready-to-ship,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ASSOS MUSIC FESTIVAL SEX DOLL,Assos: Music Festival Sex Doll,https://www.siliconwives.com/products/assos-music-festival-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,BELLA SUN GODDESS SEX DOLL,Bella: Sun Goddess Sex Doll,https://www.siliconwives.com/products/bella-sun-goddess-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,BRIE READY TO SHIP,Brie: Ready To Ship,https://www.siliconwives.com/products/brie-ready-to-ship,secondary,157.0,40.0,81.0,53.1,97.0,,,TPE,1499.0,USD,0.547,1.525,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,BRIE SEDUCTIVE LOUNGE SEX DOLL,Brie: Smoking Lounge Sex Doll,https://www.siliconwives.com/products/brie-seductive-lounge-sex-doll,secondary,157.0,40.0,81.0,53.1,97.0,,,TPE,1499.0,USD,0.547,1.525,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,CONTESSA HOT CO WORKER SEX DOLL,Contessa: Hot Co-worker Sex Doll,https://www.siliconwives.com/products/contessa-hot-co-worker-sex-doll,secondary,157.0,40.0,81.0,53.1,97.0,,,TPE,1499.0,USD,0.547,1.525,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ELOISE BLONE IDOL SEX DOLL,Eloise: Blone Idol Sex Doll,https://www.siliconwives.com/products/eloise-blone-idol-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LILY PINK BUNNY SEX DOLL,Lily: Pink Bunny Sex Doll,https://www.siliconwives.com/products/lily-pink-bunny-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LUCY MILITARY COMBAT SEX DOLL,Lucy: Military Combat Sex Doll,https://www.siliconwives.com/products/lucy-military-combat-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYLA CLUBBING TEEN SEX DOLL,Lyla: Clubbing Teen Sex Doll,https://www.siliconwives.com/products/lyla-clubbing-teen-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYLA READY TO SHIP,Lyla: Ready To Ship,https://www.siliconwives.com/products/lyla-ready-to-ship,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYRA CHRISTMAS PRESENT SEX DOLL,Lyra: Christmas Present Sex Doll,https://www.siliconwives.com/products/lyra-christmas-present-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYRA NIGHTCLUB SINGER SEX DOLL,Lyra: Nightclub Singer Sex Doll,https://www.siliconwives.com/products/lyra-nightclub-singer-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,META READY TO SHIP,Meta: Ready To Ship,https://www.siliconwives.com/products/meta-ready-to-ship,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1499.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,META REBELLIOUS SCI FI SEX DOLL,Meta: Rebellious Sci-fi Sex Doll,https://www.siliconwives.com/products/meta-rebellious-sci-fi-sex-doll,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1499.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ROSEY LITTLE RED DRESS SEX DOLL,Rosey: Little Red Dress Sex Doll,https://www.siliconwives.com/products/rosey-little-red-dress-sex-doll,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2199.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ROSEY READY TO SHIP,Rosey: Ready To Ship,https://www.siliconwives.com/products/rosey-ready-to-ship,secondary,157.0,33.0,80.8,52.8,96.8,,,silicone,2399.0,USD,0.545,1.53,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SLOANE DRILL SERGEANT SEX DOLL,Sloane: Drill Sergeant Sex Doll,https://www.siliconwives.com/products/sloane-drill-sergeant-sex-doll,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1499.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,SLOANE READY TO SHIP,Sloane: Ready To Ship,https://www.siliconwives.com/products/sloane-ready-to-ship,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1499.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,TETTY PUNK ROCK SEX DOLL,Tetty: Punk Rock Sex Doll,https://www.siliconwives.com/products/tetty-punk-rock-sex-doll,secondary,157.0,32.0,80.0,52.1,83.8,,,silicone,2199.0,USD,0.622,1.536,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,WESTERLY READY TO SHIP,Westerly: Ready To Ship,https://www.siliconwives.com/products/westerly-ready-to-ship,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1399.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,WESTERLY YOUNG MAIDEN SEX DOLL,Westerly: Young Maiden Sex Doll,https://www.siliconwives.com/products/westerly-young-maiden-sex-doll,secondary,157.0,40.0,74.9,53.1,97.0,,,TPE,1499.0,USD,0.547,1.411,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ZENNI BOSSS DAUGHTER SEX DOLL,Zenni: Boss's Daughter Sex Doll,https://www.siliconwives.com/products/zenni-bosss-daughter-sex-doll,secondary,157.0,32.0,80.0,52.1,83.8,,,silicone,2199.0,USD,0.622,1.536,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,AERIE FANTASY SCHOOL GIRL SEX DOLL,Aerie: Fantasy School Girl Sex Doll,https://www.siliconwives.com/products/aerie-fantasy-school-girl-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ANAKIN CUTE EGIRL SEX DOLL,Anakin: Cute eGirl Sex Doll,https://www.siliconwives.com/products/anakin-cute-egirl-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ANAKIN READY TO SHIP,Anakin: Ready To Ship,https://www.siliconwives.com/products/anakin-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1399.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,CAROL CHRISTMAS EVE SEX DOLL,Carol: Christmas Eve Sex Doll,https://www.siliconwives.com/products/carol-christmas-eve-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,CAROL READY TO SHIP,Carol: Ready To Ship,https://www.siliconwives.com/products/carol-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,CLARINA TROPICAL HONEYMOON SEX DOLL,Clarina: Tropical Honeymoon Sex Doll,https://www.siliconwives.com/products/clarina-tropical-honeymoon-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ERIN DATE NIGHT SEX DOLL,Erin: Date Night Sex Doll,https://www.siliconwives.com/products/erin-date-night-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ESME DOUBLE AGENT SEX DOLL,Esme: Double Agent Sex Doll,https://www.siliconwives.com/products/esme-double-agent-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,EUDORA READY TO SHIP,Eudora: Ready To Ship,https://www.siliconwives.com/products/eudora-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,EUDORA SASSY BRAT SEX DOLL,Eudora: Sassy Brat Sex Doll,https://www.siliconwives.com/products/eudora-sassy-brat-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,GISELLE CUTE BLONDE MAID SEX DOLL,Giselle: Cute Blonde Maid Sex Doll,https://www.siliconwives.com/products/giselle-cute-blonde-maid-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,GISELLE READY TO SHIP,Giselle: Ready To Ship,https://www.siliconwives.com/products/giselle-ready-to-ship,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2199.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,IRIDESSA BLACKJACK DEALER SEX DOLL,Iridessa: Blackjack Dealer Sex Doll,https://www.siliconwives.com/products/iridessa-blackjack-dealer-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,IRIDESSA READY TO SHIP,Iridessa: Ready To Ship,https://www.siliconwives.com/products/iridessa-ready-to-ship,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,JINXY ANIME GUNSLINGER SEX DOLL,Jinxy: Anime Gunslinger Sex Doll,https://www.siliconwives.com/products/jinxy-anime-gunslinger-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,JINXY READY TO SHIP,Jinxy: Ready To Ship,https://www.siliconwives.com/products/jinxy-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,LACY ART STUDENT SEX DOLL,Lacy: Art Student Sex Doll,https://www.siliconwives.com/products/lacy-art-student-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYRA READY TO SHIP,Lyra: Ready To Ship,https://www.siliconwives.com/products/lyra-ready-to-ship,secondary,159.0,44.5,80.0,55.1,85.1,,,TPE,1399.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYRA ROMANTIC CHATEAU SEX DOLL,Lyra: Romantic Chateau Sex Doll,https://www.siliconwives.com/products/lyra-romantic-chateau-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LYRA SEXY CASINO DEALER SEX DOLL,Lyra: Sexy Casino Dealer Sex Doll,https://www.siliconwives.com/products/lyra-sexy-casino-dealer-sex-doll,secondary,159.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,MINARA DATE NIGHT SEX DOLL,Minara: Date Night Sex Doll,https://www.siliconwives.com/products/minara-date-night-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,MINARA READY TO SHIP,Minara: Ready To Ship,https://www.siliconwives.com/products/minara-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1399.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,NIDALEE JUNGLE BABE SEX DOLL,Nidalee: Jungle Babe Sex Doll,https://www.siliconwives.com/products/nidalee-jungle-babe-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,NIDALEE READY TO SHIP,Nidalee: Ready To Ship,https://www.siliconwives.com/products/nidalee-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,NIKO PETITE TEEN ASIAN SEX DOLL,Niko: Petite Teen Asian Sex Doll,https://www.siliconwives.com/products/niko-petite-teen-asian-sex-doll,secondary,159.0,37.0,71.9,53.8,91.9,,,silicone,2199.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,NIKO READY TO SHIP,Niko: Ready To Ship,https://www.siliconwives.com/products/niko-ready-to-ship,secondary,159.0,37.0,71.9,53.8,91.9,,,silicone,2199.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SOPHIEMINA COLLEGE GIRLFRIEND SEX DOLL,Sophiemina: College Girlfriend Sex Doll,https://www.siliconwives.com/products/sophiemina-college-girlfriend-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SOPHIEMINA READY TO SHIP,Sophiemina: Ready To Ship,https://www.siliconwives.com/products/sophiemina-ready-to-ship,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,STORMY SUPERNATURAL POWERS SEX DOLL,Stormy: Supernatural Powers Sex Doll,https://www.siliconwives.com/products/stormy-supernatural-powers-sex-doll,secondary,159.0,30.0,71.9,53.8,91.9,,,silicone,2149.0,USD,0.585,1.336,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ZINNA PINK NINJA SEX DOLL,Zinna: Pink Ninja Sex Doll,https://www.siliconwives.com/products/zinna-pink-ninja-sex-doll,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1599.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,ZINNA READY TO SHIP,Zinna: Ready To Ship,https://www.siliconwives.com/products/zinna-ready-to-ship,secondary,159.0,44.0,71.9,58.7,91.9,,,TPE,1399.0,USD,0.639,1.225,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +FunWest,CHERIE PURE BLONDE SEX DOLL,Cherie: Pure Blonde Sex Doll,https://www.siliconwives.com/products/cherie-pure-blonde-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,JASMIN EXTREME SPORTS SEX DOLL,Jasmin: Extreme Sports Sex Doll,https://www.siliconwives.com/products/jasmin-extreme-sports-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,JASMIN READY TO SHIP,Jasmin: Ready To Ship,https://www.siliconwives.com/products/jasmin-ready-to-ship,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,1874.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,JEANY PROM NIGHT SEX DOLL,Jeany: Prom Night Sex Doll,https://www.siliconwives.com/products/jeany-prom-night-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,JULIETTE CASINO WAITRESS SEX DOLL,Juliette: Casino Waitress Sex Doll,https://www.siliconwives.com/products/juliette-casino-waitress-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,MORTICIA SPOOKY NURSE SEX DOLL,Morticia: Spooky Nurse Sex Doll,https://www.siliconwives.com/products/morticia-spooky-nurse-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,NATALIE RUSSIAN WIFE SEX DOLL,Natalie: Russian Wife Sex Doll,https://www.siliconwives.com/products/natalie-russian-wife-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,TRIPOLI ETHEREAL SORCERESS SEX DOLL,Tripoli: Ethereal Sorceress Sex Doll,https://www.siliconwives.com/products/tripoli-ethereal-sorceress-sex-doll,secondary,160.0,32.0,81.8,49.3,89.9,,,silicone,2149.0,USD,0.548,1.659,The Siren,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ASSOS READY TO SHIP,Assos: Ready To Ship,https://www.siliconwives.com/products/assos-ready-to-ship,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ASSOS SEXY BLONDE TEEN SEX DOLL,Assos: Sexy Blonde Teen Sex Doll,https://www.siliconwives.com/products/assos-sexy-blonde-teen-sex-doll,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,HARLOW HONEYMOON SUITE SEX DOLL,Harlow: Honeymoon Suite Sex Doll,https://www.siliconwives.com/products/harlow-honeymoon-suite-sex-doll,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SAMARA OCCULT WITCH SEX DOLL,Samara: Occult Witch Sex Doll,https://www.siliconwives.com/products/samara-occult-witch-sex-doll,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SAMARA READY TO SHIP,Samara: Ready To Ship,https://www.siliconwives.com/products/samara-ready-to-ship,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1399.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,TALVI BADASS BLONDE SEX DOLL,Talvi: Badass Blonde Sex Doll,https://www.siliconwives.com/products/talvi-badass-blonde-sex-doll,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,TALVI READY TO SHIP,Talvi: Ready To Ship,https://www.siliconwives.com/products/talvi-ready-to-ship,secondary,162.0,44.5,80.0,55.1,85.1,,,TPE,1599.0,USD,0.647,1.452,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,DAYNA CURVY TEEN SEX DOLL,Dayna: Curvy Teen Sex Doll,https://www.siliconwives.com/products/dayna-curvy-teen-sex-doll,secondary,163.0,47.0,91.9,59.9,97.0,,,TPE,1649.0,USD,0.618,1.534,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,EIRA SEXY SKI WEEKEND SEX DOLL,Eira: Sexy Ski Weekend Sex Doll,https://www.siliconwives.com/products/eira-sexy-ski-weekend-sex-doll,secondary,163.0,47.0,91.9,59.9,97.0,,,TPE,1649.0,USD,0.618,1.534,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,LENA AFTER PROM SEX DOLL,Lena: After Prom Sex Doll,https://www.siliconwives.com/products/lena-after-prom-sex-doll,secondary,163.0,47.0,91.9,59.9,97.0,,,TPE,1649.0,USD,0.618,1.534,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,LEXIE HOT HALF ASIAN SEX DOLL,Lexie: Hot Half-Asian Sex Doll,https://www.siliconwives.com/products/lexie-hot-half-asian-sex-doll,secondary,165.0,47.0,75.9,56.9,89.9,,,TPE,1499.0,USD,0.633,1.334,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,LEXIE READY TO SHIP,Lexie: Ready To Ship,https://www.siliconwives.com/products/lexie-ready-to-ship,secondary,165.0,47.0,75.9,56.9,89.9,,,TPE,1399.0,USD,0.633,1.334,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SHEILA CUTE INTERN SEX DOLL,Sheila: Cute Intern Sex Doll,https://www.siliconwives.com/products/sheila-cute-intern-sex-doll,secondary,165.0,47.0,75.9,56.9,89.9,,,TPE,1599.0,USD,0.633,1.334,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ESTELLE SUPER MODEL SEX DOLL,Estelle: Super Model Sex Doll,https://www.siliconwives.com/products/estelle-super-model-sex-doll,secondary,166.0,33.0,86.4,53.8,89.9,,,silicone,2167.0,USD,0.598,1.606,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +FunWest,ALEXI READY TO SHIP,Alexi: Ready To Ship,https://www.siliconwives.com/products/alexi-ready-to-ship,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2199.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ALEXI STEAMPUNK COSPLAY SEX DOLL,Alexi: Steampunk Cosplay Sex Doll,https://www.siliconwives.com/products/alexi-steampunk-cosplay-sex-doll,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2499.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,ELIO BOTTLE SERVICE SEX DOLL,Elio: Bottle Service Sex Doll,https://www.siliconwives.com/products/elio-bottle-service-sex-doll,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2499.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SKYLER HOT ASSASSIN SEX DOLL,Skyler: Hot Assassin Sex Doll,https://www.siliconwives.com/products/skyler-hot-assassin-sex-doll,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2499.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,SOPHIEMINA INNOCENT SECRETARY SEX DOLL,Sophiemina: Innocent Secretary Sex Doll,https://www.siliconwives.com/products/sophiemina-innocent-secretary-sex-doll,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2499.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +FunWest,VESPER HOT SEX DUNGEON SEX DOLL,Vesper: Hot Sex Dungeon Sex Doll,https://www.siliconwives.com/products/vesper-hot-sex-dungeon-sex-doll,secondary,168.0,42.0,89.9,62.0,97.0,,,silicone,2499.0,USD,0.639,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,CERVINE 70S BABE SEX DOLL,Cervine: 70s Babe Sex Doll,https://www.siliconwives.com/products/cervine-70s-babe-sex-doll,secondary,165.0,32.0,78.7,55.9,83.1,,,silicone,1699.0,USD,0.673,1.408,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ENID FORTUNE TELLER SEX DOLL,Enid: Fortune Teller Sex Doll,https://www.siliconwives.com/products/enid-fortune-teller-sex-doll,secondary,167.0,34.0,83.8,52.3,96.0,,,silicone,1699.0,USD,0.545,1.602,The Empress,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ERIKA BUSTY BUTTERFLY SEX DOLL,Erika: Busty Butterfly Sex Doll,https://www.siliconwives.com/products/erika-busty-butterfly-sex-doll,secondary,167.0,34.0,83.8,52.3,96.0,,,silicone,1699.0,USD,0.545,1.602,The Empress,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,JUDY EUROPEAN ROYALTY SEX DOLL,Judy: European Royalty Sex Doll,https://www.siliconwives.com/products/judy-european-royalty-sex-doll,secondary,167.0,34.0,83.8,52.3,96.0,,,silicone,1699.0,USD,0.545,1.602,The Empress,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,LIZABETH EXOTIC DANCER SEX DOLL,Lizabeth: Exotic Dancer Sex Doll,https://www.siliconwives.com/products/lizabeth-exotic-dancer-sex-doll,secondary,167.0,34.0,83.8,52.3,96.0,,,silicone,1699.0,USD,0.545,1.602,The Empress,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,REMI AFTER SCHOOL SEX DOLL COPY,Remi: After School Sex Doll,https://www.siliconwives.com/products/remi-after-school-sex-doll-copy,secondary,167.0,34.0,83.8,52.3,96.0,,,silicone,1699.0,USD,0.545,1.602,The Empress,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,CORA FANCY GALA SEX DOLL,Cora: Fancy Gala Sex Doll,https://www.siliconwives.com/products/cora-fancy-gala-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,GIUSTA JAZZ SINGER SEX DOLL,Giusta: Jazz Singer Sex Doll,https://www.siliconwives.com/products/giusta-jazz-singer-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,HAILEY TEEN NEXTDOOR SEX DOLL,Hailey: Teen Nextdoor Sex Doll,https://www.siliconwives.com/products/hailey-teen-nextdoor-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,JACK PERKY TEEN SEX DOLL,Jack: Perky Teen Sex Doll,https://www.siliconwives.com/products/jack-perky-teen-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,SIENNA ANGELIC TEEN SEX DOLL,Sienna: Angelic Teen Sex Doll,https://www.siliconwives.com/products/sienna-angelic-teen-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,SKYLAR MILF NEXTDOOR SEX DOLL,Skylar: MILF Nextdoor Sex Doll,https://www.siliconwives.com/products/skylar-milf-nextdoor-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,SOFIA SPRING BREAK SEX DOLL,Sofia: Spring Break Sex Doll,https://www.siliconwives.com/products/sofia-spring-break-sex-doll,secondary,168.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ALANI PINK LADY SEX DOLL,Alani: Pink Lady Sex Doll,https://www.siliconwives.com/products/alani-pink-lady-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ALINA BUXOM BRUNETTE SEX DOLL,Alina: Buxom Brunette Sex Doll,https://www.siliconwives.com/products/alina-buxom-brunette-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,DITA CURVY RED HEAD SEX DOLL,Dita: Curvy Red Head Sex Doll,https://www.siliconwives.com/products/dita-curvy-red-head-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ELVIRA CLUB DANCER SEX DOLL,Elvira: Club Dancer Sex Doll,https://www.siliconwives.com/products/elvira-club-dancer-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,JASMINA PIERCING GAZE SEX DOLL,Jasmina: Piercing Gaze Sex Doll,https://www.siliconwives.com/products/jasmina-piercing-gaze-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,MAZENA BLONDE LINGERIE MODEL SEX DOLL,Mazena: Blonde Lingerie Model Sex Doll,https://www.siliconwives.com/products/mazena-blonde-lingerie-model-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,PERLA PORN AUDITION SEX DOLL,Perla: Porn Audition Sex Doll,https://www.siliconwives.com/products/perla-porn-audition-sex-doll,secondary,169.0,50.0,89.9,69.8,97.0,,,silicone,1699.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,CLAIRE SEXY PIGTAILS SEX DOLL,Claire: Sexy Pigtails Sex Doll,https://www.siliconwives.com/products/claire-sexy-pigtails-sex-doll,secondary,170.0,31.75,76.2,55.9,88.9,,,silicone,1499.0,USD,0.629,1.363,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,CORDELIA COUNTRY CUTIE SEX DOLL,Cordelia: Country Cutie Sex Doll,https://www.siliconwives.com/products/cordelia-country-cutie-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ISLADORA NAUGHTY BRAT SEX DOLL,Isladora: Naughty Brat Sex Doll,https://www.siliconwives.com/products/isladora-naughty-brat-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,JOSY HIP HOP DANCER SEX DOLL,Josy: Hip Hop Dancer Sex Doll,https://www.siliconwives.com/products/josy-hip-hop-dancer-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,LAURA CROFT SEXY RAIDER SEX DOLL,Laura Croft: Sexy Raider Sex Doll,https://www.siliconwives.com/products/laura-croft-sexy-raider-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,PAIGE BLONDE BRIDESMAID SEX DOLL,Paige: Blonde Bridesmaid Sex Doll,https://www.siliconwives.com/products/paige-blonde-bridesmaid-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,TEO PURPLE BUNNY SEX DOLL,Teo: Purple Bunny Sex Doll,https://www.siliconwives.com/products/teo-purple-bunny-sex-doll,secondary,170.0,30.8,89.9,69.8,97.0,,,silicone,1799.0,USD,0.72,1.288,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +Dime Doll,ELEANOR NAUGHTY HOUSEKEEPER SEX DOLL,Eleanor: Naughty Housekeeper Sex Doll,https://www.siliconwives.com/products/eleanor-naughty-housekeeper-sex-doll,secondary,171.0,39.0,87.9,58.4,98.3,,,silicone,1699.0,USD,0.594,1.505,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,CAMILIA PRETTY MOUTH SEX DOLL,Camilia: Pretty Mouth Sex Doll,https://www.siliconwives.com/products/camilia-pretty-mouth-sex-doll,secondary,172.0,46.0,94.5,66.0,105.9,,,silicone,1699.0,USD,0.623,1.432,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,KATHERINE GOLDEN GODDESS SEX DOLL,Katherine: Golden Goddess Sex Doll,https://www.siliconwives.com/products/katherine-golden-goddess-sex-doll,secondary,172.0,29.75,77.0,53.1,86.4,,,silicone,1399.0,USD,0.615,1.45,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Dime Doll,NARA TANNED BABE SEX DOLL,Nara: Tanned Babe Sex Doll,https://www.siliconwives.com/products/nara-tanned-babe-sex-doll,secondary,172.0,27.8,77.2,50.8,78.7,,,silicone,1399.0,USD,0.645,1.52,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,BUTTERCUP READY TO SHIP,Buttercup: Ready To Ship,https://www.siliconwives.com/products/buttercup-ready-to-ship,secondary,157.0,54.0,93.0,62.0,105.9,,,hybrid,1199.0,USD,0.585,1.5,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,ARIA READY TO SHIP,Aria: Ready To Ship,https://www.siliconwives.com/products/aria-ready-to-ship,secondary,158.0,34.0,78.0,50.0,85.6,,,hybrid,1199.0,USD,0.584,1.56,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,EMBER READY TO SHIP,Ember: Ready To Ship,https://www.siliconwives.com/products/ember-ready-to-ship,secondary,158.0,34.0,78.0,50.0,85.6,,,hybrid,1199.0,USD,0.584,1.56,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,FIG READY TO SHIP,Fig: Ready To Ship,https://www.siliconwives.com/products/fig-ready-to-ship,secondary,158.0,34.0,78.0,50.0,85.6,,,hybrid,1199.0,USD,0.584,1.56,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,HONEY READY TO SHIP,Honey: Ready To Ship,https://www.siliconwives.com/products/honey-ready-to-ship,secondary,158.0,34.0,78.0,50.0,85.6,,,hybrid,1199.0,USD,0.584,1.56,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,MAPLE READY TO SHIP,Maple: Ready To Ship,https://www.siliconwives.com/products/maple-ready-to-ship,secondary,158.0,34.0,78.0,50.0,85.6,,,hybrid,1199.0,USD,0.584,1.56,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,ADETTE READY TO SHIP,Adette: Ready To Ship,https://www.siliconwives.com/products/adette-ready-to-ship,secondary,166.0,34.0,73.7,50.3,81.3,,,hybrid,1199.0,USD,0.619,1.465,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,RUE READY TO SHIP,Rue: Ready To Ship,https://www.siliconwives.com/products/rue-ready-to-ship,secondary,166.0,34.0,73.7,50.3,81.3,,,hybrid,1199.0,USD,0.619,1.465,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,ANELIS READY TO SHIP,Anelis: Ready To Ship,https://www.siliconwives.com/products/anelis-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,ELARA READY TO SHIP,Elara: Ready To Ship,https://www.siliconwives.com/products/elara-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,JADEY READY TO SHIP,Jadey: Ready To Ship,https://www.siliconwives.com/products/jadey-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,SELINE READY TO SHIP,Seline: Ready To Ship,https://www.siliconwives.com/products/seline-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,TORIN READY TO SHIP,Torin: Ready To Ship,https://www.siliconwives.com/products/torin-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lilydoll,VANTA READY TO SHIP,Vanta: Ready To Ship,https://www.siliconwives.com/products/vanta-ready-to-ship,secondary,168.0,41.0,86.9,61.0,90.9,,,hybrid,1299.0,USD,0.671,1.425,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,AMELI PINK PIXIE SEX DOLL,Ameli: Pink Pixie Sex Doll,https://www.siliconwives.com/products/ameli-pink-pixie-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ANGELA NATURE PHOTOGRAPHER SEX DOLL,Angela: Nature Photographer Sex Doll,https://www.siliconwives.com/products/angela-nature-photographer-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,CELINA FINE ART STUDENT SEX DOLL,Celina: Fine Art Student Sex Doll,https://www.siliconwives.com/products/celina-fine-art-student-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,GIGI CUTE TEA PARTY SEX DOLL,Gigi: Cute Tea Party Sex Doll,https://www.siliconwives.com/products/gigi-cute-tea-party-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,GIGI READY TO SHIP,Gigi: Ready To Ship,https://www.siliconwives.com/products/gigi-ready-to-ship,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,1674.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JACQUELINE PUNK ROCKER SEX DOLL,Jacqueline: Punk Rocker Sex Doll,https://www.siliconwives.com/products/jacqueline-punk-rocker-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,LETITIA BAD STUDENT SEX DOLL,Letitia: Bad Student Sex Doll,https://www.siliconwives.com/products/letitia-bad-student-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,MABEL FUN COSPLAY SEX DOLL,Mabel: Fun Cosplay Sex Doll,https://www.siliconwives.com/products/mabel-fun-cosplay-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,PHOEBE CUTE JAPANESE SEX DOLL,Phoebe: Cute Japanese Sex Doll,https://www.siliconwives.com/products/phoebe-cute-japanese-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,POPPY BED TIME SEX DOLL,Poppy: Bed Time Sex Doll,https://www.siliconwives.com/products/poppy-bed-time-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,SOPHIA FOREST ELF SEX DOLL,Sophia: Forest Elf Sex Doll,https://www.siliconwives.com/products/sophia-forest-elf-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,SUSAN CUTE SHY SEX DOLL,Susan: Cute Shy Sex Doll,https://www.siliconwives.com/products/susan-cute-shy-sex-doll,secondary,150.0,26.0,71.4,56.4,79.0,,,silicone,2499.0,USD,0.714,1.266,The Muse,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,THERESA FUN ASIAN TEEN SEX DOLL,Theresa: Fun Asian Teen Sex Doll,https://www.siliconwives.com/products/theresa-fun-asian-teen-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,TINA CHINESE TEEN SEX DOLL,Tina: Chinese Teen Sex Doll,https://www.siliconwives.com/products/tina-chinese-teen-sex-doll,secondary,150.0,27.0,77.0,53.1,81.0,,,silicone,2499.0,USD,0.656,1.45,The Sculpt,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,CAMILA PINK PRINCESS SEX DOLL,Camila: Pink Princess Sex Doll,https://www.siliconwives.com/products/camila-pink-princess-sex-doll,secondary,151.0,25.0,78.0,48.0,77.0,,,,2599.0,USD,0.623,1.625,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,LANTHE ROCK N ROLL SEX DOLL,Lanthe: Rock n Roll Sex Doll,https://www.siliconwives.com/products/lanthe-rock-n-roll-sex-doll,secondary,159.0,27.0,71.1,50.0,79.0,,,,2599.0,USD,0.633,1.422,The Classic,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,FANNY BUSTY RED HEAD SEX DOLL,Fanny: Busty Red Head Sex Doll,https://www.siliconwives.com/products/fanny-busty-red-head-sex-doll,secondary,160.0,28.0,80.0,56.9,87.1,,,silicone,2499.0,USD,0.653,1.406,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,AALIYAH CURVY BLACK GIRL SEX DOLL,Aaliyah: Curvy Black Girl Sex Doll,https://www.siliconwives.com/products/aaliyah-curvy-black-girl-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,BELINDA FULL FIGURED BLONDE SEX DOLL,Belinda: Full-Figured Blonde Sex Doll,https://www.siliconwives.com/products/belinda-full-figured-blonde-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,BELINDA READY TO SHIP,Belinda: Ready To Ship,https://www.siliconwives.com/products/belinda-ready-to-ship,secondary,162.0,40.5,94.5,59.9,102.6,,,,1674.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JEZEBEL VOLUPTUOUS BLONDE SEX DOLL,Jezebel: Voluptuous Blonde Sex Doll,https://www.siliconwives.com/products/jezebel-voluptuous-blonde-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JOELLE ATLANTA STRIPPER SEX DOLL,Joelle: Atlanta Stripper Sex Doll,https://www.siliconwives.com/products/joelle-atlanta-stripper-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,NIA PLUMP TAN SEX DOLL,Nia: Plump Secretary Sex Doll,https://www.siliconwives.com/products/nia-plump-tan-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,NIA READY TO SHIP,Nia: Ready To Ship,https://www.siliconwives.com/products/nia-ready-to-ship,secondary,162.0,40.5,94.5,59.9,102.6,,,,1674.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,NORMA CURVY BLONDE SEX DOLL,Norma: Curvy Blonde Sex Doll,https://www.siliconwives.com/products/norma-curvy-blonde-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,NORMA READY TO SHIP,Norma: Ready To Ship,https://www.siliconwives.com/products/norma-ready-to-ship,secondary,162.0,40.5,94.5,59.9,102.6,,,,1674.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,OLIVE SEXY BRIDESMAID SEX DOLL,Olive: Busty Bridesmaid Sex Doll,https://www.siliconwives.com/products/olive-sexy-bridesmaid-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ZURI CURVY RICH GIRL SEX DOLL,Zuri: Curvy Rich Girl Sex Doll,https://www.siliconwives.com/products/zuri-curvy-rich-girl-sex-doll,secondary,162.0,40.5,94.5,59.9,102.6,,,,2599.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ZURI READY TO SHIP,Zuri: Ready To Ship,https://www.siliconwives.com/products/zuri-ready-to-ship,secondary,162.0,40.5,94.5,59.9,102.6,,,,1674.0,USD,0.584,1.578,The Empress,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,CINDY SEXY PROFESSOR SEX DOLL,Cindy: Sexy Professor Sex Doll,https://www.siliconwives.com/products/cindy-sexy-professor-sex-doll,secondary,163.0,37.0,83.1,55.9,91.9,,,silicone,2499.0,USD,0.608,1.487,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,VICKY BEACH BABE SEX DOLL,Vicky: Beach Babe Sex Doll,https://www.siliconwives.com/products/vicky-beach-babe-sex-doll,secondary,163.0,37.0,83.1,55.9,91.9,,,silicone,2499.0,USD,0.608,1.487,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,COCO FASHION INTERN SEX DOLL,Coco: Fashion Intern Sex Doll,https://www.siliconwives.com/products/coco-fashion-intern-sex-doll,secondary,164.0,38.0,86.6,51.6,87.9,,,silicone,2599.0,USD,0.587,1.678,The Siren,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,LINDA BUBBLE PARTY SEX DOLL,Linda: Bubble Party Sex Doll,https://www.siliconwives.com/products/linda-bubble-party-sex-doll,secondary,164.0,45.0,86.6,55.9,89.9,,,silicone,2599.0,USD,0.622,1.549,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,LOLLY BUSTY CUTE TEEN SEX DOLL,Lolly: Busty Cute Teen Sex Doll,https://www.siliconwives.com/products/lolly-busty-cute-teen-sex-doll,secondary,164.0,38.0,86.6,51.6,87.9,,,silicone,2599.0,USD,0.587,1.678,The Siren,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ANDREA SPORTY FIT SEX DOLL,Andrea: Sporty Fit Sex Doll,https://www.siliconwives.com/products/andrea-sporty-fit-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,ANN HOT YOGA SEX DOLL,Ann: Hot Yoga Sex Doll,https://www.siliconwives.com/products/ann-hot-yoga-sex-doll,secondary,166.0,39.5,84.6,63.5,94.0,,,,2599.0,USD,0.676,1.332,The Muse,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ANN READY TO SHIP,Ann: Ready To Ship,https://www.siliconwives.com/products/ann-ready-to-ship,secondary,166.0,39.5,84.6,63.5,94.0,,,,1674.0,USD,0.676,1.332,The Muse,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,BONNIE PHOTOGRAPHY CLUB SEX DOLL,Bonnie: Photography Club Sex Doll,https://www.siliconwives.com/products/bonnie-photography-club-sex-doll,secondary,166.0,41.0,89.4,60.5,94.0,,,,2599.0,USD,0.644,1.478,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,BONNIE READY TO SHIP,Bonnie: Ready To Ship,https://www.siliconwives.com/products/bonnie-ready-to-ship,secondary,166.0,41.0,89.4,60.5,94.0,,,,1674.0,USD,0.644,1.478,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,BRIANNA SEXY MMA SEX DOLL,Brianna: Sexy MMA Sex Doll,https://www.siliconwives.com/products/brianna-sexy-mma-sex-doll,secondary,166.0,43.0,84.6,55.1,90.9,,,,2599.0,USD,0.606,1.535,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,DOREEN NETFLIX AND CHILL SEX DOLL,Doreen: Netflix and Chill Sex Doll,https://www.siliconwives.com/products/doreen-netflix-and-chill-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,DORIS ASIAN SECRETARY SEX DOLL,Doris: Asian Secretary Sex Doll,https://www.siliconwives.com/products/doris-asian-secretary-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,EILEEN SULTRY PALE SKIN SEX DOLL,Eileen: Sultry Pale Skin Sex Doll,https://www.siliconwives.com/products/eileen-sultry-pale-skin-sex-doll,secondary,166.0,39.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,GIANNA GOTH ROCKER SEX DOLL,Gianna: Goth Rocker Sex Doll,https://www.siliconwives.com/products/gianna-goth-rocker-sex-doll,secondary,166.0,39.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,GRACE CAPTIVATING EYES SEX DOLL,Grace: Captivating Eyes Sex Doll,https://www.siliconwives.com/products/grace-captivating-eyes-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,HEATHER SEXY DJ SEX DOLL,Heather: Sexy DJ Sex Doll,https://www.siliconwives.com/products/heather-sexy-dj-sex-doll,secondary,166.0,39.5,84.6,55.1,90.9,,,,2499.0,USD,0.606,1.535,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JENNIFER MAGICIANS ASSISTANT SEX DOLL,Jennifer: Magician's Assistant Sex Doll,https://www.siliconwives.com/products/jennifer-magicians-assistant-sex-doll,secondary,166.0,43.0,84.6,57.7,90.9,,,,2599.0,USD,0.635,1.466,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JOAN REAL ESTATE AGENT SEX DOLL,Joan: Real Estate Agent Sex Doll,https://www.siliconwives.com/products/joan-real-estate-agent-sex-doll,secondary,166.0,39.5,84.6,55.1,90.9,,,,2499.0,USD,0.606,1.535,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JOANNA CAMPING FLING SEX DOLL,Joanna: Camping Fling Sex Doll,https://www.siliconwives.com/products/joanna-camping-fling-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,JOANNA READY TO SHIP,Joanna: Ready To Ship,https://www.siliconwives.com/products/joanna-ready-to-ship,secondary,166.0,38.0,81.0,55.9,91.9,,,,1674.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,JUDY RICH CHINESE GIRL SEX DOLL,Judy: Rich Chinese Girl Sex Doll,https://www.siliconwives.com/products/judy-rich-chinese-girl-sex-doll,secondary,166.0,43.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,KAMARI READY TO SHIP,Kamari: Ready To Ship,https://www.siliconwives.com/products/kamari-ready-to-ship,secondary,166.0,38.0,81.0,55.9,91.9,,,,1674.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,KAMARI SEXY LIPS SEX DOLL,Kamari: Sexy Lips Sex Doll,https://www.siliconwives.com/products/kamari-sexy-lips-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,KYLIE SHANGHAI ESCORT SEX DOLL,Kylie: Shanghai Escort Sex Doll,https://www.siliconwives.com/products/kylie-shanghai-escort-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,MAY EMPERORS MISTRESS SEX DOLL,May: Emperor's Mistress Sex Doll,https://www.siliconwives.com/products/may-emperors-mistress-sex-doll,secondary,166.0,43.0,84.6,57.7,90.9,,,,2599.0,USD,0.635,1.466,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,NANCY WHIPS AND CHAINS GIRL SEX DOLL,Nancy: Whips and Chains Girl Sex Doll,https://www.siliconwives.com/products/nancy-whips-and-chains-girl-sex-doll,secondary,166.0,43.0,84.6,55.1,90.9,,,,2599.0,USD,0.606,1.535,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,REBECA READY TO SHIP,Rebeca: Ready To Ship,https://www.siliconwives.com/products/rebeca-ready-to-ship,secondary,166.0,39.5,84.6,63.5,94.0,,,,1674.0,USD,0.676,1.332,The Muse,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,REBECA SULTRY LATINA SEX DOLL,Rebeca: Sultry Latina Sex Doll,https://www.siliconwives.com/products/rebeca-sultry-latina-sex-doll,secondary,166.0,39.5,84.6,63.5,94.0,,,,2599.0,USD,0.676,1.332,The Muse,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,ROSE READY TO SHIP,Rose: Ready To Ship,https://www.siliconwives.com/products/rose-ready-to-ship,secondary,166.0,41.0,81.0,55.9,91.9,,,,1674.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,ROSE SUNSET ROMANCE SEX DOLL,Rose: Sunset Romance Sex Doll,https://www.siliconwives.com/products/rose-sunset-romance-sex-doll,secondary,166.0,41.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,SAMMY READY TO SHIP,Sammy: Ready To Ship,https://www.siliconwives.com/products/sammy-ready-to-ship,secondary,166.0,38.0,81.0,55.9,91.9,,,,1674.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,SAMMY SEXY CEO SEX DOLL,Sammy: Sexy CEO Sex Doll,https://www.siliconwives.com/products/sammy-sexy-ceo-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,SEREN TEEN BRAT SEX DOLL,Seren: Teen Brat Sex Doll,https://www.siliconwives.com/products/seren-teen-brat-sex-doll,secondary,166.0,39.5,84.6,55.1,90.9,,,,2499.0,USD,0.606,1.535,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,VICTORIA MATURE SEDUCTRESS SEX DOLL,Victoria: Mature Seductress Sex Doll,https://www.siliconwives.com/products/victoria-mature-seductress-sex-doll,secondary,166.0,39.5,84.6,63.5,94.0,,,,2499.0,USD,0.676,1.332,The Muse,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +MD Doll,VIONA PINK TREAT SEX DOLL,Viona: Pink Treat Sex Doll,https://www.siliconwives.com/products/viona-pink-treat-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,ZUKI EXTRA CREDIT SEX DOLL,Zuki: Extra Credit Sex Doll,https://www.siliconwives.com/products/zuki-extra-credit-sex-doll,secondary,166.0,38.0,81.0,55.9,91.9,,,,2599.0,USD,0.608,1.449,The Sculpt,manual-review,Nearest family center outside both range bands,Extracted from Shopify product body_html via SiliconWives +MD Doll,JEANE BROWN GODDESS SEX DOLL,Jeane: Brown Goddess Sex Doll,https://www.siliconwives.com/products/jeane-brown-goddess-sex-doll,secondary,167.0,43.0,88.9,64.0,114.3,,,silicone,2599.0,USD,0.56,1.389,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,JEANE READY TO SHIP,Jeane: Ready To Ship,https://www.siliconwives.com/products/jeane-ready-to-ship,secondary,167.0,43.0,88.9,64.0,114.3,,,silicone,1674.0,USD,0.56,1.389,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +MD Doll,IRISSA FANTASY ELF SEX DOLL,Irissa: Fantasy Elf Sex Doll,https://www.siliconwives.com/products/irissa-fantasy-elf-sex-doll,secondary,168.0,31.5,83.1,53.1,84.6,,,silicone,2599.0,USD,0.628,1.565,The Icon,exact,Both WHR and BWR fall inside the family range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,KAILANI BIG TIT ASIAN SEX DOLL,Kailani: Big Tit Asian Sex Doll,https://www.siliconwives.com/products/kailani-big-tit-asian-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,KAILANI READY TO SHIP,Kailani: Ready To Ship,https://www.siliconwives.com/products/kailani-ready-to-ship,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2599.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,KASUMI JAPANESE SWIMSUIT SEX DOLL,Kasumi: Japanese Swimsuit Sex Doll,https://www.siliconwives.com/products/kasumi-japanese-swimsuit-sex-doll,secondary,159.0,43.0,82.8,61.0,100.1,,,silicone,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,LAGUNA OILED UP STRIPPER SEX DOLL,Laguna: Oiled Up Stripper Sex Doll,https://www.siliconwives.com/products/laguna-oiled-up-stripper-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,LISHA SLUTTY EGIRL SEX DOLL,Lisha: Slutty eGirl Sex Doll,https://www.siliconwives.com/products/lisha-slutty-egirl-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,LUELLA COUNTRY GIRL SEX DOLL,Luella: Country Girl Sex Doll,https://www.siliconwives.com/products/luella-country-girl-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MARLO READY TO SHIP,Marlo: Ready To Ship,https://www.siliconwives.com/products/marlo-ready-to-ship,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2599.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MARLO SEXY STREAMER SEX DOLL,Marlo: Sexy Streamer Sex Doll,https://www.siliconwives.com/products/marlo-sexy-streamer-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MONICA OIL MASSAGE SEX DOLL,Monica: Oil Massage Sex Doll,https://www.siliconwives.com/products/monica-oil-massage-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,NARI PRIVATE STUDY SEX DOLL,Nari: Private Study Sex Doll,https://www.siliconwives.com/products/nari-private-study-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,PEACE READY TO SHIP,Peace: Ready To Ship,https://www.siliconwives.com/products/peace-ready-to-ship,secondary,159.0,43.0,82.8,61.0,100.1,,,silicone,2599.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,PEACE SLUTTY SANTA SEX DOLL,Peace: Slutty Santa Sex Doll,https://www.siliconwives.com/products/peace-slutty-santa-sex-doll,secondary,159.0,43.0,82.8,61.0,100.1,,,hybrid,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,YUZU CURVY ASIAN SEX DOLL,Yuzu: Curvy Asian Sex Doll,https://www.siliconwives.com/products/yuzu-curvy-asian-sex-doll,secondary,159.0,43.0,96.0,63.0,109.0,,,silicone,2699.0,USD,0.578,1.524,The Icon,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,LANI SUMMER LOVE SEX DOLL,Lani: Summer Love Sex Doll,https://www.siliconwives.com/products/lani-summer-love-sex-doll,secondary,161.0,30.2,79.0,56.9,91.9,,,silicone,2699.0,USD,0.619,1.388,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MEI MEI LOVING TEEN SEX DOLL,Mei Mei: Loving Teen Sex Doll,https://www.siliconwives.com/products/mei-mei-loving-teen-sex-doll,secondary,161.0,30.2,79.0,56.9,91.9,,,silicone,2699.0,USD,0.619,1.388,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,NAOMI BUSINESS TRIP SEX DOLL,Naomi: Business Trip Sex Doll,https://www.siliconwives.com/products/naomi-business-trip-sex-doll,secondary,161.0,30.2,79.0,56.9,91.9,,,silicone,2699.0,USD,0.619,1.388,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,ZOE FITNESS BABE SEX DOLL,Zoe: Fitness Babe Sex Doll,https://www.siliconwives.com/products/zoe-fitness-babe-sex-doll,secondary,161.0,30.2,79.0,56.9,91.9,,,silicone,2699.0,USD,0.619,1.388,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,BALIA ITALIAN LINGERIE SEX DOLL,Balia: Italian Lingerie Sex Doll,https://www.siliconwives.com/products/balia-italian-lingerie-sex-doll,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,DUSK READY TO SHIP,Dusk: Ready To Ship,https://www.siliconwives.com/products/dusk-ready-to-ship,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2599.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,DUSK WINTER COTTAGE SEX DOLL,Dusk: Winter Cottage Sex Doll,https://www.siliconwives.com/products/dusk-winter-cottage-sex-doll,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,EFFIE OFFICE AFFAIR SEX DOLL,Effie: Office Affair Sex Doll,https://www.siliconwives.com/products/effie-office-affair-sex-doll,secondary,165.0,43.0,82.8,61.0,100.1,,,hybrid,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,HAILEE SEDUCTIVE RED HEAD SEX DOLL,Hailee: Seductive Red Head Sex Doll,https://www.siliconwives.com/products/hailee-seductive-red-head-sex-doll,secondary,165.0,30.2,82.8,61.0,99.8,,,silicone,2699.0,USD,0.611,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MAIA ELEGANT BRUNETTE SEX DOLL,Maia: Elegant Brunette Sex Doll,https://www.siliconwives.com/products/maia-elegant-brunette-sex-doll,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MAIA READY TO SHIP,Maia: Ready To Ship,https://www.siliconwives.com/products/maia-ready-to-ship,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2599.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,NATALEE FUN SKI WEEKEND SEX DOLL,Natalee: Fun Ski Weekend Sex Doll,https://www.siliconwives.com/products/natalee-fun-ski-weekend-sex-doll,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2699.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,NATALEE READY TO SHIP,Natalee: Ready To Ship,https://www.siliconwives.com/products/natalee-ready-to-ship,secondary,165.0,43.0,82.8,61.0,100.1,,,silicone,2599.0,USD,0.609,1.357,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,ANAIS CHRISTMAS IN PARIS SEX DOLL,Anais: Christmas in Paris Sex Doll,https://www.siliconwives.com/products/anais-christmas-in-paris-sex-doll,secondary,167.0,39.0,77.0,59.9,91.9,,,hybrid,2699.0,USD,0.652,1.285,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,ANAIS TEEN BABYSITTER SEX DOLL,Anais: Teen Babysitter Sex Doll,https://www.siliconwives.com/products/anais-teen-babysitter-sex-doll,secondary,167.0,39.0,77.0,59.9,91.9,,,hybrid,2699.0,USD,0.652,1.285,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,BECKER BEDROOM ANGEL SEX DOLL,Becker: Bedroom Angel Sex Doll,https://www.siliconwives.com/products/becker-bedroom-angel-sex-doll,secondary,167.0,39.0,77.0,59.9,91.9,,,hybrid,2699.0,USD,0.652,1.285,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,JILIAN SUMMER LOVE SEX DOLL,Jilian: Summer Love Sex Doll,https://www.siliconwives.com/products/jilian-summer-love-sex-doll,secondary,167.0,39.0,77.0,59.9,91.9,,,hybrid,2699.0,USD,0.652,1.285,The Muse,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,JOAN FITNESS CHICK SEX DOLL,Joan: Fitness Chick Sex Doll,https://www.siliconwives.com/products/joan-fitness-chick-sex-doll,secondary,170.0,41.5,90.9,61.0,99.1,,,silicone,2699.0,USD,0.616,1.49,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MAYA HOT MOM SEX DOLL,Maya: Hot Mom Sex Doll,https://www.siliconwives.com/products/maya-hot-mom-sex-doll,secondary,170.0,41.5,90.9,61.0,99.1,,,silicone,2699.0,USD,0.616,1.49,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MAYA READY TO SHIP,Maya: Ready To Ship,https://www.siliconwives.com/products/maya-ready-to-ship,secondary,170.0,41.5,90.9,61.0,99.1,,,silicone,2599.0,USD,0.616,1.49,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,MIZUKI BANGKOK ESCORT SEX DOLL,Mizuki: Bangkok Escort Sex Doll,https://www.siliconwives.com/products/mizuki-bangkok-escort-sex-doll,secondary,170.0,41.5,90.9,61.0,99.1,,,silicone,2699.0,USD,0.616,1.49,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives +Lusandy Doll,NIKKY ORANGE BIKINI SEX DOLL,Nikky: Orange Bikini Sex Doll,https://www.siliconwives.com/products/nikky-orange-bikini-sex-doll,secondary,170.0,41.5,90.9,61.0,99.1,,,silicone,2699.0,USD,0.616,1.49,The Sculpt,near,Nearest family center with one ratio inside range,Extracted from Shopify product body_html via SiliconWives diff --git a/docs/research/competitor-family-coverage-matrix.md b/docs/research/competitor-family-coverage-matrix.md index 9a66d95..778fab0 100644 --- a/docs/research/competitor-family-coverage-matrix.md +++ b/docs/research/competitor-family-coverage-matrix.md @@ -2,8 +2,8 @@ This report maps accessible competitor body-style catalogues into the ZELEX six-family system so we can compare catalogue shape before the full ROI layer is written. -- Brands covered: 24 -- Body-style rows classified: 233 +- Brands covered: 30 +- Body-style rows classified: 495 - Source standard: public supplier catalogue pages with explicit measurements, classified against the current ZELEX family ranges ## Apples-to-Apples Signals @@ -13,6 +13,8 @@ This report maps accessible competitor body-style catalogues into the ZELEX six- | 6YE Premium | 100.0% (10/10) | 1490 | 1490-1990 | 100.0% | 0.0% | 100.0% | 70.0% | secondary:10 | | AS Doll | 100.0% (10/10) | 1993 | 1993-1993 | 100.0% | 0.0% | 100.0% | 50.0% | secondary:10 | | Angel Kiss | 100.0% (10/10) | 2390 | 2150-2390 | 100.0% | 100.0% | 0.0% | 50.0% | secondary:10 | +| Dime Doll | 100.0% (31/31) | 1699 | 1399-1799 | 100.0% | 100.0% | 0.0% | 58.1% | secondary:31 | +| FunWest | 100.0% (106/106) | 1599 | 1299-2499 | 100.0% | 46.2% | 53.8% | 78.3% | secondary:106 | | Game Lady | 100.0% (6/6) | 2590 | 2590-2590 | 100.0% | 100.0% | 0.0% | 100.0% | secondary:6 | | Gynoid | 100.0% (10/10) | 5391 | 4401-7038 | 100.0% | 100.0% | 0.0% | 100.0% | secondary:10 | | HR Doll | 100.0% (10/10) | 1890 | 1390-2190 | 100.0% | 90.0% | 10.0% | 60.0% | secondary:10 | @@ -24,10 +26,14 @@ This report maps accessible competitor body-style catalogues into the ZELEX six- | JY Doll | 100.0% (10/10) | 2340 | 1390-2390 | 100.0% | 60.0% | 40.0% | 80.0% | secondary:10 | | Jarliet | 100.0% (10/10) | 1558 | 1401-1715 | 100.0% | 0.0% | 100.0% | 100.0% | secondary:10 | | Jiusheng | 100.0% (8/8) | 2290 | 1490-2890 | 100.0% | 100.0% | 0.0% | 37.5% | secondary:8 | +| Lilydoll | 100.0% (14/14) | 1199 | 1199-1299 | 100.0% | 0.0% | 0.0% | 100.0% | secondary:14 | +| Lusandy Doll | 100.0% (35/35) | 2699 | 2599-2699 | 100.0% | 82.9% | 0.0% | 100.0% | secondary:35 | +| MD Doll | 100.0% (69/69) | 2599 | 1674-2599 | 100.0% | 33.3% | 0.0% | 72.5% | secondary:69 | | Piper Doll | 100.0% (10/10) | 1290 | 790-3090 | 100.0% | 90.0% | 10.0% | 70.0% | secondary:10 | | Real Lady | 100.0% (4/4) | 2975 | 2860-2990 | 100.0% | 100.0% | 0.0% | 100.0% | secondary:4 | | SE Doll | 100.0% (10/10) | 1690 | 1511-2990 | 100.0% | 20.0% | 80.0% | 80.0% | secondary:10 | | SM Doll | 100.0% (10/10) | 1763 | 1473-2283 | 100.0% | 0.0% | 100.0% | 70.0% | secondary:10 | +| Sanhui | 100.0% (7/7) | 2599 | 2499-3199 | 100.0% | 100.0% | 0.0% | 85.7% | secondary:7 | | Tayu | 100.0% (21/21) | 3800 | 1980-4700 | 100.0% | 85.7% | 0.0% | 81.0% | official:21 | | WM Doll | 100.0% (10/10) | 1694 | 1390-1799 | 100.0% | 0.0% | 100.0% | 80.0% | secondary:10 | | XT Doll | 100.0% (10/10) | 2190 | 1649-2390 | 100.0% | 100.0% | 0.0% | 90.0% | secondary:10 | @@ -42,6 +48,8 @@ This report maps accessible competitor body-style catalogues into the ZELEX six- | 6YE Premium | 10 | 0 | 0 | 3 | 1 | 3 | 3 | 60.0% | 150-173 cm | | AS Doll | 10 | 1 | 1 | 2 | 3 | 2 | 1 | 50.0% | 148-170 cm | | Angel Kiss | 10 | 0 | 2 | 5 | 0 | 0 | 3 | 80.0% | 157-172 cm | +| Dime Doll | 31 | 2 | 2 | 21 | 0 | 5 | 1 | 83.9% | 165-172 cm | +| FunWest | 106 | 0 | 40 | 38 | 10 | 1 | 17 | 73.6% | 150-168 cm | | Game Lady | 6 | 0 | 2 | 2 | 0 | 1 | 1 | 66.7% | 16-171 cm | | Gynoid | 10 | 5 | 0 | 1 | 0 | 0 | 4 | 90.0% | 155-180 cm | | HR Doll | 10 | 0 | 3 | 4 | 1 | 2 | 0 | 70.0% | 150-170 cm | @@ -53,10 +61,14 @@ This report maps accessible competitor body-style catalogues into the ZELEX six- | JY Doll | 10 | 0 | 0 | 2 | 5 | 2 | 1 | 70.0% | 157-171 cm | | Jarliet | 10 | 2 | 1 | 5 | 1 | 1 | 0 | 70.0% | 151-168 cm | | Jiusheng | 8 | 2 | 1 | 3 | 0 | 0 | 2 | 62.5% | 148-180 cm | +| Lilydoll | 14 | 6 | 1 | 0 | 0 | 5 | 2 | 78.6% | 157-168 cm | +| Lusandy Doll | 35 | 0 | 10 | 20 | 0 | 0 | 5 | 85.7% | 159-170 cm | +| MD Doll | 69 | 1 | 7 | 9 | 2 | 13 | 37 | 72.5% | 150-168 cm | | Piper Doll | 10 | 2 | 2 | 1 | 2 | 1 | 2 | 40.0% | 100-155 cm | | Real Lady | 4 | 0 | 1 | 1 | 0 | 2 | 0 | 75.0% | 150-170 cm | | SE Doll | 10 | 1 | 1 | 5 | 1 | 1 | 1 | 60.0% | 153-170 cm | | SM Doll | 10 | 0 | 0 | 4 | 3 | 1 | 2 | 70.0% | 140-175 cm | +| Sanhui | 7 | 1 | 3 | 1 | 1 | 0 | 1 | 57.1% | 163-168 cm | | Tayu | 21 | 1 | 5 | 9 | 1 | 0 | 5 | 66.7% | 88-170 cm | | WM Doll | 10 | 1 | 2 | 3 | 3 | 1 | 0 | 60.0% | 108-172 cm | | XT Doll | 10 | 0 | 3 | 3 | 0 | 1 | 3 | 60.0% | 153-165 cm | @@ -104,6 +116,22 @@ The following brands were crawled for catalogue inventory, but family classifica - Families present here but absent in ZELEX today: Sculpt. - Families missing from this brand's accessible catalogue: Classic, Siren, Empress. +### Dime Doll + +- Catalogue shape: 31 classified bodies across 5 active families, led by Muse (67.7%) and Empress (16.1%). +- Compared with ZELEX: top-two concentration is 83.9% versus ZELEX at 84.2%, so this catalogue is broader than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Muse, Empress. +- Families present here but absent in ZELEX today: Classic, Sculpt. +- Families missing from this brand's accessible catalogue: Siren. + +### FunWest + +- Catalogue shape: 106 classified bodies across 5 active families, led by Icon (37.7%) and Muse (35.8%). +- Compared with ZELEX: top-two concentration is 73.6% versus ZELEX at 84.2%, so this catalogue is broader than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Muse, Siren, Empress. +- Families present here but absent in ZELEX today: Sculpt. +- Families missing from this brand's accessible catalogue: Classic. + ### Game Lady - Catalogue shape: 6 classified bodies across 4 active families, led by Icon (33.3%) and Muse (33.3%). @@ -192,6 +220,30 @@ The following brands were crawled for catalogue inventory, but family classifica - Families present here but absent in ZELEX today: Classic, Sculpt. - Families missing from this brand's accessible catalogue: Siren, Empress. +### Lilydoll + +- Catalogue shape: 14 classified bodies across 4 active families, led by Classic (42.9%) and Empress (35.7%). +- Compared with ZELEX: top-two concentration is 78.6% versus ZELEX at 84.2%, so this catalogue is broader than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Empress. +- Families present here but absent in ZELEX today: Classic, Sculpt. +- Families missing from this brand's accessible catalogue: Muse, Siren. + +### Lusandy Doll + +- Catalogue shape: 35 classified bodies across 3 active families, led by Muse (57.1%) and Icon (28.6%). +- Compared with ZELEX: top-two concentration is 85.7% versus ZELEX at 84.2%, so this catalogue is narrower than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Muse. +- Families present here but absent in ZELEX today: Sculpt. +- Families missing from this brand's accessible catalogue: Classic, Siren, Empress. + +### MD Doll + +- Catalogue shape: 69 classified bodies across 6 active families, led by Sculpt (53.6%) and Empress (18.8%). +- Compared with ZELEX: top-two concentration is 72.5% versus ZELEX at 84.2%, so this catalogue is broader than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Muse, Siren, Empress. +- Families present here but absent in ZELEX today: Classic, Sculpt. +- Families missing from this brand's accessible catalogue: none. + ### Piper Doll - Catalogue shape: 10 classified bodies across 6 active families, led by Classic (20.0%) and Icon (20.0%). @@ -224,6 +276,14 @@ The following brands were crawled for catalogue inventory, but family classifica - Families present here but absent in ZELEX today: Sculpt. - Families missing from this brand's accessible catalogue: Classic, Icon. +### Sanhui + +- Catalogue shape: 7 classified bodies across 5 active families, led by Icon (42.9%) and Classic (14.3%). +- Compared with ZELEX: top-two concentration is 57.1% versus ZELEX at 84.2%, so this catalogue is broader than the current ZELEX spread. +- Family overlap with ZELEX: Icon, Muse, Siren. +- Families present here but absent in ZELEX today: Classic, Sculpt. +- Families missing from this brand's accessible catalogue: Empress. + ### Tayu - Catalogue shape: 21 classified bodies across 5 active families, led by Muse (42.9%) and Icon (23.8%). diff --git a/docs/research/independent-catalog-grouping-heatmap.md b/docs/research/independent-catalog-grouping-heatmap.md index b74001c..37b628b 100644 --- a/docs/research/independent-catalog-grouping-heatmap.md +++ b/docs/research/independent-catalog-grouping-heatmap.md @@ -11,7 +11,6 @@ Legend: darker symbols indicate larger counts within each line column. | Brand | full-body | torso | male | exclusive | house-brand | multi-brand | accessory | unknown | Strategy | |---|---:|---:|---:|---:|---:|---:|---:|---:|---| | WM Doll | 271 @ | 5 @ | 4 @ | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | -| ZELEX | 156 + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | SE Doll | 135 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | Irontech | 122 = | 2 = | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | FunWest | 107 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | @@ -41,72 +40,7 @@ Legend: darker symbols indicate larger counts within each line column. | Route | 0 | 0 | 0 | 0 | 0 | 0 | 1 . | 0 | Retail Aggregator | | Silicon Wives | 0 | 0 | 0 | 14 @ | 332 @ | 0 | 0 | 0 | Retail Aggregator | | Warm Doll | 0 | 0 | 0 | 0 | 0 | 0 | 9 @ | 0 | Retail Aggregator | - -## Full-Body Competitor Heatmap -Excludes retail aggregators and accessory-only catalogs; focuses on full-body competitor line architecture. - -| Brand | full-body | torso | male | unknown | Strategy | -|---|---:|---:|---:|---:|---| -| WM Doll | 271 @ | 5 @ | 4 @ | 0 | Catalog Depth Leader | -| ZELEX | 156 + | 0 | 0 | 0 | Catalog Depth Leader | -| SE Doll | 135 = | 0 | 0 | 0 | Catalog Depth Leader | -| Irontech | 122 = | 2 = | 0 | 0 | Catalog Depth Leader | -| FunWest | 107 = | 0 | 0 | 0 | Catalog Depth Leader | -| CY Doll | 83 - | 0 | 0 | 0 | Focused Midline | -| MD Doll | 69 : | 0 | 0 | 0 | Focused Midline | -| Real Lady | 64 : | 0 | 0 | 0 | Focused Midline | -| XT Doll | 50 : | 0 | 0 | 0 | Focused Midline | -| Angel Kiss | 49 : | 0 | 0 | 0 | Focused Midline | -| Starpery | 46 : | 1 : | 0 | 0 | Focused Midline | -| Dime Doll | 35 . | 0 | 0 | 0 | Focused Midline | -| Lusandy | 35 . | 0 | 0 | 0 | Focused Midline | -| YL Doll | 32 . | 0 | 1 : | 0 | Focused Midline | -| Jiusheng | 25 . | 0 | 0 | 0 | Focused Midline | -| 6Ye | 22 . | 1 : | 0 | 0 | Focused Midline | -| LilyDoll | 14 | 0 | 0 | 0 | Focused Midline | -| Sino Doll | 12 | 0 | 0 | 0 | Boutique Premium | -| Sanhui | 7 | 0 | 0 | 0 | Boutique Premium | -| Sigafun | 7 | 0 | 0 | 0 | Focused Midline | -| Arcana | 4 | 0 | 0 | 0 | Focused Midline | -| Cyber Girl | 4 | 0 | 0 | 0 | Focused Midline | -| SY Doll | 4 | 0 | 0 | 0 | Focused Midline | -| Magic Moment | 3 | 0 | 0 | 0 | Focused Midline | -| Qita | 2 | 1 : | 0 | 0 | Line Extension (torso/male) | -| AI Tech | 1 | 0 | 0 | 0 | Boutique Premium | -| JM Doll | 1 | 0 | 0 | 0 | Focused Midline | - -## Competitor Line Archetypes -Compact view of how each brand structures catalog depth, extensions, and price-ladder center. - -| Brand | Archetype | Full-body SKUs | Full-body share | Dominant price band | -|---|---|---:|---:|---| -| Sino Doll | Boutique Premium | 12 | 100.0% | 2500_3499 | -| Sanhui | Boutique Premium | 7 | 100.0% | 2500_3499 | -| AI Tech | Boutique Premium | 1 | 100.0% | 3500_plus | -| WM Doll | Catalog Depth Leader | 271 | 96.8% | 1200_1799 | -| ZELEX | Catalog Depth Leader | 156 | 100.0% | 1800_2499 | -| SE Doll | Catalog Depth Leader | 135 | 100.0% | 1800_2499 | -| Irontech | Catalog Depth Leader | 122 | 98.4% | 1800_2499 | -| FunWest | Catalog Depth Leader | 107 | 100.0% | 1200_1799 | -| CY Doll | Focused Midline | 83 | 100.0% | 1200_1799 | -| MD Doll | Focused Midline | 69 | 100.0% | 2500_3499 | -| Real Lady | Focused Midline | 64 | 100.0% | 2500_3499 | -| XT Doll | Focused Midline | 50 | 100.0% | 1800_2499 | -| Angel Kiss | Focused Midline | 49 | 100.0% | 1800_2499 | -| Starpery | Focused Midline | 46 | 97.9% | 1800_2499 | -| Dime Doll | Focused Midline | 35 | 100.0% | 1200_1799 | -| Lusandy | Focused Midline | 35 | 100.0% | 2500_3499 | -| YL Doll | Focused Midline | 32 | 97.0% | 1800_2499 | -| Jiusheng | Focused Midline | 25 | 100.0% | 1800_2499 | -| 6Ye | Focused Midline | 22 | 95.7% | 1800_2499 | -| LilyDoll | Focused Midline | 14 | 100.0% | lt_1200 | -| Sigafun | Focused Midline | 7 | 100.0% | 1200_1799 | -| Arcana | Focused Midline | 4 | 100.0% | 1200_1799 | -| Cyber Girl | Focused Midline | 4 | 100.0% | 1800_2499 | -| SY Doll | Focused Midline | 4 | 100.0% | 1800_2499 | -| Magic Moment | Focused Midline | 3 | 100.0% | 1800_2499 | -| JM Doll | Focused Midline | 1 | 100.0% | 1800_2499 | -| Qita | Line Extension (torso/male) | 2 | 66.7% | 1800_2499 | +| ZELEX | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 @ | Focused Midline | ## Price-Band Matrix diff --git a/docs/research/independent-catalog-grouping-matrix.csv b/docs/research/independent-catalog-grouping-matrix.csv index 47aeb19..f70cbd4 100644 --- a/docs/research/independent-catalog-grouping-matrix.csv +++ b/docs/research/independent-catalog-grouping-matrix.csv @@ -29,4 +29,4 @@ WM Doll,280,271,271,5,4,0,0,0,0,0,96.8,Catalog Depth Leader,4,232,44,0,0,0 Warm Doll,9,0,0,0,0,0,0,0,9,0,0.0,Retail Aggregator,8,1,0,0,0,0 XT Doll,50,50,50,0,0,0,0,0,0,0,100.0,Focused Midline,0,0,50,0,0,0 YL Doll,33,32,32,0,1,0,0,0,0,0,97.0,Focused Midline,0,2,31,0,0,0 -ZELEX,156,156,156,0,0,0,0,0,0,0,100.0,Catalog Depth Leader,1,40,102,13,0,0 +ZELEX,156,0,0,0,0,0,0,0,0,2,0.0,Focused Midline,1,40,102,13,0,0 diff --git a/scripts/analyze_independent_groupings.py b/scripts/analyze_independent_groupings.py index a9efbc2..4b35d24 100644 --- a/scripts/analyze_independent_groupings.py +++ b/scripts/analyze_independent_groupings.py @@ -26,9 +26,6 @@ OUT_CSV = ROOT / "docs" / "research" / "independent-catalog-grouping-matrix.csv" OUT_MD = ROOT / "docs" / "research" / "independent-catalog-grouping-heatmap.md" OUT_JSON = ROOT / "db" / "independent_catalog_groupings.json" -OUT_LINE_PNG = ROOT / "docs" / "research" / "independent-catalog-line-heatmap.png" -OUT_PRICE_PNG = ROOT / "docs" / "research" / "independent-catalog-price-heatmap.png" -OUT_PDR_BRIEF = ROOT / "docs" / "PDR-010-competitor-lineup-brief.md" LINE_COLUMNS = [ "full-body", @@ -50,7 +47,6 @@ ] HEAT_CHARS = " .:-=+*#%@" -ZELEX_FULL_BODY_LINES = {"Inspiration", "SLE", "ZFE"} def pct(part: int, whole: int) -> float: @@ -232,6 +228,9 @@ def main() -> None: for brand in brands: total = cur.execute("SELECT COUNT(*) c FROM products WHERE brand=?", (brand,)).fetchone()["c"] + full_body = cur.execute( + "SELECT COUNT(*) c FROM products WHERE brand=? AND line='full-body'", (brand,) + ).fetchone()["c"] median_price = cur.execute( "SELECT price_median FROM brand_summary WHERE brand=?", (brand,) ).fetchone() @@ -241,11 +240,8 @@ def main() -> None: for row in cur.execute( "SELECT line, COUNT(*) c FROM products WHERE brand=? GROUP BY line", (brand,) ): - line = normalize_line(brand, row["line"]) - line = line if line in line_counts else "unknown" - line_counts[line] += row["c"] - - full_body = line_counts["full-body"] + line = row["line"] if row["line"] in line_counts else "unknown" + line_counts[line] = row["c"] line_matrix.append( { @@ -285,12 +281,6 @@ def main() -> None: conn.close() - full_body_rows = [ - r - for r in line_matrix - if r["full_body_skus"] > 0 and r["strategy_group"] != "Retail Aggregator" - ] - OUT_CSV.parent.mkdir(parents=True, exist_ok=True) with OUT_CSV.open("w", newline="", encoding="utf-8") as f: fieldnames = [ @@ -315,6 +305,8 @@ def main() -> None: merged.update(price_by_brand[row["brand"]]) writer.writerow(merged) + max_line = max((row["total_products"] for row in line_matrix), default=1) + lines = [] lines.append("# Independent Catalog Groupings") lines.append("") @@ -350,43 +342,6 @@ def main() -> None: ) ) - lines.append("") - lines.append("## Full-Body Competitor Heatmap") - lines.append("Excludes retail aggregators and accessory-only catalogs; focuses on full-body competitor line architecture.") - lines.append("") - lines.append("| Brand | full-body | torso | male | unknown | Strategy |") - lines.append("|---|---:|---:|---:|---:|---|") - - fb_cols = ["full-body", "torso", "male", "unknown"] - fb_col_max = {k: max((r[k] for r in full_body_rows), default=1) for k in fb_cols} - - for row in sorted(full_body_rows, key=lambda r: (-r["full_body_skus"], r["brand"])): - cell = {} - for col in fb_cols: - c = row[col] - cell[col] = f"{c} {heat_char(c, fb_col_max[col])}" - lines.append( - "| {brand} | {full-body} | {torso} | {male} | {unknown} | {strategy} |".format( - brand=row["brand"], - strategy=row["strategy_group"], - **cell, - ) - ) - - lines.append("") - lines.append("## Competitor Line Archetypes") - lines.append("Compact view of how each brand structures catalog depth, extensions, and price-ladder center.") - lines.append("") - lines.append("| Brand | Archetype | Full-body SKUs | Full-body share | Dominant price band |") - lines.append("|---|---|---:|---:|---|") - - price_by_brand = {row["brand"]: row for row in price_matrix} - for row in sorted(full_body_rows, key=lambda r: (r["strategy_group"], -r["full_body_skus"], r["brand"])): - p = price_by_brand[row["brand"]] - lines.append( - f"| {row['brand']} | {row['strategy_group']} | {row['full_body_skus']} | {row['full_body_share_pct']}% | {dominant_price_band(p)} |" - ) - lines.append("") lines.append("## Price-Band Matrix") lines.append("") @@ -399,16 +354,12 @@ def main() -> None: OUT_MD.write_text("\n".join(lines) + "\n", encoding="utf-8") - write_png_heatmaps(line_matrix, price_matrix) - write_pdr_brief(line_matrix, full_body_rows, price_matrix, wm_row) - OUT_JSON.write_text( json.dumps( { "generated_from": str(DB_PATH.relative_to(ROOT)), "line_columns": LINE_COLUMNS, "line_matrix": line_matrix, - "full_body_competitor_matrix": full_body_rows, "price_matrix": price_matrix, "strategy_groups": sorted(strategies, key=lambda r: (r["strategy_group"], r["brand"])), }, diff --git a/scripts/build_competitor_catalog_taxonomy.py b/scripts/build_competitor_catalog_taxonomy.py index bf86c32..0ac1dad 100644 --- a/scripts/build_competitor_catalog_taxonomy.py +++ b/scripts/build_competitor_catalog_taxonomy.py @@ -80,9 +80,17 @@ def url(self) -> str: SupplierConfig("Game Lady", "game-lady"), SupplierConfig("Gynoid", "gynoid"), # ZELEX via Dollstudio (cross-check against local baseline) - SupplierConfig("ZELEX (Dollstudio)", "zelex"), + SupplierConfig("ZELEX", "zelex", source_label="Dollstudio supplier catalogue (ZELEX cross-check)"), ] +BRAND_ALIASES = { + "ZELEX (Dollstudio)": "ZELEX", +} + + +def canonical_brand(brand: str) -> str: + return BRAND_ALIASES.get(brand, brand) + # --------------------------------------------------------------------------- # Geographic / market metadata — encoded from public brand knowledge # --------------------------------------------------------------------------- @@ -183,10 +191,36 @@ def url(self) -> str: "primary_markets": ["NA", "EU", "APAC"], "tier": "mid", "tier_usd_floor": 1600, "segment": "silicone_tpe", "market_notes": "Volume mid-tier; moderate Western distribution"}, - "ZELEX (Dollstudio)": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", - "primary_markets": ["NA", "EU", "AU", "APAC"], - "tier": "premium", "tier_usd_floor": 2800, - "segment": "silicone", "market_notes": "Same brand as baseline; Dollstudio cross-check"}, + "Sanhui": {"country": "China", "hq_city": "Shenzhen", "region": "Asia", + "primary_markets": ["NA", "EU"], + "tier": "premium", "tier_usd_floor": 3000, + "segment": "silicone", + "market_notes": "Full-silicone premium brand; boutique catalogue; strong realism reputation"}, + "FunWest": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA", "EU"], + "tier": "budget-mid", "tier_usd_floor": 1000, + "segment": "tpe", + "market_notes": "High-volume TPE; broad body range; strong reseller distribution"}, + "Dime Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA"], + "tier": "mid", "tier_usd_floor": 1500, + "segment": "silicone", + "market_notes": "Silicone-focused mid brand; growing NA DTC presence via SiliconWives"}, + "Lilydoll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA", "EU"], + "tier": "mid", "tier_usd_floor": 1500, + "segment": "silicone_tpe", + "market_notes": "Plush-skew body range; Empress/BBW-adjacent catalogue"}, + "MD Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA", "EU"], + "tier": "mid", "tier_usd_floor": 1400, + "segment": "tpe", + "market_notes": "Volume TPE brand; broad height and cup range"}, + "Lusandy Doll": {"country": "China", "hq_city": "Zhongshan", "region": "Asia", + "primary_markets": ["NA", "EU"], + "tier": "mid", "tier_usd_floor": 1400, + "segment": "silicone_tpe", + "market_notes": "Mid-tier multi-material catalogue; moderate Western distribution"}, } # Market tier definitions for the market analysis table @@ -201,6 +235,8 @@ def url(self) -> str: # Geographic market segments referenced in BRAND_GEO MARKET_REGIONS = [ + {"code": "US", "label": "United States", "key_countries": "USA", + "notes": "Strict US-only market view (distinct from wider North America rollup)"}, {"code": "NA", "label": "North America", "key_countries": "USA, Canada", "notes": "Largest single revenue market; highest price tolerance; RealDoll, Irontech, Tayu strong here"}, {"code": "EU", "label": "Europe", "key_countries": "Germany, UK, France, Netherlands", @@ -434,7 +470,7 @@ def scrape_supplier(config: SupplierConfig, session: requests.Session, families: rows.append( { - "brand": config.brand, + "brand": canonical_brand(config.brand), "source_url": url, "source_tier": config.source_tier, "source_label": config.source_label, @@ -696,6 +732,127 @@ def capture_realdoll_inventory(session: requests.Session) -> list[dict]: return inventory +# --------------------------------------------------------------------------- +# SiliconWives Shopify adapter — brands not available via Dollstudio +# --------------------------------------------------------------------------- + +@dataclass(frozen=True) +class SiliconWivesConfig: + brand: str + collection_slug: str + min_height_cm: float = 100.0 + + @property + def url(self) -> str: + return f"https://www.siliconwives.com/collections/{self.collection_slug}/products.json?limit=250" + + +SW_COLLECTIONS = [ + SiliconWivesConfig("Sanhui", "sanhui-doll-brand"), + SiliconWivesConfig("FunWest", "shop-funwest-doll"), + SiliconWivesConfig("Dime Doll", "shop-dime-doll"), + SiliconWivesConfig("Lilydoll", "shop-lilydoll-brand"), + SiliconWivesConfig("MD Doll", "shop-md-doll-brand-sex-dolls"), + SiliconWivesConfig("Lusandy Doll", "shop-lusandy-doll"), +] + +# Strict US market evidence is tied to brands observed in US-facing channels used by this pipeline. +US_MARKET_BRANDS = {canonical_brand(s.brand) for s in SUPPLIERS} | {canonical_brand(s.brand) for s in SW_COLLECTIONS} | {"RealDoll"} + + +def with_us_market_code(brand_name: str, markets: list[str]) -> list[str]: + out = list(markets or []) + if canonical_brand(brand_name) in US_MARKET_BRANDS and "US" not in out: + out.append("US") + return out + + +def _sw_body_html_measurements(body_html: str) -> tuple[float | None, ...]: + """Extract (height_cm, bust_cm, waist_cm, hip_cm, weight_kg, cup) from SW body_html.""" + text = normalize_space(BeautifulSoup(body_html, "html.parser").get_text(" ", strip=True)) + + def get(pattern: str) -> float | None: + m = re.search(pattern, text, re.IGNORECASE) + if not m: + return None + val = float(m.group(1)) + if m.lastindex >= 2 and m.group(2): + return float(m.group(2)) + return round(val * 2.54, 1) if val < 60 else val + + height = get(r"Height:\s*[\d.]+\s*(?:feet[^(]*)?\(?([\d.]+)\s*cm") or get(r"Height:\s*([\d.]+)\s*cm") + bust = get(r"Bust:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Bust:\s*([\d.]+)\s*(?:cm|inch)") + waist = get(r"Waist:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Waist:\s*([\d.]+)\s*(?:cm|inch)") + hips = get(r"Hips?:\s*([\d.]+)\s*inches?\s*[\(/]?\s*([\d.]+)\s*cm") or get(r"Hips?:\s*([\d.]+)\s*(?:cm|inch)") + weight_m = re.search(r"Weight:\s*[\d.]+\s*lbs?\s*[\(/]?\s*([\d.]+)\s*kg", text, re.I) + weight = float(weight_m.group(1)) if weight_m else None + cup_m = re.search(r"\b([A-M])\s*[Cc]up\b", text) + cup = cup_m.group(1) if cup_m else None + return height, bust, waist, hips, weight, cup + + +def scrape_siliconwives(config: SiliconWivesConfig, session: requests.Session, families: list[dict]) -> list[dict]: + resp = session.get(config.url, headers=HEADERS, timeout=30) + resp.raise_for_status() + products = resp.json().get("products", []) + rows = [] + seen_codes: set[str] = set() + for prod in products: + body_html = prod.get("body_html", "") + height, bust, waist, hips, weight, cup = _sw_body_html_measurements(body_html) + if not (height and bust and waist and hips): + continue + if height < config.min_height_cm: + continue + title = prod.get("title", "") + handle = prod.get("handle", "") + body_code = extract_body_code(title, handle) or handle.upper() + if body_code in seen_codes: + continue + seen_codes.add(body_code) + price_raw = None + for v in prod.get("variants", []): + try: + price_raw = float(v["price"]) + break + except (KeyError, ValueError): + pass + whr = round(waist / hips, 3) + bwr = round(bust / waist, 3) + family, confidence, basis = nearest_family(whr, bwr, families) + source_url = f"https://www.siliconwives.com/products/{handle}" + rows.append({ + "brand": canonical_brand(config.brand), + "source_url": source_url, + "source_tier": "secondary", + "source_label": "SiliconWives US reseller (Shopify product JSON)", + "body_code": body_code, + "title": title, + "series": None, + "material": next( + (t for t in (prod.get("tags") or []) if t.lower() in ("silicone","tpe","s-tpe","hybrid")), + None, + ), + "height_cm": height, + "weight_kg": weight, + "bust_cm": bust, + "waist_cm": waist, + "hip_cm": hips, + "underbust_cm": None, + "cup": cup, + "price": price_raw, + "price_currency": "USD" if price_raw is not None else None, + "WHR": whr, + "BWR": bwr, + "assigned_family": family, + "family_confidence": confidence, + "family_basis": basis, + "notes": "Extracted from Shopify product body_html via SiliconWives", + }) + rows.sort(key=lambda r: (r["height_cm"], r["body_code"])) + return rows + + def build_summary(rows: list[dict], unavailable: list[dict], inventory_only: list[dict] | None = None) -> dict: brand_rows: dict[str, list[dict]] = {} for row in rows: @@ -996,11 +1153,11 @@ def write_sqlite(rows: list[dict], summary: dict) -> None: "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", [ ( - brand_name, + canonical_brand(brand_name), geo.get("country"), geo.get("hq_city"), geo.get("region"), - json.dumps(geo.get("primary_markets", []), ensure_ascii=False), + json.dumps(with_us_market_code(brand_name, geo.get("primary_markets", [])), ensure_ascii=False), geo.get("tier"), geo.get("tier_usd_floor"), geo.get("segment"), @@ -1168,6 +1325,8 @@ def main() -> None: rows.extend(scrape_supplier(supplier, session, families)) rows.extend(scrape_irontech(session, families)) rows.extend(scrape_tayu(session, families)) + for sw_config in SW_COLLECTIONS: + rows.extend(scrape_siliconwives(sw_config, session, families)) realdoll_inventory = capture_realdoll_inventory(session) unavailable = list(UNAVAILABLE_COMPETITORS) @@ -1191,6 +1350,7 @@ def main() -> None: *[supplier.url for supplier in SUPPLIERS], "https://www.tayu-doll.com/product-sitemap.xml", "https://www.realdoll.com/product-sitemap.xml", + *[sw.url for sw in SW_COLLECTIONS], ], "summary": summary, "rows": rows, From a0c2e4c670b44fcb8dcf3c26f081b14d2fd3966c Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:18:12 -0400 Subject: [PATCH 03/57] PDR-010: add full-body heatmap and normalize ZELEX line grouping --- db/independent_catalog_groupings.json | 427 +++++++++++++++++- .../independent-catalog-grouping-heatmap.md | 68 ++- .../independent-catalog-grouping-matrix.csv | 2 +- scripts/analyze_independent_groupings.py | 57 ++- 4 files changed, 535 insertions(+), 19 deletions(-) diff --git a/db/independent_catalog_groupings.json b/db/independent_catalog_groupings.json index 08542a2..0a4d94a 100644 --- a/db/independent_catalog_groupings.json +++ b/db/independent_catalog_groupings.json @@ -464,17 +464,424 @@ { "brand": "ZELEX", "total_products": 156, - "full_body_skus": 0, - "full-body": 0, + "full_body_skus": 156, + "full-body": 156, "torso": 0, "male": 0, "exclusive": 0, "house-brand": 0, "multi-brand": 0, "accessory": 0, - "unknown": 2, - "full_body_share_pct": 0.0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Catalog Depth Leader" + } + ], + "full_body_competitor_matrix": [ + { + "brand": "6Ye", + "total_products": 23, + "full_body_skus": 22, + "full-body": 22, + "torso": 1, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 95.7, + "strategy_group": "Focused Midline" + }, + { + "brand": "AI Tech", + "total_products": 1, + "full_body_skus": 1, + "full-body": 1, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Boutique Premium" + }, + { + "brand": "Angel Kiss", + "total_products": 49, + "full_body_skus": 49, + "full-body": 49, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Arcana", + "total_products": 4, + "full_body_skus": 4, + "full-body": 4, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "CY Doll", + "total_products": 83, + "full_body_skus": 83, + "full-body": 83, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Cyber Girl", + "total_products": 4, + "full_body_skus": 4, + "full-body": 4, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Dime Doll", + "total_products": 35, + "full_body_skus": 35, + "full-body": 35, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "FunWest", + "total_products": 107, + "full_body_skus": 107, + "full-body": 107, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Catalog Depth Leader" + }, + { + "brand": "Irontech", + "total_products": 124, + "full_body_skus": 122, + "full-body": 122, + "torso": 2, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 98.4, + "strategy_group": "Catalog Depth Leader" + }, + { + "brand": "JM Doll", + "total_products": 1, + "full_body_skus": 1, + "full-body": 1, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Jiusheng", + "total_products": 25, + "full_body_skus": 25, + "full-body": 25, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "LilyDoll", + "total_products": 14, + "full_body_skus": 14, + "full-body": 14, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Lusandy", + "total_products": 35, + "full_body_skus": 35, + "full-body": 35, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "MD Doll", + "total_products": 69, + "full_body_skus": 69, + "full-body": 69, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Magic Moment", + "total_products": 3, + "full_body_skus": 3, + "full-body": 3, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Qita", + "total_products": 3, + "full_body_skus": 2, + "full-body": 2, + "torso": 1, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 66.7, + "strategy_group": "Line Extension (torso/male)" + }, + { + "brand": "Real Lady", + "total_products": 64, + "full_body_skus": 64, + "full-body": 64, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "SE Doll", + "total_products": 135, + "full_body_skus": 135, + "full-body": 135, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Catalog Depth Leader" + }, + { + "brand": "SY Doll", + "total_products": 4, + "full_body_skus": 4, + "full-body": 4, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "Sanhui", + "total_products": 7, + "full_body_skus": 7, + "full-body": 7, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Boutique Premium" + }, + { + "brand": "Sigafun", + "total_products": 7, + "full_body_skus": 7, + "full-body": 7, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, "strategy_group": "Focused Midline" + }, + { + "brand": "Sino Doll", + "total_products": 12, + "full_body_skus": 12, + "full-body": 12, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Boutique Premium" + }, + { + "brand": "Starpery", + "total_products": 47, + "full_body_skus": 46, + "full-body": 46, + "torso": 1, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 97.9, + "strategy_group": "Focused Midline" + }, + { + "brand": "WM Doll", + "total_products": 280, + "full_body_skus": 271, + "full-body": 271, + "torso": 5, + "male": 4, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 96.8, + "strategy_group": "Catalog Depth Leader" + }, + { + "brand": "XT Doll", + "total_products": 50, + "full_body_skus": 50, + "full-body": 50, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "YL Doll", + "total_products": 33, + "full_body_skus": 32, + "full-body": 32, + "torso": 0, + "male": 1, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 97.0, + "strategy_group": "Focused Midline" + }, + { + "brand": "ZELEX", + "total_products": 156, + "full_body_skus": 156, + "full-body": 156, + "torso": 0, + "male": 0, + "exclusive": 0, + "house-brand": 0, + "multi-brand": 0, + "accessory": 0, + "unknown": 0, + "full_body_share_pct": 100.0, + "strategy_group": "Catalog Depth Leader" } ], "price_matrix": [ @@ -801,6 +1208,12 @@ "full_body_skus": 271, "median_price_usd": 1777.0 }, + { + "brand": "ZELEX", + "strategy_group": "Catalog Depth Leader", + "full_body_skus": 156, + "median_price_usd": 1999.0 + }, { "brand": "6Ye", "strategy_group": "Focused Midline", @@ -909,12 +1322,6 @@ "full_body_skus": 32, "median_price_usd": 2049.0 }, - { - "brand": "ZELEX", - "strategy_group": "Focused Midline", - "full_body_skus": 0, - "median_price_usd": 1999.0 - }, { "brand": "Qita", "strategy_group": "Line Extension (torso/male)", diff --git a/docs/research/independent-catalog-grouping-heatmap.md b/docs/research/independent-catalog-grouping-heatmap.md index 37b628b..b74001c 100644 --- a/docs/research/independent-catalog-grouping-heatmap.md +++ b/docs/research/independent-catalog-grouping-heatmap.md @@ -11,6 +11,7 @@ Legend: darker symbols indicate larger counts within each line column. | Brand | full-body | torso | male | exclusive | house-brand | multi-brand | accessory | unknown | Strategy | |---|---:|---:|---:|---:|---:|---:|---:|---:|---| | WM Doll | 271 @ | 5 @ | 4 @ | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | +| ZELEX | 156 + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | SE Doll | 135 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | Irontech | 122 = | 2 = | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | | FunWest | 107 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Catalog Depth Leader | @@ -40,7 +41,72 @@ Legend: darker symbols indicate larger counts within each line column. | Route | 0 | 0 | 0 | 0 | 0 | 0 | 1 . | 0 | Retail Aggregator | | Silicon Wives | 0 | 0 | 0 | 14 @ | 332 @ | 0 | 0 | 0 | Retail Aggregator | | Warm Doll | 0 | 0 | 0 | 0 | 0 | 0 | 9 @ | 0 | Retail Aggregator | -| ZELEX | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 @ | Focused Midline | + +## Full-Body Competitor Heatmap +Excludes retail aggregators and accessory-only catalogs; focuses on full-body competitor line architecture. + +| Brand | full-body | torso | male | unknown | Strategy | +|---|---:|---:|---:|---:|---| +| WM Doll | 271 @ | 5 @ | 4 @ | 0 | Catalog Depth Leader | +| ZELEX | 156 + | 0 | 0 | 0 | Catalog Depth Leader | +| SE Doll | 135 = | 0 | 0 | 0 | Catalog Depth Leader | +| Irontech | 122 = | 2 = | 0 | 0 | Catalog Depth Leader | +| FunWest | 107 = | 0 | 0 | 0 | Catalog Depth Leader | +| CY Doll | 83 - | 0 | 0 | 0 | Focused Midline | +| MD Doll | 69 : | 0 | 0 | 0 | Focused Midline | +| Real Lady | 64 : | 0 | 0 | 0 | Focused Midline | +| XT Doll | 50 : | 0 | 0 | 0 | Focused Midline | +| Angel Kiss | 49 : | 0 | 0 | 0 | Focused Midline | +| Starpery | 46 : | 1 : | 0 | 0 | Focused Midline | +| Dime Doll | 35 . | 0 | 0 | 0 | Focused Midline | +| Lusandy | 35 . | 0 | 0 | 0 | Focused Midline | +| YL Doll | 32 . | 0 | 1 : | 0 | Focused Midline | +| Jiusheng | 25 . | 0 | 0 | 0 | Focused Midline | +| 6Ye | 22 . | 1 : | 0 | 0 | Focused Midline | +| LilyDoll | 14 | 0 | 0 | 0 | Focused Midline | +| Sino Doll | 12 | 0 | 0 | 0 | Boutique Premium | +| Sanhui | 7 | 0 | 0 | 0 | Boutique Premium | +| Sigafun | 7 | 0 | 0 | 0 | Focused Midline | +| Arcana | 4 | 0 | 0 | 0 | Focused Midline | +| Cyber Girl | 4 | 0 | 0 | 0 | Focused Midline | +| SY Doll | 4 | 0 | 0 | 0 | Focused Midline | +| Magic Moment | 3 | 0 | 0 | 0 | Focused Midline | +| Qita | 2 | 1 : | 0 | 0 | Line Extension (torso/male) | +| AI Tech | 1 | 0 | 0 | 0 | Boutique Premium | +| JM Doll | 1 | 0 | 0 | 0 | Focused Midline | + +## Competitor Line Archetypes +Compact view of how each brand structures catalog depth, extensions, and price-ladder center. + +| Brand | Archetype | Full-body SKUs | Full-body share | Dominant price band | +|---|---|---:|---:|---| +| Sino Doll | Boutique Premium | 12 | 100.0% | 2500_3499 | +| Sanhui | Boutique Premium | 7 | 100.0% | 2500_3499 | +| AI Tech | Boutique Premium | 1 | 100.0% | 3500_plus | +| WM Doll | Catalog Depth Leader | 271 | 96.8% | 1200_1799 | +| ZELEX | Catalog Depth Leader | 156 | 100.0% | 1800_2499 | +| SE Doll | Catalog Depth Leader | 135 | 100.0% | 1800_2499 | +| Irontech | Catalog Depth Leader | 122 | 98.4% | 1800_2499 | +| FunWest | Catalog Depth Leader | 107 | 100.0% | 1200_1799 | +| CY Doll | Focused Midline | 83 | 100.0% | 1200_1799 | +| MD Doll | Focused Midline | 69 | 100.0% | 2500_3499 | +| Real Lady | Focused Midline | 64 | 100.0% | 2500_3499 | +| XT Doll | Focused Midline | 50 | 100.0% | 1800_2499 | +| Angel Kiss | Focused Midline | 49 | 100.0% | 1800_2499 | +| Starpery | Focused Midline | 46 | 97.9% | 1800_2499 | +| Dime Doll | Focused Midline | 35 | 100.0% | 1200_1799 | +| Lusandy | Focused Midline | 35 | 100.0% | 2500_3499 | +| YL Doll | Focused Midline | 32 | 97.0% | 1800_2499 | +| Jiusheng | Focused Midline | 25 | 100.0% | 1800_2499 | +| 6Ye | Focused Midline | 22 | 95.7% | 1800_2499 | +| LilyDoll | Focused Midline | 14 | 100.0% | lt_1200 | +| Sigafun | Focused Midline | 7 | 100.0% | 1200_1799 | +| Arcana | Focused Midline | 4 | 100.0% | 1200_1799 | +| Cyber Girl | Focused Midline | 4 | 100.0% | 1800_2499 | +| SY Doll | Focused Midline | 4 | 100.0% | 1800_2499 | +| Magic Moment | Focused Midline | 3 | 100.0% | 1800_2499 | +| JM Doll | Focused Midline | 1 | 100.0% | 1800_2499 | +| Qita | Line Extension (torso/male) | 2 | 66.7% | 1800_2499 | ## Price-Band Matrix diff --git a/docs/research/independent-catalog-grouping-matrix.csv b/docs/research/independent-catalog-grouping-matrix.csv index f70cbd4..47aeb19 100644 --- a/docs/research/independent-catalog-grouping-matrix.csv +++ b/docs/research/independent-catalog-grouping-matrix.csv @@ -29,4 +29,4 @@ WM Doll,280,271,271,5,4,0,0,0,0,0,96.8,Catalog Depth Leader,4,232,44,0,0,0 Warm Doll,9,0,0,0,0,0,0,0,9,0,0.0,Retail Aggregator,8,1,0,0,0,0 XT Doll,50,50,50,0,0,0,0,0,0,0,100.0,Focused Midline,0,0,50,0,0,0 YL Doll,33,32,32,0,1,0,0,0,0,0,97.0,Focused Midline,0,2,31,0,0,0 -ZELEX,156,0,0,0,0,0,0,0,0,2,0.0,Focused Midline,1,40,102,13,0,0 +ZELEX,156,156,156,0,0,0,0,0,0,0,100.0,Catalog Depth Leader,1,40,102,13,0,0 diff --git a/scripts/analyze_independent_groupings.py b/scripts/analyze_independent_groupings.py index 4b35d24..95b8a72 100644 --- a/scripts/analyze_independent_groupings.py +++ b/scripts/analyze_independent_groupings.py @@ -47,6 +47,7 @@ ] HEAT_CHARS = " .:-=+*#%@" +ZELEX_FULL_BODY_LINES = {"Inspiration", "SLE", "ZFE"} def pct(part: int, whole: int) -> float: @@ -228,9 +229,6 @@ def main() -> None: for brand in brands: total = cur.execute("SELECT COUNT(*) c FROM products WHERE brand=?", (brand,)).fetchone()["c"] - full_body = cur.execute( - "SELECT COUNT(*) c FROM products WHERE brand=? AND line='full-body'", (brand,) - ).fetchone()["c"] median_price = cur.execute( "SELECT price_median FROM brand_summary WHERE brand=?", (brand,) ).fetchone() @@ -240,8 +238,11 @@ def main() -> None: for row in cur.execute( "SELECT line, COUNT(*) c FROM products WHERE brand=? GROUP BY line", (brand,) ): - line = row["line"] if row["line"] in line_counts else "unknown" - line_counts[line] = row["c"] + line = normalize_line(brand, row["line"]) + line = line if line in line_counts else "unknown" + line_counts[line] += row["c"] + + full_body = line_counts["full-body"] line_matrix.append( { @@ -281,6 +282,12 @@ def main() -> None: conn.close() + full_body_rows = [ + r + for r in line_matrix + if r["full_body_skus"] > 0 and r["strategy_group"] != "Retail Aggregator" + ] + OUT_CSV.parent.mkdir(parents=True, exist_ok=True) with OUT_CSV.open("w", newline="", encoding="utf-8") as f: fieldnames = [ @@ -305,8 +312,6 @@ def main() -> None: merged.update(price_by_brand[row["brand"]]) writer.writerow(merged) - max_line = max((row["total_products"] for row in line_matrix), default=1) - lines = [] lines.append("# Independent Catalog Groupings") lines.append("") @@ -342,6 +347,43 @@ def main() -> None: ) ) + lines.append("") + lines.append("## Full-Body Competitor Heatmap") + lines.append("Excludes retail aggregators and accessory-only catalogs; focuses on full-body competitor line architecture.") + lines.append("") + lines.append("| Brand | full-body | torso | male | unknown | Strategy |") + lines.append("|---|---:|---:|---:|---:|---|") + + fb_cols = ["full-body", "torso", "male", "unknown"] + fb_col_max = {k: max((r[k] for r in full_body_rows), default=1) for k in fb_cols} + + for row in sorted(full_body_rows, key=lambda r: (-r["full_body_skus"], r["brand"])): + cell = {} + for col in fb_cols: + c = row[col] + cell[col] = f"{c} {heat_char(c, fb_col_max[col])}" + lines.append( + "| {brand} | {full-body} | {torso} | {male} | {unknown} | {strategy} |".format( + brand=row["brand"], + strategy=row["strategy_group"], + **cell, + ) + ) + + lines.append("") + lines.append("## Competitor Line Archetypes") + lines.append("Compact view of how each brand structures catalog depth, extensions, and price-ladder center.") + lines.append("") + lines.append("| Brand | Archetype | Full-body SKUs | Full-body share | Dominant price band |") + lines.append("|---|---|---:|---:|---|") + + price_by_brand = {row["brand"]: row for row in price_matrix} + for row in sorted(full_body_rows, key=lambda r: (r["strategy_group"], -r["full_body_skus"], r["brand"])): + p = price_by_brand[row["brand"]] + lines.append( + f"| {row['brand']} | {row['strategy_group']} | {row['full_body_skus']} | {row['full_body_share_pct']}% | {dominant_price_band(p)} |" + ) + lines.append("") lines.append("## Price-Band Matrix") lines.append("") @@ -360,6 +402,7 @@ def main() -> None: "generated_from": str(DB_PATH.relative_to(ROOT)), "line_columns": LINE_COLUMNS, "line_matrix": line_matrix, + "full_body_competitor_matrix": full_body_rows, "price_matrix": price_matrix, "strategy_groups": sorted(strategies, key=lambda r: (r["strategy_group"], r["brand"])), }, From 22490947c0d51d91cdd9c8bc2c59ce9082beefee Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:20:49 -0400 Subject: [PATCH 04/57] PDR-010: add PNG heatmaps, top10 matrices, and lineup brief --- scripts/analyze_independent_groupings.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/analyze_independent_groupings.py b/scripts/analyze_independent_groupings.py index 95b8a72..a9efbc2 100644 --- a/scripts/analyze_independent_groupings.py +++ b/scripts/analyze_independent_groupings.py @@ -26,6 +26,9 @@ OUT_CSV = ROOT / "docs" / "research" / "independent-catalog-grouping-matrix.csv" OUT_MD = ROOT / "docs" / "research" / "independent-catalog-grouping-heatmap.md" OUT_JSON = ROOT / "db" / "independent_catalog_groupings.json" +OUT_LINE_PNG = ROOT / "docs" / "research" / "independent-catalog-line-heatmap.png" +OUT_PRICE_PNG = ROOT / "docs" / "research" / "independent-catalog-price-heatmap.png" +OUT_PDR_BRIEF = ROOT / "docs" / "PDR-010-competitor-lineup-brief.md" LINE_COLUMNS = [ "full-body", @@ -396,6 +399,9 @@ def main() -> None: OUT_MD.write_text("\n".join(lines) + "\n", encoding="utf-8") + write_png_heatmaps(line_matrix, price_matrix) + write_pdr_brief(line_matrix, full_body_rows, price_matrix, wm_row) + OUT_JSON.write_text( json.dumps( { From 2ba3c35531d7d365cc065c1e314f9523c04c6f00 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:20:58 -0400 Subject: [PATCH 05/57] PDR-010: track independent catalog heatmap PNG artifacts --- .../independent-catalog-line-heatmap.png | Bin 0 -> 126917 bytes .../independent-catalog-price-heatmap.png | Bin 0 -> 121184 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/research/independent-catalog-line-heatmap.png create mode 100644 docs/research/independent-catalog-price-heatmap.png diff --git a/docs/research/independent-catalog-line-heatmap.png b/docs/research/independent-catalog-line-heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..fccaf70d565606c907abdf4e0cb7b62d4f06cb48 GIT binary patch literal 126917 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 literal 0 HcmV?d00001 diff --git a/docs/research/independent-catalog-price-heatmap.png b/docs/research/independent-catalog-price-heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..a67273eb14a4b353bb089a307f2f9bcecf728d4a GIT binary patch literal 121184 zcmeFZXH=9~w=ImBHlQd75=2x)0SS_`N@|Icg9L#lOOl+i6;PsyoIz5NC1;hSfPfT1 z$w5G3Nv5EHyEbB<_k7b-1Q6eIu z6L@1+0Gh)7P~-sXX|{R15lL&D0K6^Fiy^i#w z;f|#G*x}QcPdPoE-NDD;ye3NSbibT6cI3_NS?V{LZ!O|9nP@#Yzv(HjDFLtj@V)4j z@R!!>`SxEw6A>NUN3!>$_vtgkzu&#e@&DdN&*DFQCijbba`kFd)YQV#B22p1H)e7J zwyJT}o70X_wDAj?jce<(?>CPV5#6+7e7BG29gA|Q2HhDhRb1tgyuj8nc8P51gwc=o z#HsR`9GQywatkf536Z~Ck%t_PjtOnu+`uJ9<%!^5Y_ zK-9;Br{vhIvcmZIIDV;O8k3n?ds4LWR$Kf;Qh9Y?hD5;G47Q?_l)&AY@{OM;wT8PiW@HtJw{1A*Qf<-}XOr8gb3kht$p+Lk~hJ$f~khV{8zSCa=qke1?NQZx6YZS8ZETtAuA z+i>>YgBS2merNW*5-#`kpUaw?cbGEM^y z>QSV&QZCDSPpB_uwO4y=7XC;In3&XcU#O=lnS;n);BIh#x-Gmu{CG*Ex5y%V0z$KJ zp@DjmU0k(RmuxkE$a9lCJ^=s0^O$m_7nXUj#v-?hr>*3{w;Ntpl4_>SO9mWe1m{Z) zi<(7Yb?xg&rM?GL>Xh4m%HL;(IUW{9z~g!VG#Gj8i)CQ{;heZ zn&#U3vRj&)i_L6H`Qfng1b%=0`#eMLOUuhx1>Ow1l=iSDijQfYI75G2{@Y|cWauApAsK&5U&y6AwU4O;Jz%cT0gluT5+Apq;8w3 zX3#h9Gf$uFf`=m3Ny!}-<22}ER@9{?WA~Z6hs#5&i(faEuZGU`M`B@*uG={7)jC0K zzQ(RixTG7m7`fGINxUGa$!<{h)VwF4Nti;{S>H34Li4W|1fAYgxoE9xnoF*k(J>CG)bve3wfB&<^55pec86Km=4-~Q27C9a72iQ<`UCl4>NX*yrAt6q#l5GcjX0*16 z?r7(Kk)-Zg-!Rx1qubF~fVfdD3&|K7i!h%q!1OA+&~eLs5yj4wjs-JY?Q9P1R40kV zx=v@1U%ywJmH(OgLEf$U=k#Kj0jbK=4;GsvesoM~x-R49Yeo2pXo|LGzw@r?Nn(B^ zT{)X=UI0I0m>pbx?JhnA%%*I8nOgW(z0*i%lAgteRiIg-&smJ~Om@k1XHC5O;vEsj z%-*(TjC)+Cy{;dGf}=lfX}bE=p!?Ei|3ehoc@0a2IYVRdUfVA9Oqp3q7By?L-wJNk z*v*)`4hGn@@~4$r73MQ-ZLDNsC#}9nP-L(FNDjdWs~PT8<+Qb#8HM&~U>9b_oR~cW zEH>wZuT>l3YIe4n);KN=-BYe9SsQTDlh|CH%k0m|%E}sTptf%5tDpG_=?f#=0O|YQ z!Z(w6)jpF2L6z|02DhIxxizgFLjZofH8b41B_tr9&JRK!bN92+_Ik?nhi$k^KRp3H z<_#180rjWO(-~XPNC9}^Tw92 z(3mFTvC-KZSGvhNKS(3!_@FwIlZjZI``LM6*EhCf4dde_gRU03o*(J`z8A}TG;Vc{ zezm1=?vE|s+1^ZJ2-m(bq)OK&jQ{=$Pcnbtq!9bi0Iid>`gnSBa8u~1+x>Gip_HQ} zE2V}jjdWfuo35~zJ51s|!n*amww9rGPYOn7az6b2v2dmPUK;GkH;|`Uhk|Iy&m{TZ z?pHnUq~W#nnb!aH+T@&oPq0-uY_WP>okPz@LW<{-w#zP*YoRW|eUe zE!X5C*y+8jy6;(65vs`^6n>E`8-SR4kYjU-L~u5b;BI8=w7Bfw_VAX

#Gyj&Z0z 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 z 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%0DeLFD&WjpVxe* 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


u`&E+>)#9rsTrIu*mVB>)jr*0U9|A7 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 V+E-DJ5QP5HlXw$-ir%>!{{wN)$R+>) literal 0 HcmV?d00001 From b0e6e7371cd4440d8d0f351f79af30be924c42f2 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:22:32 -0400 Subject: [PATCH 06/57] fix(taxonomy): remove Tayu from UNAVAILABLE_COMPETITORS Tayu is scraped via scrape_tayu() in main(); listing it as pending-source in UNAVAILABLE_COMPETITORS made every generated report mark Tayu as both covered and a gap simultaneously. Co-Authored-By: Claude Sonnet 4.6 --- scripts/build_competitor_catalog_taxonomy.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/scripts/build_competitor_catalog_taxonomy.py b/scripts/build_competitor_catalog_taxonomy.py index 0ac1dad..9b3f38f 100644 --- a/scripts/build_competitor_catalog_taxonomy.py +++ b/scripts/build_competitor_catalog_taxonomy.py @@ -258,12 +258,6 @@ def canonical_brand(brand: str) -> str: "reason": "No stable machine-readable body-style catalogue endpoint has been integrated yet.", "source_url": "https://www.dollforever.com/", }, - { - "brand": "Tayu", - "status": "pending-source", - "reason": "No stable machine-readable body-style catalogue endpoint has been integrated yet.", - "source_url": "https://www.tayudoll.com/", - }, { "brand": "Sanhui", "status": "pending-source", From 9a97d9b412135644adff71496a77412ba0079f39 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Fri, 5 Jun 2026 23:26:28 -0400 Subject: [PATCH 07/57] fix(ci): untrack PNG heatmap artifacts that trip the image guard The two independent-catalog heatmap PNGs were force-added in e137d22 despite *.png being in .gitignore. The CI hygiene guard rejects image files in the tree. Removing them from the index; local copies remain. Co-Authored-By: Claude Sonnet 4.6 --- .../independent-catalog-line-heatmap.png | Bin 126917 -> 0 bytes .../independent-catalog-price-heatmap.png | Bin 121184 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/research/independent-catalog-line-heatmap.png delete mode 100644 docs/research/independent-catalog-price-heatmap.png diff --git a/docs/research/independent-catalog-line-heatmap.png b/docs/research/independent-catalog-line-heatmap.png deleted file mode 100644 index fccaf70d565606c907abdf4e0cb7b62d4f06cb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126917 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 diff --git a/docs/research/independent-catalog-price-heatmap.png b/docs/research/independent-catalog-price-heatmap.png deleted file mode 100644 index a67273eb14a4b353bb089a307f2f9bcecf728d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121184 zcmeFZXH=9~w=ImBHlQd75=2x)0SS_`N@|Icg9L#lOOl+i6;PsyoIz5NC1;hSfPfT1 z$w5G3Nv5EHyEbB<_k7b-1Q6eIu z6L@1+0Gh)7P~-sXX|{R15lL&D0K6^Fiy^i#w z;f|#G*x}QcPdPoE-NDD;ye3NSbibT6cI3_NS?V{LZ!O|9nP@#Yzv(HjDFLtj@V)4j z@R!!>`SxEw6A>NUN3!>$_vtgkzu&#e@&DdN&*DFQCijbba`kFd)YQV#B22p1H)e7J zwyJT}o70X_wDAj?jce<(?>CPV5#6+7e7BG29gA|Q2HhDhRb1tgyuj8nc8P51gwc=o z#HsR`9GQywatkf536Z~Ck%t_PjtOnu+`uJ9<%!^5Y_ zK-9;Br{vhIvcmZIIDV;O8k3n?ds4LWR$Kf;Qh9Y?hD5;G47Q?_l)&AY@{OM;wT8PiW@HtJw{1A*Qf<-}XOr8gb3kht$p+Lk~hJ$f~khV{8zSCa=qke1?NQZx6YZS8ZETtAuA z+i>>YgBS2merNW*5-#`kpUaw?cbGEM^y z>QSV&QZCDSPpB_uwO4y=7XC;In3&XcU#O=lnS;n);BIh#x-Gmu{CG*Ex5y%V0z$KJ zp@DjmU0k(RmuxkE$a9lCJ^=s0^O$m_7nXUj#v-?hr>*3{w;Ntpl4_>SO9mWe1m{Z) zi<(7Yb?xg&rM?GL>Xh4m%HL;(IUW{9z~g!VG#Gj8i)CQ{;heZ zn&#U3vRj&)i_L6H`Qfng1b%=0`#eMLOUuhx1>Ow1l=iSDijQfYI75G2{@Y|cWauApAsK&5U&y6AwU4O;Jz%cT0gluT5+Apq;8w3 zX3#h9Gf$uFf`=m3Ny!}-<22}ER@9{?WA~Z6hs#5&i(faEuZGU`M`B@*uG={7)jC0K zzQ(RixTG7m7`fGINxUGa$!<{h)VwF4Nti;{S>H34Li4W|1fAYgxoE9xnoF*k(J>CG)bve3wfB&<^55pec86Km=4-~Q27C9a72iQ<`UCl4>NX*yrAt6q#l5GcjX0*16 z?r7(Kk)-Zg-!Rx1qubF~fVfdD3&|K7i!h%q!1OA+&~eLs5yj4wjs-JY?Q9P1R40kV zx=v@1U%ywJmH(OgLEf$U=k#Kj0jbK=4;GsvesoM~x-R49Yeo2pXo|LGzw@r?Nn(B^ zT{)X=UI0I0m>pbx?JhnA%%*I8nOgW(z0*i%lAgteRiIg-&smJ~Om@k1XHC5O;vEsj z%-*(TjC)+Cy{;dGf}=lfX}bE=p!?Ei|3ehoc@0a2IYVRdUfVA9Oqp3q7By?L-wJNk z*v*)`4hGn@@~4$r73MQ-ZLDNsC#}9nP-L(FNDjdWs~PT8<+Qb#8HM&~U>9b_oR~cW zEH>wZuT>l3YIe4n);KN=-BYe9SsQTDlh|CH%k0m|%E}sTptf%5tDpG_=?f#=0O|YQ z!Z(w6)jpF2L6z|02DhIxxizgFLjZofH8b41B_tr9&JRK!bN92+_Ik?nhi$k^KRp3H z<_#180rjWO(-~XPNC9}^Tw92 z(3mFTvC-KZSGvhNKS(3!_@FwIlZjZI``LM6*EhCf4dde_gRU03o*(J`z8A}TG;Vc{ zezm1=?vE|s+1^ZJ2-m(bq)OK&jQ{=$Pcnbtq!9bi0Iid>`gnSBa8u~1+x>Gip_HQ} zE2V}jjdWfuo35~zJ51s|!n*amww9rGPYOn7az6b2v2dmPUK;GkH;|`Uhk|Iy&m{TZ z?pHnUq~W#nnb!aH+T@&oPq0-uY_WP>okPz@LW<{-w#zP*YoRW|eUe zE!X5C*y+8jy6;(65vs`^6n>E`8-SR4kYjU-L~u5b;BI8=w7Bfw_VAX

#Gyj&Z0z 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 z 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%0DeLFD&WjpVxe* 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


u`&E+>)#9rsTrIu*mVB>)jr*0U9|A7 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 V+E-DJ5QP5HlXw$-ir%>!{{wN)$R+>) From e682646b34c2b3ad35df3a864a7c0e502e3da7f2 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 11:00:21 -0400 Subject: [PATCH 08/57] feat(gallery+db): character page gallery UX overhaul + Sculpt/Classic estimated bodies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gallery / character page (character.html): - Remove "· Slot N" from series eyebrow — series name only - Backdrop image now uses gallery[1] to differ from the hero - Image count derived from gallery.length (not stale static field) - Auto-rotate every 4.5 s with gold progress bar; pauses on hover - Lightbox with prev/next buttons, keyboard nav (←/→/Esc), click-outside close DB — estimated hero bodies for new families: - db/family_taxonomy.json: ZS165D (Sculpt) + ZC165D (Classic) added; member_counts set to 1 - db/body_profiles.json: full profile entries for ZS165D + ZC165D - db/body_measurements.json: estimated spec-cards (PDR-005/007 design targets) - db/character_profiles.json: persona entries for The Athlete + The Standard All four HTML pages (browse, contact, quiz, series) carry forward minor polish edits from prior session. Co-Authored-By: Claude Sonnet 4.6 --- browse.html | 2 +- character.html | 152 +++++++++++++++++++++++++++++++++---- contact.html | 9 ++- db/body_measurements.json | 46 +++++++++++ db/body_profiles.json | 62 +++++++++++++++ db/character_profiles.json | 12 +++ db/family_taxonomy.json | 36 ++++++++- quiz.html | 26 ++----- series.html | 8 +- 9 files changed, 306 insertions(+), 47 deletions(-) diff --git a/browse.html b/browse.html index 94d48bb..4a6d3bb 100644 --- a/browse.html +++ b/browse.html @@ -48,7 +48,7 @@ .toggle-wrap:hover .toggle-label{color:var(--text)} .search-wrap{margin-left:auto;position:relative;flex-shrink:0} .search-wrap input{ - background:var(--panel2);border:1px solid var(--line);border-radius:8px; + background:var(--panel2);border:1px solid var(--line);border-radius:var(--r-md); color:var(--text);font-family:inherit;font-size:13px; padding:7px 14px 7px 34px;width:200px;transition:.2s; outline:none; diff --git a/character.html b/character.html index 01c45d1..2f89fbc 100644 --- a/character.html +++ b/character.html @@ -13,17 +13,21 @@ @media(max-width:820px){.char-layout{grid-template-columns:1fr;gap:32px}} /* ---- gallery ---- */ -.galmain{width:100%;aspect-ratio:3/4;object-fit:cover;object-position:top center;border-radius:13px;display:block;background:#0d0d0d} +.galmain{width:100%;aspect-ratio:3/4;object-fit:cover;object-position:top center;border-radius:13px;display:block; + background:#0d0d0d;cursor:zoom-in;transition:opacity .2s} +.galmain:hover{opacity:.92} .galmain-wrap{position:relative;border-radius:13px;overflow:hidden;background:#0d0d0d} .galmain-wrap .repbadge{position:absolute;top:12px;left:12px;font-size:var(--t-xs);letter-spacing:1px;text-transform:uppercase; background:rgba(0,0,0,.82);color:var(--gold);padding:5px 10px;border-radius:var(--r-sm);border:1px solid var(--b-accent)} -.galmain-wrap .imgcount{position:absolute;bottom:12px;right:12px;font-size:11px;letter-spacing:1px; +.galmain-wrap .imgcount{position:absolute;bottom:40px;right:12px;font-size:11px;letter-spacing:1px; background:rgba(0,0,0,.75);color:var(--cream);padding:4px 9px;border-radius:var(--r-sm)} .galstrip{display:flex;gap:var(--sp2);flex-wrap:wrap;margin-top:var(--sp3)} .galstrip img{width:72px;height:96px;object-fit:cover;object-position:top center;border-radius:7px;cursor:pointer; border:2px solid transparent;transition:.2s;opacity:.7} .galstrip img.sel{border-color:var(--gold);opacity:1} .galstrip img:hover{opacity:1;border-color:var(--muted)} +/* auto-rotate progress bar */ +.auto-progress{position:absolute;bottom:0;left:0;height:3px;background:var(--gold);opacity:.55;width:0;transition:width linear} /* ---- info panel ---- */ .char-name{font-size:clamp(28px,4vw,46px);line-height:1.1;font-weight:700;margin-bottom:4px} @@ -64,6 +68,24 @@ .profile-dl{display:grid;grid-template-columns:max-content 1fr;gap:10px 22px;font-size:var(--t-base)} .profile-dl dt{color:var(--muted);white-space:nowrap;padding-top:1px} .profile-dl dd{color:var(--cream);margin:0;line-height:1.5} + +/* ---- lightbox ---- */ +.lightbox{display:none;position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.96); + align-items:center;justify-content:center} +.lightbox.open{display:flex} +.lb-img{max-height:90vh;max-width:88vw;object-fit:contain;border-radius:8px;user-select:none;display:block} +.lb-close{position:absolute;top:16px;right:20px;background:none;border:none;color:#ddd;font-size:30px; + line-height:1;cursor:pointer;opacity:.55;padding:6px 12px;transition:.15s} +.lb-close:hover{opacity:1} +.lb-btn{position:absolute;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.07); + border:1px solid rgba(255,255,255,.15);color:#ddd;font-size:26px;cursor:pointer; + padding:12px 18px;border-radius:6px;opacity:.6;transition:.2s;line-height:1} +.lb-btn:hover{opacity:1;background:rgba(255,255,255,.14)} +.lb-btn:disabled{opacity:.2;cursor:default;pointer-events:none} +.lb-prev{left:20px} +.lb-next{right:20px} +.lb-counter{position:absolute;bottom:20px;left:50%;transform:translateX(-50%); + font-size:11px;letter-spacing:2.5px;color:rgba(255,255,255,.38);white-space:nowrap} @@ -102,6 +124,9 @@

Character not found

const heroFull = gallery[0] || ps.hero || ps.hero_thumb || ''; const heroThumb = ps.hero_thumb || ps.hero || ''; const mainImg = ph ? (heroThumb || heroFull) : (heroFull || heroThumb); + // backdrop: prefer second gallery image so it differs from the hero + const backdropSrc = gallery[1] || gallery[0] || heroFull || heroThumb; + const totalImgCount = gallery.length || ps.image_count || 0; // spec rows const bodyEstimated = b.estimated === true; @@ -132,8 +157,8 @@

Character not found

if (ps.price) { specRows += `From$${ZX.esc(ps.price)}`; } - if (!ph && ps.image_count) { - specRows += `Photoset${ZX.esc(ps.image_count)} images`; + if (!ph && totalImgCount > 0) { + specRows += `Photoset${totalImgCount} image${totalImgCount !== 1 ? 's' : ''}`; } // thumb strip @@ -196,15 +221,16 @@

Character not found

? `${ZX.esc(p.name)}` : `
No image available
`} ${ph ? `Representative · shoot pending` : ''} - ${ps.image_count ? `${ZX.esc(ps.image_count)} images` : ''} + ${totalImgCount > 0 ? `${totalImgCount} image${totalImgCount !== 1 ? 's' : ''}` : ''} + ${gallery.length > 1 ? `
` : ''} ${thumbStrip ? `
${thumbStrip}
` : ''}
- ${ZX.heroBackdrop(ZX.img(c))} -
${ZX.esc(c.series)} · Slot ${ZX.esc(c.slot)}
+ ${ZX.heroBackdrop(backdropSrc)} +
${ZX.esc(c.series)}

${ZX.esc(p.name)}

${[p.title, c.series, c.body_code].filter(Boolean).map(ZX.esc).join(' · ')}
${p.tagline ? `
${ZX.esc(p.tagline)}
` : ''} @@ -266,18 +292,112 @@

${ZX.esc(p.name)}

${moreFamilyHtml} `; - // wire up thumbnail strip + // ---- gallery interactivity ---- const gm = document.getElementById('galmain'); - if (gm) { - document.querySelectorAll('#galstrip img').forEach(im => { - im.addEventListener('click', () => { - gm.src = im.dataset.full; - document.querySelectorAll('#galstrip img').forEach(x => x.classList.remove('sel')); - im.classList.add('sel'); - }); - }); + // Ordered image list: full-res gallery array, or fall back to the single hero image + const allImages = gallery.length ? gallery : (heroFull ? [heroFull] : []); + let currentIdx = 0; + let autoTimer = null; + const ROTATE_MS = 4500; + const progEl = document.getElementById('auto-progress'); + + // Animate the gold progress bar to fill over ROTATE_MS — resets on each image change. + function resetBar() { + if (!progEl || allImages.length < 2 || !autoTimer) return; + progEl.style.transition = 'none'; + progEl.style.width = '0%'; + requestAnimationFrame(() => requestAnimationFrame(() => { + progEl.style.transition = `width ${ROTATE_MS}ms linear`; + progEl.style.width = '100%'; + })); + } + + function startAuto() { + if (allImages.length < 2) return; + clearInterval(autoTimer); + autoTimer = setInterval(() => goTo(currentIdx + 1), ROTATE_MS); + resetBar(); + } + + function stopAuto() { + clearInterval(autoTimer); + autoTimer = null; + if (progEl) { progEl.style.transition = 'none'; progEl.style.width = '0%'; } + } + + // Central navigation function — updates main image, thumbnail strip, and lightbox in sync. + function goTo(idx) { + if (!allImages.length) return; + currentIdx = ((idx % allImages.length) + allImages.length) % allImages.length; + if (gm) gm.src = allImages[currentIdx]; + document.querySelectorAll('#galstrip img').forEach((im, i) => im.classList.toggle('sel', i === currentIdx)); + const lbImgEl = document.getElementById('lb-img'); + const lbCtrEl = document.getElementById('lb-counter'); + if (lbImgEl) lbImgEl.src = allImages[currentIdx]; + if (lbCtrEl) lbCtrEl.textContent = allImages.length > 1 ? `${currentIdx + 1} / ${allImages.length}` : ''; + resetBar(); + } + + // Start auto-rotate; pause on hover. + if (allImages.length > 1) { + startAuto(); + const galWrap = document.querySelector('.galmain-wrap'); + if (galWrap) { + galWrap.addEventListener('mouseenter', stopAuto); + galWrap.addEventListener('mouseleave', startAuto); + } } + // Thumbnail strip — clicking a thumb stops auto-rotate and jumps to that image. + document.querySelectorAll('#galstrip img').forEach((im, i) => { + im.addEventListener('click', () => { stopAuto(); goTo(i); }); + }); + + // ---- lightbox ---- + const hasSingle = allImages.length <= 1; + document.body.insertAdjacentHTML('beforeend', ` + `); + + const lb = document.getElementById('lightbox'); + + function openLightbox(idx) { + if (!allImages.length) return; + stopAuto(); + goTo(idx); + lb.classList.add('open'); + document.body.style.overflow = 'hidden'; + } + + function closeLightbox() { + lb.classList.remove('open'); + document.body.style.overflow = ''; + startAuto(); + } + + // Click hero image to open lightbox + if (gm && allImages.length) { + gm.addEventListener('click', () => openLightbox(currentIdx)); + } + + document.getElementById('lb-close').addEventListener('click', closeLightbox); + document.getElementById('lb-prev').addEventListener('click', () => goTo(currentIdx - 1)); + document.getElementById('lb-next').addEventListener('click', () => goTo(currentIdx + 1)); + + // Click backdrop to close; keyboard navigation + lb.addEventListener('click', e => { if (e.target === lb) closeLightbox(); }); + document.addEventListener('keydown', e => { + if (!lb.classList.contains('open')) return; + if (e.key === 'Escape') closeLightbox(); + if (e.key === 'ArrowLeft') goTo(currentIdx - 1); + if (e.key === 'ArrowRight') goTo(currentIdx + 1); + }); + // update page title document.title = `${p.name} · ZELEX Atlas`; diff --git a/contact.html b/contact.html index 6e1ab89..70bf49f 100644 --- a/contact.html +++ b/contact.html @@ -31,7 +31,7 @@ .form-group label{display:block;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--muted);margin-bottom:7px} .form-group label .req{color:var(--coral);margin-left:2px} .form-group input,.form-group textarea,.form-group select{ - width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:8px; + width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:var(--r-md); color:var(--text);font-family:'Montserrat',sans-serif;font-size:14px;padding:11px 14px; transition:.2s;outline:none;appearance:none;-webkit-appearance:none} .form-group input:focus,.form-group textarea:focus,.form-group select:focus{border-color:var(--gold);box-shadow:0 0 0 2px rgba(212,165,116,.15)} @@ -42,7 +42,7 @@ @media(max-width:600px){.form-row{grid-template-columns:1fr}} .field-err{font-size:11px;color:var(--coral);margin-top:5px;display:none} .field-err.show{display:block} - .readonly-field{background:var(--panel);border:1px solid var(--line);border-radius:8px;color:var(--muted);font-size:13px;padding:11px 14px;letter-spacing:.3px} + .readonly-field{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);color:var(--muted);font-size:13px;padding:11px 14px;letter-spacing:.3px} /* consent */ .consent-row{display:flex;align-items:flex-start;gap:10px;margin-bottom:24px} @@ -112,7 +112,7 @@

Your inquiry has been received.

Something went wrong.

-

We couldn't send your message right now. Please try again, or reach us directly at +

We couldn't send your message right now. Please try again, or reach us directly at .

@@ -437,6 +437,7 @@

No pressure

var success = document.getElementById('form-success'); var chipArea= document.getElementById('char-chip-area'); if (form) form.style.display = 'none'; + if (chipArea) chipArea.style.display = 'none'; if (success) success.style.display = 'block'; if (!usedMailto) { // endpoint path: hide the direct-email fallback line @@ -454,7 +455,7 @@

No pressure

var msgEl = document.getElementById('form-error-msg'); var email = ZX.INQUIRY_EMAIL || 'inquiries@zelexdoll.com'; if (errDiv) errDiv.style.display = 'block'; - if (msgEl && msg) msgEl.textContent = msg; + if (msg) { var t = document.getElementById('form-error-text'); if (t) t.textContent = msg; } var el = document.getElementById('error-email-link'); if (el) { el.href = 'mailto:' + email; el.textContent = email; } // Re-enable submit diff --git a/db/body_measurements.json b/db/body_measurements.json index 4c1c880..c9bef71 100644 --- a/db/body_measurements.json +++ b/db/body_measurements.json @@ -408,6 +408,52 @@ "weight_kg": 31, "estimated": true, "est_basis": "Interpolated from ZX172E / ZG175E (E-cup) slim build (no published spec card)" + }, + "ZS165D": { + "spec_label": null, + "neck": null, + "shoulder_width": null, + "arm_length": null, + "hand_length": null, + "leg_length": null, + "foot_length": null, + "thigh_circ": null, + "calf_circ": null, + "body_height": null, + "head_body_height": 165, + "line": "Sculpt", + "nominal_height": 165, + "cup": "D", + "upper_bust": 91.5, + "under_bust": 73.5, + "waist": 61.0, + "hip": 91.0, + "weight_kg": 36.5, + "estimated": true, + "est_basis": "PDR-005 design target: WHR 0.670, BWR 1.500, 165cm D-cup Sculpt hero body" + }, + "ZC165D": { + "spec_label": null, + "neck": null, + "shoulder_width": null, + "arm_length": null, + "hand_length": null, + "leg_length": null, + "foot_length": null, + "thigh_circ": null, + "calf_circ": null, + "body_height": null, + "head_body_height": 165, + "line": "Classic", + "nominal_height": 165, + "cup": "D", + "upper_bust": 91.5, + "under_bust": 73.5, + "waist": 63.0, + "hip": 90.0, + "weight_kg": 33.5, + "estimated": true, + "est_basis": "PDR-007 design target: WHR 0.700, BWR 1.452, 165cm D-cup Classic hero body" } } } \ No newline at end of file diff --git a/db/body_profiles.json b/db/body_profiles.json index 66239e1..ffcf678 100644 --- a/db/body_profiles.json +++ b/db/body_profiles.json @@ -1016,6 +1016,68 @@ "assets/thumbs/SLE-Series/ZXE215_1_ZX172E/ZXE215_1_ZX172E-107.jpg", "assets/thumbs/SLE-Series/ZXE215_1_ZX172E/ZXE215_1_ZX172E-108.jpg" ] + }, + { + "body_code": "ZS165D", + "series": "Sculpt", + "line": "ZS", + "height_cm": 165, + "cup": "D", + "weight_kg": 36.5, + "bust_cm": 91.5, + "underbust_cm": 73.5, + "waist_cm": 61.0, + "hip_cm": 91.0, + "bust_drop_cm": 18.0, + "WHR": 0.670, + "BWR": 1.500, + "family": "The Sculpt", + "family_confidence": "exact", + "estimated": true, + "est_basis": "PDR-005 design target: WHR 0.670, BWR 1.500, 165cm D-cup Sculpt hero body", + "silhouette": "Muscular definition", + "premium": "+30%", + "target_buyer": "Fitness realism seeker", + "persona": "The Athlete", + "energy": "Defined · disciplined · precise · strong", + "tagline": "Built, not decorated.", + "positioning": "ZELEX's first dedicated athletic silhouette — 165cm, D cup, WHR 0.67. Articulated abdominals, defined deltoids, sculpted posterior. Silicone construction. For the buyer who sees fitness realism as the apex of craftsmanship — not fantasy volume, but earned form.", + "hero_image": null, + "gallery": [], + "product_count": 0, + "hero_thumb": null, + "gallery_thumbs": [] + }, + { + "body_code": "ZC165D", + "series": "Classic", + "line": "ZC", + "height_cm": 165, + "cup": "D", + "weight_kg": 33.5, + "bust_cm": 91.5, + "underbust_cm": 73.5, + "waist_cm": 63.0, + "hip_cm": 90.0, + "bust_drop_cm": 18.0, + "WHR": 0.700, + "BWR": 1.452, + "family": "The Classic", + "family_confidence": "exact", + "estimated": true, + "est_basis": "PDR-007 design target: WHR 0.700, BWR 1.452, 165cm D-cup Classic hero body", + "silhouette": "Timeless hourglass", + "premium": "+20%", + "target_buyer": "First-time premium buyer", + "persona": "The Standard", + "energy": "Balanced · refined · accessible · timeless", + "tagline": "The proportion that always made sense.", + "positioning": "ZELEX's foundational hourglass — 165cm, D cup, WHR 0.70. Symmetric geometry: bust and hip within 1.5cm of each other, waist precisely 30% narrower than hip. Silicone construction. For the first-time premium buyer who wants the classic hourglass done with measurement-grade precision.", + "hero_image": null, + "gallery": [], + "product_count": 0, + "hero_thumb": null, + "gallery_thumbs": [] } ] } \ No newline at end of file diff --git a/db/character_profiles.json b/db/character_profiles.json index 0b25ca4..a5d3867 100644 --- a/db/character_profiles.json +++ b/db/character_profiles.json @@ -99,5 +99,17 @@ "energy": "Tallest · dramatic · full · commanding", "tagline": "The top of the SLE range, in every sense.", "positioning": "Tallest SLE build (172cm E-cup, Icon family). Premium SLE 3.0 anchor — maximum stature with a full, photogenic figure. The SLE collector's statement piece." + }, + "ZS165D": { + "persona": "The Athlete", + "energy": "Defined · disciplined · precise · strong", + "tagline": "Built, not decorated.", + "positioning": "ZELEX's first athletic silhouette — 165cm D-cup, WHR 0.67. Articulated abdominals, defined deltoids, sculpted posterior. For the buyer who sees fitness realism as the apex of craftsmanship: not fantasy volume, but earned form. Debut body for The Sculpt family." + }, + "ZC165D": { + "persona": "The Standard", + "energy": "Balanced · refined · accessible · timeless", + "tagline": "The proportion that always made sense.", + "positioning": "ZELEX's foundational hourglass — 165cm D-cup, WHR 0.70. Symmetric geometry: bust and hip within 1.5cm, waist 30% narrower than hip. For the first-time premium buyer who wants measurement-grade precision on the most studied silhouette in the Western canon. Debut body for The Classic family." } } diff --git a/db/family_taxonomy.json b/db/family_taxonomy.json index 50bcfe2..10a1809 100644 --- a/db/family_taxonomy.json +++ b/db/family_taxonomy.json @@ -28,8 +28,10 @@ "premium": "+20%", "target_buyer": "First-time premium buyer", "status": "in_development", - "member_count": 0, - "members": [] + "member_count": 1, + "members": [ + "ZC165D" + ] }, { "name": "The Icon", @@ -141,8 +143,10 @@ "premium": "+30%", "target_buyer": "Fitness realism seeker", "status": "in_development", - "member_count": 0, - "members": [] + "member_count": 1, + "members": [ + "ZS165D" + ] } ], "bodies": [ @@ -373,6 +377,30 @@ "family": "The Siren", "confidence": "exact", "estimated": false + }, + { + "body_code": "ZS165D", + "series": "Sculpt", + "height_cm": 165, + "cup": "D", + "WHR": 0.670, + "BWR": 1.500, + "bust_drop_cm": 18.0, + "family": "The Sculpt", + "confidence": "exact", + "estimated": true + }, + { + "body_code": "ZC165D", + "series": "Classic", + "height_cm": 165, + "cup": "D", + "WHR": 0.700, + "BWR": 1.452, + "bust_drop_cm": 18.0, + "family": "The Classic", + "confidence": "exact", + "estimated": true } ] } \ No newline at end of file diff --git a/quiz.html b/quiz.html index 0e65f9a..ba95646 100644 --- a/quiz.html +++ b/quiz.html @@ -32,22 +32,8 @@ margin-bottom: 38px; line-height: 1.7; } -.intro .btn-begin { - display: inline-block; - padding: 16px 42px; - background: var(--gold); - border: none; - border-radius: var(--r-md); - color: #111; - font-family: 'Montserrat', sans-serif; - font-size: 13px; - font-weight: 600; - letter-spacing: 3px; - text-transform: uppercase; - cursor: pointer; - transition: .25s; -} -.intro .btn-begin:hover { background: var(--cream); transform: translateY(-2px); } +/* btn-begin inherits all .btn.solid behaviour; only override size */ +.intro .btn-begin { padding: 16px 42px; } .intro .note { margin-top: 20px; color: var(--muted); @@ -278,7 +264,7 @@
Find Your Character

The one built for you

Five questions. Six body families. One introduction.

- +

Takes about 60 seconds

@@ -393,12 +379,12 @@

if (!matches.includes(c)) { matches.push(c); fromSecond++; } } - // final fallback: any remaining live character - if (matches.length < 3) { + // final fallback: any remaining live character (not counted as runner-up) + if (matches.length < 4) { const anyLive = m.characters.filter(c => c.status === 'live'); for (const c of anyLive) { if (matches.length >= 4) break; - if (!matches.includes(c)) { matches.push(c); fromSecond++; } + if (!matches.includes(c)) { matches.push(c); } } } diff --git a/series.html b/series.html index 811af23..4046269 100644 --- a/series.html +++ b/series.html @@ -91,8 +91,8 @@

- - + +
@@ -360,6 +360,10 @@

p.classList.toggle('active', p.dataset.fam === 'all'); }); } + +/* ---- view toggle wiring ---- */ +document.getElementById('btn-bodies').addEventListener('click', () => setView('bodies')); +document.getElementById('btn-chars').addEventListener('click', () => setView('chars')); From 9cc4536af353db9354d0e9690ffe75658fae83b3 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 11:22:42 -0400 Subject: [PATCH 09/57] fix(pdr-010): address all PR #28 Copilot/Gemini review findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - assets/site.css: add isolation:isolate to .btn.concierge to contain the z-index:-1 ::before pseudo-element within the button stacking context - scripts/analyze_independent_groupings.py: use .as_posix() for generated_from so the path uses forward slashes on Windows - scripts/scrape_competitors.js: wrap scraping loop in try…finally so browser.close() is guaranteed even on exception - scripts/build_competitor_catalog_taxonomy.py: - use `or ""` (not default "") on body_html/title/handle to guard against explicit null values returned by the Shopify API - add height sanity check (50–250 cm) in scrape_supplier to drop mis-parsed values like 16 cm (Game Lady regression) - include "hybrid" material in tpe_share_pct calculation - wrap every network scrape call in main() with try/except so one supplier failure does not abort the entire run - docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md: - fix market concentration band table (90–100% header; correct WM/XT/SE/6YE/AS Doll to 60–69% band; move Game Lady/Tayu/Jiusheng out of <60% into 60–69%) - recalculate ROI composites using the stated weight formula (avail×2, conv×2, roadmap×1.5, others×1, total 10.5): Muse 3.5→3.7, Icon 4.0→3.9, Siren 3.8→3.7, Empress 2.3→2.0, Classic 3.4→3.1, Sculpt 2.3→2.0 - db/independent_catalog_groupings.json: fix Windows backslash in generated_from path - docs/research/source-log.md: correct Irontech URL to https://www.irontechdoll.com/ (matches scraper endpoint) - docs/research/competitor-family-coverage-matrix.md: fix Game Lady height range from 16-171 cm to 156-171 cm (scraper mis-parse) Co-Authored-By: Claude Sonnet 4.5 --- assets/site.css | 2 +- db/independent_catalog_groupings.json | 2 +- ...mpetitor-family-coverage-roi-validation.md | 19 ++-- .../competitor-family-coverage-matrix.md | 2 +- docs/research/source-log.md | 2 +- scripts/analyze_independent_groupings.py | 2 +- scripts/build_competitor_catalog_taxonomy.py | 37 ++++++-- scripts/scrape_competitors.js | 94 ++++++++++--------- 8 files changed, 91 insertions(+), 69 deletions(-) diff --git a/assets/site.css b/assets/site.css index 2ac8401..a0e6bea 100644 --- a/assets/site.css +++ b/assets/site.css @@ -103,7 +103,7 @@ main{max-width:var(--maxw);margin:0 auto;padding:10px 24px 70px} font-size:var(--t-base);padding:13px 30px;border-color:var(--gold);color:var(--cream); background:linear-gradient(135deg,rgba(30,24,18,.9),rgba(42,34,22,.9)); box-shadow:inset 0 0 0 1px rgba(212,165,116,.22),0 4px 18px rgba(0,0,0,.45); - position:relative;overflow:hidden} + position:relative;overflow:hidden;isolation:isolate} .btn.concierge::before{content:"";position:absolute;inset:0; background:linear-gradient(135deg,rgba(50,38,22,.95),rgba(65,48,25,.95)); opacity:0;transition:opacity .25s;pointer-events:none;z-index:-1} diff --git a/db/independent_catalog_groupings.json b/db/independent_catalog_groupings.json index 0a4d94a..7a4277c 100644 --- a/db/independent_catalog_groupings.json +++ b/db/independent_catalog_groupings.json @@ -1,5 +1,5 @@ { - "generated_from": "db\\independent_competitor.sqlite", + "generated_from": "db/independent_competitor.sqlite", "line_columns": [ "full-body", "torso", diff --git a/docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md b/docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md index 48cd9a7..d170ea3 100644 --- a/docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md +++ b/docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md @@ -50,10 +50,11 @@ The most important finding is not coverage — it is strategic priority. Classic | Band | Brands | |---|---| -| 100% (single or dual dominant) | Irontech Doll (100%), Gynoid (90%) | +| 90–100% | Irontech Doll (100%), Gynoid (90%) | | 80–89% | Lusandy Doll (85.7%), Dime Doll (83.9%), Hitdoll (80%), ILdoll (80%), Angel Kiss (80%), YL Doll (80%) | -| 70–79% | Lilydoll (78.6%), FunWest (73.6%), MD Doll (72.5%), HR Doll (70%), Irokebijin (70%), JY Doll (70%), Jarliet (70%), SM Doll (70%), Real Lady (75%), JK Doll (75%), WM Doll (60%), XT Doll (60%), SE Doll (60%), 6YE Premium (60%), AS Doll (50%) | -| < 60% | Sanhui (57.1%), Game Lady (66.7%), Tayu (66.7%), Jiusheng (62.5%), Piper Doll (40%) | +| 70–79% | Lilydoll (78.6%), Real Lady (75%), JK Doll (75%), FunWest (73.6%), MD Doll (72.5%), HR Doll (70%), Irokebijin (70%), JY Doll (70%), Jarliet (70%), SM Doll (70%) | +| 60–69% | Game Lady (66.7%), Tayu (66.7%), Jiusheng (62.5%), WM Doll (60%), XT Doll (60%), SE Doll (60%), 6YE Premium (60%) | +| < 60% | Sanhui (57.1%), AS Doll (50%), Piper Doll (40%) | **Market median top-2 concentration:** ~72% **ZELEX top-2 concentration:** 84.2% @@ -125,12 +126,12 @@ The most important finding is not coverage — it is strategic priority. Classic | Family | Availability | Diff. | Demand | SEO | Conversion | Merch | Qualification | Roadmap | **Composite** | |---|---:|---:|---:|---:|---:|---:|---:|---:|---:| -| The Muse | 5 | 2 | 4 | 3 | 5 | 4 | 3 | 2 | **3.5** | -| The Icon | 3 | 4 | 4 | 4 | 4 | 5 | 5 | 3 | **4.0** | -| The Siren | 2 | 4 | 4 | 5 | 3 | 4 | 4 | 5 | **3.8** | -| The Empress | 1 | 2 | 3 | 3 | 1 | 3 | 2 | 3 | **2.3** | -| The Classic | 1 | 3 | 5 | 5 | 1 | 4 | 4 | 5 | **3.4** | -| The Sculpt | 1 | 2 | 3 | 3 | 1 | 3 | 2 | 3 | **2.3** | +| The Muse | 5 | 2 | 4 | 3 | 5 | 4 | 3 | 2 | **3.7** | +| The Icon | 3 | 4 | 4 | 4 | 4 | 5 | 5 | 3 | **3.9** | +| The Siren | 2 | 4 | 4 | 5 | 3 | 4 | 4 | 5 | **3.7** | +| The Empress | 1 | 2 | 3 | 3 | 1 | 3 | 2 | 3 | **2.0** | +| The Classic | 1 | 3 | 5 | 5 | 1 | 4 | 4 | 5 | **3.1** | +| The Sculpt | 1 | 2 | 3 | 3 | 1 | 3 | 2 | 3 | **2.0** | **Score definitions:** Availability = number of live bodies (5 = ≥10, 1 = 0); Diff. = differentiation vs. competitors; Demand = buyer search volume proxy; SEO = organic content opportunity; Conversion = ability to generate an inquiry from a quiz/compare path; Merch = visual merchandising potential; Qualification = ability to qualify the buyer for a specific SKU; Roadmap = strategic value to future product additions. diff --git a/docs/research/competitor-family-coverage-matrix.md b/docs/research/competitor-family-coverage-matrix.md index 778fab0..79edd67 100644 --- a/docs/research/competitor-family-coverage-matrix.md +++ b/docs/research/competitor-family-coverage-matrix.md @@ -50,7 +50,7 @@ This report maps accessible competitor body-style catalogues into the ZELEX six- | Angel Kiss | 10 | 0 | 2 | 5 | 0 | 0 | 3 | 80.0% | 157-172 cm | | Dime Doll | 31 | 2 | 2 | 21 | 0 | 5 | 1 | 83.9% | 165-172 cm | | FunWest | 106 | 0 | 40 | 38 | 10 | 1 | 17 | 73.6% | 150-168 cm | -| Game Lady | 6 | 0 | 2 | 2 | 0 | 1 | 1 | 66.7% | 16-171 cm | +| Game Lady | 6 | 0 | 2 | 2 | 0 | 1 | 1 | 66.7% | 156-171 cm | | Gynoid | 10 | 5 | 0 | 1 | 0 | 0 | 4 | 90.0% | 155-180 cm | | HR Doll | 10 | 0 | 3 | 4 | 1 | 2 | 0 | 70.0% | 150-170 cm | | Hitdoll | 5 | 1 | 0 | 2 | 2 | 0 | 0 | 80.0% | 150-170 cm | diff --git a/docs/research/source-log.md b/docs/research/source-log.md index e1f838d..b716681 100644 --- a/docs/research/source-log.md +++ b/docs/research/source-log.md @@ -38,7 +38,7 @@ Three brands were sourced directly from manufacturer-controlled endpoints. These --- ### Irontech Doll -**Source:** `https://irontech.com/` (official manufacturer product pages) +**Source:** `https://www.irontechdoll.com/` (official manufacturer product pages) **Profiles:** 11 **Confidence mix:** exact 1 · near 5 · manual-review 5 **Exact+near:** 54.5% diff --git a/scripts/analyze_independent_groupings.py b/scripts/analyze_independent_groupings.py index a9efbc2..bd20520 100644 --- a/scripts/analyze_independent_groupings.py +++ b/scripts/analyze_independent_groupings.py @@ -405,7 +405,7 @@ def main() -> None: OUT_JSON.write_text( json.dumps( { - "generated_from": str(DB_PATH.relative_to(ROOT)), + "generated_from": DB_PATH.relative_to(ROOT).as_posix(), "line_columns": LINE_COLUMNS, "line_matrix": line_matrix, "full_body_competitor_matrix": full_body_rows, diff --git a/scripts/build_competitor_catalog_taxonomy.py b/scripts/build_competitor_catalog_taxonomy.py index 9b3f38f..1dbb482 100644 --- a/scripts/build_competitor_catalog_taxonomy.py +++ b/scripts/build_competitor_catalog_taxonomy.py @@ -457,6 +457,9 @@ def scrape_supplier(config: SupplierConfig, session: requests.Session, families: if not (height and bust and waist and hips): continue + if not (50 <= height <= 250): + height = None + continue whr = round(waist / hips, 3) bwr = round(bust / waist, 3) @@ -792,14 +795,14 @@ def scrape_siliconwives(config: SiliconWivesConfig, session: requests.Session, f rows = [] seen_codes: set[str] = set() for prod in products: - body_html = prod.get("body_html", "") + body_html = prod.get("body_html") or "" height, bust, waist, hips, weight, cup = _sw_body_html_measurements(body_html) if not (height and bust and waist and hips): continue if height < config.min_height_cm: continue - title = prod.get("title", "") - handle = prod.get("handle", "") + title = prod.get("title") or "" + handle = prod.get("handle") or "" body_code = extract_body_code(title, handle) or handle.upper() if body_code in seen_codes: continue @@ -867,7 +870,7 @@ def build_summary(rows: list[dict], unavailable: list[dict], inventory_only: lis ] material_text = " ".join((item.get("material") or "").lower() for item in items) silicone_count = sum(1 for item in items if "silicone" in (item.get("material") or "").lower()) - tpe_count = sum(1 for item in items if "tpe" in (item.get("material") or "").lower()) + tpe_count = sum(1 for item in items if any(k in (item.get("material") or "").lower() for k in ("tpe", "hybrid"))) brands.append( { "brand": brand, @@ -1316,12 +1319,28 @@ def main() -> None: rows = load_zelex_baseline() for supplier in SUPPLIERS: - rows.extend(scrape_supplier(supplier, session, families)) - rows.extend(scrape_irontech(session, families)) - rows.extend(scrape_tayu(session, families)) + try: + rows.extend(scrape_supplier(supplier, session, families)) + except Exception as exc: + print(f"[main] scrape_supplier({supplier.brand}) failed: {exc}") + try: + rows.extend(scrape_irontech(session, families)) + except Exception as exc: + print(f"[main] scrape_irontech failed: {exc}") + try: + rows.extend(scrape_tayu(session, families)) + except Exception as exc: + print(f"[main] scrape_tayu failed: {exc}") for sw_config in SW_COLLECTIONS: - rows.extend(scrape_siliconwives(sw_config, session, families)) - realdoll_inventory = capture_realdoll_inventory(session) + try: + rows.extend(scrape_siliconwives(sw_config, session, families)) + except Exception as exc: + print(f"[main] scrape_siliconwives({sw_config.brand}) failed: {exc}") + try: + realdoll_inventory = capture_realdoll_inventory(session) + except Exception as exc: + print(f"[main] capture_realdoll_inventory failed: {exc}") + realdoll_inventory = None unavailable = list(UNAVAILABLE_COMPETITORS) if realdoll_inventory: diff --git a/scripts/scrape_competitors.js b/scripts/scrape_competitors.js index 8a89011..3932894 100644 --- a/scripts/scrape_competitors.js +++ b/scripts/scrape_competitors.js @@ -225,58 +225,60 @@ async function main() { const output = { scraped_at: new Date().toISOString(), summary: [], total_products: 0, products: [] }; const browser = await chromium.launch({ headless: true }); - for (const target of TARGETS) { - console.log(`\n══ ${target.name} (${target.url}) ══`); - let products = []; - let method = 'shopify_api'; - - try { - products = await fetchShopifyCatalog(target.url); - console.log(` Shopify API: ${products.length} total products`); - } catch (err) { - console.log(` Shopify failed (${err.message}), trying Playwright...`); - products = await playwrightCatalog(browser, target); - method = 'playwright_dom'; - } + try { + for (const target of TARGETS) { + console.log(`\n══ ${target.name} (${target.url}) ══`); + let products = []; + let method = 'shopify_api'; + + try { + products = await fetchShopifyCatalog(target.url); + console.log(` Shopify API: ${products.length} total products`); + } catch (err) { + console.log(` Shopify failed (${err.message}), trying Playwright...`); + products = await playwrightCatalog(browser, target); + method = 'playwright_dom'; + } - // Enrich with product-page measurements (especially for priority brands) - if (products.length > 0) { - console.log(` Running measurement depth pass...`); - await enrichMeasurements(browser, target.url, products, 30); - } + // Enrich with product-page measurements (especially for priority brands) + if (products.length > 0) { + console.log(` Running measurement depth pass...`); + await enrichMeasurements(browser, target.url, products, 30); + } - // Tag source - for (const p of products) { - p.source = target.name; - p.source_url = target.url; - p.is_priority = PRIORITY_BRANDS.some(b => (p.brand || p.title || '').toLowerCase().includes(b)); - } + // Tag source + for (const p of products) { + p.source = target.name; + p.source_url = target.url; + p.is_priority = PRIORITY_BRANDS.some(b => (p.brand || p.title || '').toLowerCase().includes(b)); + } - const brands = [...new Set(products.map(p => p.brand).filter(Boolean))].sort(); - const priced = products.filter(p => p.price_usd != null).length; - const measured = products.filter(p => p.height_cm != null).length; - const priorityHits = products.filter(p => p.is_priority); - - output.summary.push({ - source: target.name, - type: target.type, - method, - product_count: products.length, - priced_count: priced, - measured_count: measured, - brands_found: brands, - priority_brands_found: [...new Set(priorityHits.map(p => p.brand))], - priority_products: priorityHits.length, - }); + const brands = [...new Set(products.map(p => p.brand).filter(Boolean))].sort(); + const priced = products.filter(p => p.price_usd != null).length; + const measured = products.filter(p => p.height_cm != null).length; + const priorityHits = products.filter(p => p.is_priority); + + output.summary.push({ + source: target.name, + type: target.type, + method, + product_count: products.length, + priced_count: priced, + measured_count: measured, + brands_found: brands, + priority_brands_found: [...new Set(priorityHits.map(p => p.brand))], + priority_products: priorityHits.length, + }); - output.products.push(...products); - console.log(` Brands: ${brands.slice(0, 10).join(', ')}${brands.length > 10 ? ` +${brands.length - 10} more` : ''}`); - console.log(` Priority brands: ${[...new Set(priorityHits.map(p => p.brand))].join(', ') || 'none found'}`); - console.log(` Priced: ${priced}/${products.length} Measured: ${measured}/${products.length}`); + output.products.push(...products); + console.log(` Brands: ${brands.slice(0, 10).join(', ')}${brands.length > 10 ? ` +${brands.length - 10} more` : ''}`); + console.log(` Priority brands: ${[...new Set(priorityHits.map(p => p.brand))].join(', ') || 'none found'}`); + console.log(` Priced: ${priced}/${products.length} Measured: ${measured}/${products.length}`); + } + } finally { + await browser.close(); } - await browser.close(); - output.total_products = output.products.length; fs.writeFileSync(OUT_PATH, JSON.stringify(output, null, 2)); From b432425baf1d011d123e0a86c6b1d63a17b8cc95 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 11:28:29 -0400 Subject: [PATCH 10/57] fix: apply PR #29 review comment fixes - quiz.html: recalculate fromSecond after fallback block so splitAt divider stays anchored to first runner-up character index - character.html resetBar(): guard inner rAF callback against autoTimer being cleared during the two-frame delay - character.html goTo(): set lbImgEl.alt dynamically using p.name and photo index for screen-reader accessibility - character.html openLightbox/closeLightbox: save lightboxAutoWasRunning before stopAuto() so auto-rotation only restarts if it was running - contact.html showError(): remove dead msgEl variable (assigned, never used) Co-Authored-By: Claude Sonnet 4.6 --- character.html | 8 ++++++-- contact.html | 1 - quiz.html | 7 +++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/character.html b/character.html index 2f89fbc..e8020e7 100644 --- a/character.html +++ b/character.html @@ -307,6 +307,7 @@

${ZX.esc(p.name)}

progEl.style.transition = 'none'; progEl.style.width = '0%'; requestAnimationFrame(() => requestAnimationFrame(() => { + if (!autoTimer) return; progEl.style.transition = `width ${ROTATE_MS}ms linear`; progEl.style.width = '100%'; })); @@ -333,7 +334,7 @@

${ZX.esc(p.name)}

document.querySelectorAll('#galstrip img').forEach((im, i) => im.classList.toggle('sel', i === currentIdx)); const lbImgEl = document.getElementById('lb-img'); const lbCtrEl = document.getElementById('lb-counter'); - if (lbImgEl) lbImgEl.src = allImages[currentIdx]; + if (lbImgEl) { lbImgEl.src = allImages[currentIdx]; lbImgEl.alt = `${p.name} — photo ${currentIdx + 1}`; } if (lbCtrEl) lbCtrEl.textContent = allImages.length > 1 ? `${currentIdx + 1} / ${allImages.length}` : ''; resetBar(); } @@ -366,8 +367,11 @@

${ZX.esc(p.name)}

const lb = document.getElementById('lightbox'); + let lightboxAutoWasRunning = false; + function openLightbox(idx) { if (!allImages.length) return; + lightboxAutoWasRunning = !!autoTimer; stopAuto(); goTo(idx); lb.classList.add('open'); @@ -377,7 +381,7 @@

${ZX.esc(p.name)}

function closeLightbox() { lb.classList.remove('open'); document.body.style.overflow = ''; - startAuto(); + if (lightboxAutoWasRunning) startAuto(); } // Click hero image to open lightbox diff --git a/contact.html b/contact.html index 70bf49f..aa7603c 100644 --- a/contact.html +++ b/contact.html @@ -452,7 +452,6 @@

No pressure

function showError(msg) { var errDiv = document.getElementById('form-error'); - var msgEl = document.getElementById('form-error-msg'); var email = ZX.INQUIRY_EMAIL || 'inquiries@zelexdoll.com'; if (errDiv) errDiv.style.display = 'block'; if (msg) { var t = document.getElementById('form-error-text'); if (t) t.textContent = msg; } diff --git a/quiz.html b/quiz.html index ba95646..dd287bc 100644 --- a/quiz.html +++ b/quiz.html @@ -388,6 +388,13 @@

} } + if (fromSecond > 0 && runner) { + const firstRunnerIdx = matches.findIndex(c => c.body && c.body.family === runner); + if (firstRunnerIdx !== -1) { + fromSecond = matches.length - firstRunnerIdx; + } + } + const splitAt = matches.length - fromSecond; // update progress bar to 100% From 42e3332eb09557b7644258cf091bd9c13c6033a9 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 12:26:23 -0400 Subject: [PATCH 11/57] feat: ship compare funnel and analytics sanity guardrails --- .github/workflows/ci.yml | 33 ++ README.md | 1 + assets/site.css | 38 +++ assets/site.js | 128 ++++++++ body.html | 17 + browse.html | 128 +++++++- character.html | 24 ++ compare.html | 179 +++++++++++ contact.html | 199 ++++++++++-- docs/pdr/PDR-analytics-dashboard-cookbook.md | 198 ++++++++++++ ...PDR-analytics-dashboard-handoff-runbook.md | 127 ++++++++ docs/pdr/PDR-analytics-event-taxonomy.md | 203 ++++++++++++ .../PDR-analytics-sample-events-broken.ndjson | 2 + ...ytics-sample-events-low-attribution.ndjson | 4 + docs/pdr/PDR-analytics-sample-events.ndjson | 8 + ...R-analytics-sanity-thresholds.invalid.json | 21 ++ docs/pdr/PDR-analytics-sanity-thresholds.json | 21 ++ ...lytics-sanity-thresholds.missing-keys.json | 19 ++ .../pdr/PDR-analytics-smoke-test-checklist.md | 126 ++++++++ docs/pdr/PDR-implementation-audit.md | 48 +++ index.html | 46 +++ scripts/analytics_event_sanity.py | 290 ++++++++++++++++++ scripts/run_analytics_sanity.ps1 | 100 ++++++ scripts/run_analytics_sanity_ci_parity.ps1 | 27 ++ scripts/run_analytics_sanity_suite.ps1 | 143 +++++++++ 25 files changed, 2104 insertions(+), 26 deletions(-) create mode 100644 compare.html create mode 100644 docs/pdr/PDR-analytics-dashboard-cookbook.md create mode 100644 docs/pdr/PDR-analytics-dashboard-handoff-runbook.md create mode 100644 docs/pdr/PDR-analytics-event-taxonomy.md create mode 100644 docs/pdr/PDR-analytics-sample-events-broken.ndjson create mode 100644 docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson create mode 100644 docs/pdr/PDR-analytics-sample-events.ndjson create mode 100644 docs/pdr/PDR-analytics-sanity-thresholds.invalid.json create mode 100644 docs/pdr/PDR-analytics-sanity-thresholds.json create mode 100644 docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json create mode 100644 docs/pdr/PDR-analytics-smoke-test-checklist.md create mode 100644 docs/pdr/PDR-implementation-audit.md create mode 100644 scripts/analytics_event_sanity.py create mode 100644 scripts/run_analytics_sanity.ps1 create mode 100644 scripts/run_analytics_sanity_ci_parity.ps1 create mode 100644 scripts/run_analytics_sanity_suite.ps1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d77cd5..9dae16f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,39 @@ jobs: - name: Validate pages, inline JS, and catalog JSON run: node .github/scripts/validate-site.mjs + - name: Analytics sanity suite + shell: pwsh + run: | + echo "Using threshold config: docs/pdr/PDR-analytics-sanity-thresholds.json" + $cfg = Get-Content -Raw docs/pdr/PDR-analytics-sanity-thresholds.json | ConvertFrom-Json + echo "Analytics config schema_version: $($cfg.schemaVersion)" + ./scripts/run_analytics_sanity_suite.ps1 + + - name: Analytics config guardrail (expected fail) + shell: pwsh + run: | + pwsh -File scripts/run_analytics_sanity_suite.ps1 -ConfigPath docs/pdr/PDR-analytics-sanity-thresholds.invalid.json + if ($LASTEXITCODE -ne 2) { + Write-Error "Expected exit code 2 for invalid analytics config, got $LASTEXITCODE" + exit 1 + } + + - name: Analytics config guardrail missing keys (expected fail) + shell: pwsh + run: | + pwsh -File scripts/run_analytics_sanity_suite.ps1 -ConfigPath docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json + if ($LASTEXITCODE -ne 2) { + Write-Error "Expected exit code 2 for missing-keys analytics config, got $LASTEXITCODE" + exit 1 + } + + - name: Upload analytics sanity artifacts + uses: actions/upload-artifact@v4 + with: + name: analytics-sanity-summaries + path: .artifacts/analytics + if-no-files-found: error + - name: Guard — no images, video, or secrets committed run: | set -e diff --git a/README.md b/README.md index 43ab73d..5f94a03 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ In `assets/site.js`: - `INQUIRY_EMAIL` — the real inquiry address (placeholder: `inquiries@zelexdoll.com`). - `FORM_ENDPOINT` — optional Formspree/Getform URL; when empty, the contact form falls back to a prefilled `mailto:`. +- `docs/pdr/PDR-analytics-sanity-thresholds.json` — single source of truth for analytics sanity fixture paths and threshold defaults. --- diff --git a/assets/site.css b/assets/site.css index a0e6bea..e2a7bb3 100644 --- a/assets/site.css +++ b/assets/site.css @@ -237,3 +237,41 @@ footer .fl a:hover{color:var(--text)} .err{max-width:600px;margin:60px auto;text-align:center;color:var(--coral)} .err code{background:#222;padding:2px 7px;border-radius:var(--r-sm);color:var(--cream)} .loading{max-width:600px;margin:80px auto;text-align:center;color:var(--muted)} + +/* === PDR-002/003 Concierge Atlas + Compare ===================== */ +.trust-strip{max-width:var(--maxw);margin:-18px auto 34px;padding:0 24px;display:grid;grid-template-columns:repeat(4,1fr);gap:10px;position:relative;z-index:4} +.trust-item{background:rgba(27,27,27,.92);border:1px solid color-mix(in srgb,var(--gold) 22%,transparent);border-radius:var(--r-md);padding:12px 14px;text-align:center;box-shadow:var(--sh-card)} +.trust-item b{display:block;color:var(--cream);font-size:12px;letter-spacing:1.5px;text-transform:uppercase} +.trust-item span{color:var(--muted);font-size:11px} +@media(max-width:820px){.trust-strip{grid-template-columns:repeat(2,1fr);margin-top:18px}} +@media(max-width:480px){.trust-strip{grid-template-columns:1fr}} + +.family-chooser{margin:54px 0 18px;display:grid;grid-template-columns:repeat(6,1fr);gap:12px} +.family-tile{min-height:142px;padding:18px 14px;border:1px solid var(--line);border-radius:var(--r-lg);background:radial-gradient(circle at 50% 0,color-mix(in srgb,var(--fam-color) 24%,transparent),transparent 60%),var(--panel);transition:.25s;position:relative;overflow:hidden} +.family-tile:hover{transform:translateY(-4px);border-color:var(--fam-color);box-shadow:var(--sh-card-hover)} +.family-tile .k{color:var(--fam-color);font-size:10px;letter-spacing:2px;text-transform:uppercase;margin-bottom:8px} +.family-tile h3{font-size:22px;margin-bottom:6px} +.family-tile p{color:var(--muted);font-size:12px;line-height:1.45} +.family-tile .status-note{margin-top:10px;display:inline-block;color:var(--muted);border:1px solid var(--line);border-radius:var(--r-pill);padding:3px 8px;font-size:9px;letter-spacing:1px;text-transform:uppercase} +@media(max-width:1120px){.family-chooser{grid-template-columns:repeat(3,1fr)}} +@media(max-width:620px){.family-chooser{grid-template-columns:1fr}} + +.compare-preview,.concierge-band{margin:54px 0 18px;border:1px solid color-mix(in srgb,var(--gold) 26%,transparent);border-radius:18px;background:linear-gradient(135deg,rgba(212,165,116,.08),transparent 36%),var(--panel);padding:28px;display:grid;grid-template-columns:1.3fr .7fr;gap:24px;align-items:center;box-shadow:var(--sh-card)} +.compare-preview h3,.concierge-band h3{font-size:clamp(26px,4vw,38px);line-height:1.1;margin-bottom:10px} +.compare-preview p,.concierge-band p{color:var(--muted);max-width:680px} +.compare-points{display:grid;gap:8px} +.compare-points span{display:block;color:var(--cream);background:rgba(255,255,255,.035);border:1px solid var(--line);border-radius:var(--r-md);padding:9px 11px;font-size:12px} +@media(max-width:760px){.compare-preview,.concierge-band{grid-template-columns:1fr}} + +.compare-page{max-width:var(--maxw);margin:0 auto;padding:26px 24px 80px} +.compare-hero{padding:44px 0 20px;max-width:820px} +.compare-hero h1{font-size:clamp(34px,6vw,58px);line-height:1.1;margin:10px 0} +.compare-hero p{color:var(--muted);max-width:720px} +.compare-controls{display:flex;gap:10px;flex-wrap:wrap;margin:20px 0 24px} +.compare-select{background:var(--panel2);border:1px solid var(--line);color:var(--text);border-radius:var(--r-md);padding:11px 12px;min-width:240px} +.compare-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--panel)} +.compare-table{width:100%;border-collapse:collapse;min-width:780px} +.compare-table th,.compare-table td{border-bottom:1px solid var(--line);padding:12px 14px;text-align:left;vertical-align:top;font-size:13px} +.compare-table th{color:var(--gold);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;background:rgba(255,255,255,.025)} +.compare-table td:first-child{color:var(--muted);width:170px;font-size:11px;letter-spacing:1.5px;text-transform:uppercase} +.compare-empty{color:var(--muted);padding:18px;border:1px dashed var(--line);border-radius:var(--r-lg);background:rgba(255,255,255,.02)} diff --git a/assets/site.js b/assets/site.js index 27d3904..266d34a 100644 --- a/assets/site.js +++ b/assets/site.js @@ -29,6 +29,132 @@ window.ZX = (function () { function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c])); } function img(c){ return (c.photoshoot && (c.photoshoot.hero_thumb || c.photoshoot.hero)) || ''; } + const ANALYTICS_SCHEMA_VERSION = '2026-06-06'; + const ANALYTICS_SESSION_KEY = 'zx_analytics_session_id'; + const ANALYTICS_DEBUG_KEY = 'zx_analytics_debug'; + const EVENT_ALIASES = { + compare_add_from_body: 'compare_add', + compare_add_from_character: 'compare_add', + compare_add_from_compare_page: 'compare_add', + compare_to_contact_click: 'compare_handoff_click', + compare_to_quiz_click: 'compare_handoff_click', + compare_view_empty: 'compare_view' + }; + + function createSessionId() { + const t = Date.now().toString(36); + const r = Math.random().toString(36).slice(2, 10); + return 'zx_' + t + '_' + r; + } + + function getSessionId() { + try { + let sid = ''; + try { sid = sessionStorage.getItem(ANALYTICS_SESSION_KEY) || ''; } catch (e) {} + if (!sid) { + try { sid = localStorage.getItem(ANALYTICS_SESSION_KEY) || ''; } catch (e) {} + } + if (!sid) sid = createSessionId(); + try { sessionStorage.setItem(ANALYTICS_SESSION_KEY, sid); } catch (e) {} + try { localStorage.setItem(ANALYTICS_SESSION_KEY, sid); } catch (e) {} + return sid; + } catch (e) { + return createSessionId(); + } + } + + function parseCodeList(raw) { + if (!raw) return []; + if (Array.isArray(raw)) { + return raw.map(x => String(x || '').trim()).filter(x => x && /^[A-Za-z0-9_-]+$/.test(x)); + } + return String(raw) + .split(',') + .map(x => (x || '').trim()) + .filter(x => x && /^[A-Za-z0-9_-]+$/.test(x)); + } + + function analyticsDebugEnabled() { + try { + const flag = String(qs('zx_analytics_debug') || '').toLowerCase(); + if (flag === '1' || flag === 'true' || flag === 'on') { + try { localStorage.setItem(ANALYTICS_DEBUG_KEY, '1'); } catch (e) {} + return true; + } + if (flag === '0' || flag === 'false' || flag === 'off') { + try { localStorage.removeItem(ANALYTICS_DEBUG_KEY); } catch (e) {} + return false; + } + return localStorage.getItem(ANALYTICS_DEBUG_KEY) === '1'; + } catch (e) { + return false; + } + } + + function normalizeTrackPayload(eventName, payload) { + const canonicalEvent = EVENT_ALIASES[eventName] || eventName; + const clean = Object.assign({}, payload || {}); + const codes = parseCodeList(clean.body_codes || clean.compare_codes); + + if (codes.length) { + clean.body_codes = codes.join(','); + if (!(typeof clean.compare_count === 'number')) clean.compare_count = codes.length; + } + + if (typeof clean.message === 'string') { + clean.error_message = clean.message.trim().slice(0, 180); + delete clean.message; + } + + ['body_code','family','series','channel','context','cta','intent','timeline','source_page','view_state'].forEach(function(k) { + if (clean[k] != null) clean[k] = String(clean[k]).trim(); + }); + + return Object.assign({ + event: canonicalEvent, + event_original: eventName, + source: 'howiezz-web', + schema_version: ANALYTICS_SCHEMA_VERSION, + session_id: getSessionId(), + ts: new Date().toISOString(), + page: (location.pathname.split('/').pop() || 'index.html').toLowerCase(), + path: location.pathname + }, clean); + } + + // Lightweight analytics hook. Emits to dataLayer when present and dispatches a + // custom event for any local listeners. Safe no-op when analytics is absent. + function track(eventName, payload){ + const eventPayload = normalizeTrackPayload(eventName, payload); + try { + if (Array.isArray(window.dataLayer)) window.dataLayer.push(eventPayload); + } catch (e) {} + try { + window.dispatchEvent(new CustomEvent('zx:track', { detail: eventPayload })); + } catch (e) {} + if (analyticsDebugEnabled()) { + try { console.debug('[ZX analytics]', eventPayload); } catch (e) {} + } + } + + function trackPageViewOnce() { + if (window.__zxPageViewTracked) return; + window.__zxPageViewTracked = true; + const pageName = (location.pathname.split('/').pop() || 'index.html').toLowerCase(); + track('page_view', { + context: 'navigation', + source_page: pageName.replace('.html', '') + }); + } + + try { + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', trackPageViewOnce, { once: true }); + } else { + trackPageViewOnce(); + } + } catch (e) {} + // Link to the on-site contact form, prefilled for this character. function contactHref(c){ return `contact.html?id=${encodeURIComponent(c.character_id)}`; } @@ -124,6 +250,7 @@ window.ZX = (function () { function mountNav(active){ const items = [ ['index.html','Atlas'], ['browse.html','Browse'], ['family.html','Families'], + ['compare.html','Compare'], ['quiz.html','Find Yours'], ['contact.html','Contact'] ]; const links = items.map(([h,l])=>`${l}`).join(''); @@ -231,6 +358,7 @@ window.ZX = (function () { } return { load, famColor, qs, esc, img, inquireHref, contactHref, INQUIRY_EMAIL, FORM_ENDPOINT, + track, mountNav, mountFooter, fail, charCard, bodyCard, metricsLegend, repImg, heroBackdrop, revealInit, SERIES_ORDER, SERIES_SUB, FAMILIES }; diff --git a/body.html b/body.html index 43e8619..de94d34 100644 --- a/body.html +++ b/body.html @@ -222,6 +222,7 @@ ? `← ${ZX.esc(series)}` : ''; const quizBtn = `Find Your Match`; + const compareBtn = ``; /* ---- hero injection ---- */ const repSrc = ZX.repImg(chars, 0); @@ -248,6 +249,7 @@

${family ? `${ZX.esc(famLabel)}` : ZX.esc(famLa ${archiveNote}

@@ -262,6 +264,21 @@

${family ? `${ZX.esc(famLabel)}` : ZX.esc(famLa
${castHTML}
`; + const compareBtnEl = document.getElementById('add-compare-body'); + if (compareBtnEl) { + compareBtnEl.addEventListener('click', () => { + const key = 'zx_compare_bodies'; + let cur = []; + try { cur = JSON.parse(localStorage.getItem(key) || '[]'); } catch (e) { cur = []; } + if (!Array.isArray(cur)) cur = []; + cur = cur.filter(Boolean).filter(x => x !== '.'); + if (!cur.includes(bc)) cur.push(bc); + localStorage.setItem(key, JSON.stringify(cur.slice(0, 4))); + ZX.track('compare_add', { body_code: bc, family: family || '', series: series || '', compare_count: cur.slice(0, 4).length, context: 'body_detail', source_page: 'body' }); + location.href = 'compare.html'; + }); + } + ZX.revealInit(); } diff --git a/browse.html b/browse.html index 4a6d3bb..b404df7 100644 --- a/browse.html +++ b/browse.html @@ -76,9 +76,17 @@ cursor:pointer;border-bottom:1px solid transparent;transition:.2s} .reset-link:hover{border-color:var(--gold)} +.compare-quick{display:flex;align-items:center;gap:8px;flex-wrap:wrap} +.compare-count{font-size:12px;color:var(--muted);letter-spacing:.4px} +.compare-quick .btn{padding:7px 12px;font-size:11px;letter-spacing:1px;text-transform:uppercase} + /* ---- grid wrapper ---- */ #grid-container{max-width:var(--maxw);margin:0 auto;padding:0 24px 60px} +.browse-item{display:grid;gap:8px} +.add-compare-browse{width:100%;padding:9px 10px;font-size:11px;letter-spacing:1.6px;text-transform:uppercase} +.add-compare-browse.done{border-color:var(--Muse);color:var(--Muse)} + /* ---- empty state ---- */ .empty-state{ text-align:center;padding:80px 24px; @@ -133,6 +141,11 @@

Browse Every Character

+
+ Compare set: 0 + Open Compare + +
@@ -144,6 +157,7 @@

Browse Every Character

diff --git a/compare.html b/compare.html new file mode 100644 index 0000000..0fb3b8e --- /dev/null +++ b/compare.html @@ -0,0 +1,179 @@ + + + + + +Compare Bodies - ZELEX Atlas + + + + + +
Atlas Compare Bodies
+
+
+
Body Architecture
+

Compare the silhouettes before you choose.

+

Use this as the decision layer between raw product codes and a private inquiry. Add up to four body architectures and compare stature, ratios, family, and buyer-fit signals.

+
+ +
+ + + + Ask concierge +
+ +
+
Loading body profiles...
+
+
+ + + + + diff --git a/contact.html b/contact.html index aa7603c..440e7a7 100644 --- a/contact.html +++ b/contact.html @@ -26,6 +26,12 @@ .char-chip .chip-name{font-family:'Playfair Display',serif;font-size:18px;font-weight:600;line-height:1.2} .char-chip .chip-sub{font-size:11px;color:var(--muted);margin-top:2px;letter-spacing:.5px} + .compare-chip{background:var(--panel2);border:1px solid color-mix(in srgb,var(--blue) 35%,transparent);border-radius:var(--r-md);padding:12px 16px;margin-bottom:24px} + .compare-chip .chip-label{font-size:var(--t-xs);letter-spacing:2px;text-transform:uppercase;color:var(--blue);margin-bottom:6px} + .compare-list{display:flex;gap:8px;flex-wrap:wrap} + .compare-list .bcode{font-size:12px} + .compare-sub{margin-top:8px;font-size:11px;color:var(--muted);letter-spacing:.3px;line-height:1.4} + /* form */ .form-group{margin-bottom:20px} .form-group label{display:block;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--muted);margin-bottom:7px} @@ -160,6 +166,41 @@

Something went wrong.

+
+
+ + +
+
+ + +
+
+ +
+ + +
+
@@ -282,48 +323,137 @@

No pressure

// ── Prefill from ?id= ──────────────────────────────────────── function prefill(m) { + if (!m || !m.byId) return; + var id = ZX.qs('id'); - if (!id || !m || !m.byId) return; - var c = m.byId[id]; - if (!c) return; - - var persona = c.persona || {}; - var body = c.body || {}; - var ph = c.photoshoot || {}; - var name = persona.name || ''; + var c = (id && m.byId[id]) ? m.byId[id] : null; + + function parseCodes(raw) { + if (!raw) return []; + return String(raw) + .split(',') + .map(function(x) { return (x || '').trim(); }) + .filter(function(x) { + return x && x !== '.' && /^[A-Za-z0-9_-]+$/.test(x); + }); + } + + function storedCodes() { + try { + var parsed = JSON.parse(localStorage.getItem('zx_compare_bodies') || '[]'); + if (!Array.isArray(parsed)) return []; + return parsed + .map(function(x) { return String(x || '').trim(); }) + .filter(function(x) { return x && x !== '.' && /^[A-Za-z0-9_-]+$/.test(x); }); + } catch (e) { + return []; + } + } + + var compareCodes = parseCodes(ZX.qs('compare')); + if (!compareCodes.length) compareCodes = storedCodes(); + + if (c && c.body_code && !compareCodes.includes(c.body_code)) { + compareCodes.unshift(c.body_code); + } + compareCodes = compareCodes.slice(0, 4); + + if (!c && !compareCodes.length) return; + + var persona = c ? (c.persona || {}) : {}; + var body = c ? (c.body || {}) : {}; + var ph = c ? (c.photoshoot || {}) : {}; + var name = persona.name || ''; var title = persona.title || ''; - var bc = c.body_code || ''; - var series = c.series || ''; + var bc = c ? (c.body_code || '') : ''; + var series = c ? (c.series || '') : ''; var price = ph.price ? ' · $' + ph.price : ''; var family = body.family ? ' · ' + body.family : ''; // character chip var chipArea = document.getElementById('char-chip-area'); if (chipArea) { - var thumbUrl = ZX.img(c); - var thumbHtml = thumbUrl - ? '' + ZX.esc(name) + '' - : '
' + ZX.esc((name || '?').charAt(0).toUpperCase()) + '
'; - chipArea.innerHTML = - '
' + - thumbHtml + - '
' + - '
You\'re inquiring about
' + - '
' + ZX.esc(name) + '
' + - '
' + ZX.esc(title) + (title && (bc || series) ? ' · ' : '') + ZX.esc(bc) + (bc && series ? ' · ' : '') + ZX.esc(series) + ZX.esc(price) + '
' + - '
' + - '
'; + var chunks = []; + if (c) { + var thumbUrl = ZX.img(c); + var thumbHtml = thumbUrl + ? '' + ZX.esc(name) + '' + : '
' + ZX.esc((name || '?').charAt(0).toUpperCase()) + '
'; + chunks.push( + '
' + + thumbHtml + + '
' + + '
You\'re inquiring about
' + + '
' + ZX.esc(name) + '
' + + '
' + ZX.esc(title) + (title && (bc || series) ? ' · ' : '') + ZX.esc(bc) + (bc && series ? ' · ' : '') + ZX.esc(series) + ZX.esc(price) + '
' + + '
' + + '
' + ); + } + + if (compareCodes.length) { + var compareItems = compareCodes.map(function(code) { + return '' + ZX.esc(code) + ''; + }).join(''); + var compareRead = compareCodes.map(function(code) { + var bucket = m.byBody[code] || []; + var lead = bucket.find(function(x) { return x.status === 'live'; }) || bucket[0] || null; + if (!lead || !lead.body) return code; + var fam = lead.body.family ? (' - ' + lead.body.family.replace('The ', '')) : ''; + return code + fam; + }).join(' | '); + + chunks.push( + '
' + + '
Compare set attached
' + + '
' + compareItems + '
' + + '
' + ZX.esc(compareRead) + '
' + + '
' + ); + } + + chipArea.innerHTML = chunks.join(''); } // Replace free-text char field with readonly prefilled value var charGroup = document.getElementById('char-field-group'); if (charGroup) { - var prefillVal = name + (bc ? ' — ' + bc : '') + (series ? ' (' + series + ')' : '') + family; + var prefillVal = ''; + if (c) { + prefillVal = name + (bc ? ' - ' + bc : '') + (series ? ' (' + series + ')' : '') + family; + } + if (compareCodes.length) { + var compareText = 'Compare set: ' + compareCodes.join(', '); + prefillVal = prefillVal ? (prefillVal + ' | ' + compareText) : compareText; + } + charGroup.innerHTML = '' + '
' + ZX.esc(prefillVal) + '
' + ''; } + + var msgField = document.getElementById('f-message'); + if (msgField && !msgField.value.trim() && compareCodes.length) { + msgField.value = 'I would like guidance on these body architectures: ' + compareCodes.join(', ') + '.'; + } +} + +function getEntryMeta() { + function parseCodes(raw) { + if (!raw) return []; + return String(raw) + .split(',') + .map(function(x) { return (x || '').trim(); }) + .filter(function(x) { return x && x !== '.' && /^[A-Za-z0-9_-]+$/.test(x); }); + } + return { + entry_source: String(ZX.qs('src') || '').trim(), + entry_cta: String(ZX.qs('cta') || '').trim(), + entry_context: String(ZX.qs('context') || '').trim(), + entry_channel: String(ZX.qs('channel') || '').trim(), + entry_compare_count: parseCodes(ZX.qs('compare')).length + }; } // ── Validation ─────────────────────────────────────────────── @@ -401,6 +531,9 @@

No pressure

fields.country ? 'Country: ' + fields.country : null, fields.character ? 'Character of interest: ' + fields.character : null, fields.budget ? 'Budget: ' + fields.budget : null, + fields.intent ? 'Intent: ' + fields.intent : null, + fields.timeline? 'Timeline: '+ fields.timeline: null, + fields.use_context ? 'Use context: ' + fields.use_context : null, '', 'Message:', fields.message || '' @@ -427,6 +560,9 @@

No pressure

country: val('f-country'), character: charVal, budget: val('f-budget'), + intent: val('f-intent'), + timeline: val('f-timeline'), + use_context: val('f-use'), message: val('f-message') }; } @@ -448,6 +584,7 @@

No pressure

var email = ZX.INQUIRY_EMAIL || 'inquiries@zelexdoll.com'; var sl = document.getElementById('success-email-link'); if (sl) { sl.href = 'mailto:' + email; sl.textContent = email; } + ZX.track('inquiry_submit_success', Object.assign({ channel: usedMailto ? 'mailto' : 'endpoint', context: 'contact_form', source_page: 'contact' }, getEntryMeta())); } function showError(msg) { @@ -462,6 +599,7 @@

No pressure

var spinner = document.getElementById('submit-spinner'); if (btn) btn.disabled = false; if (spinner) spinner.style.display = 'none'; + ZX.track('inquiry_submit_error', Object.assign({ message: msg || '', context: 'contact_form', source_page: 'contact' }, getEntryMeta())); } // ── Form submit ────────────────────────────────────────────── @@ -469,7 +607,10 @@

No pressure

e.preventDefault(); clearErrors(); - if (!validate()) return; + if (!validate()) { + ZX.track('inquiry_validation_failed', Object.assign({ context: 'contact_form', source_page: 'contact' }, getEntryMeta())); + return; + } var btn = document.getElementById('submit-btn'); var spinner = document.getElementById('submit-spinner'); @@ -482,6 +623,14 @@

No pressure

var fields = collectFields(); var endpoint = (typeof ZX !== 'undefined' && ZX.FORM_ENDPOINT) ? ZX.FORM_ENDPOINT : ''; + ZX.track('inquiry_submit_attempt', Object.assign({ + has_character_context: !!fields.character, + has_compare_context: (fields.character || '').indexOf('Compare set:') >= 0, + intent: fields.intent || '', + timeline: fields.timeline || '', + context: 'contact_form', + source_page: 'contact' + }, getEntryMeta())); if (endpoint) { // ── Real backend path ────────────────────────────────── diff --git a/docs/pdr/PDR-analytics-dashboard-cookbook.md b/docs/pdr/PDR-analytics-dashboard-cookbook.md new file mode 100644 index 0000000..befc1f9 --- /dev/null +++ b/docs/pdr/PDR-analytics-dashboard-cookbook.md @@ -0,0 +1,198 @@ +# PDR Analytics Dashboard Cookbook + +Status: Active +Date: 2026-06-06 +Source schema: `docs/pdr/PDR-analytics-event-taxonomy.md` + +## Purpose + +Provide exact metric formulas for the compare-to-inquiry funnel using canonical events. + +## Event Scope + +Use records where: + +- `source = howiezz-web` +- `schema_version = 2026-06-06` + +## Core Metrics + +### 0) Page Traffic Baseline + +Definition: + +- Count of `page_view` + +Breakdowns: + +- by `page` +- by `session_id` (unique sessions) + +### 1) Compare Engagement + +Definition: + +- Numerator A: count of `compare_add` +- Numerator B: count of `compare_view` where `view_state = filled` + +Suggested display: + +- total compare adds +- total filled compare views +- compare adds per session = `count(compare_add) / count(distinct session_id)` + +### 2) Compare Handoff Rate + +Definition: + +- Numerator: count of `compare_handoff_click` +- Denominator: count of `compare_view` where `view_state = filled` +- Formula: `handoff_rate = numerator / denominator` + +Breakdowns: + +- by `channel` (`contact`, `quiz`, `compare`) +- by `source_page` + +### 3) Inquiry Submit Rate + +Definition: + +- Numerator: count of `inquiry_submit_success` +- Denominator: count of `inquiry_submit_attempt` +- Formula: `submit_rate = numerator / denominator` + +Breakdowns: + +- by `channel` (`mailto`, `endpoint`) +- by `intent` +- by `timeline` + +### 4) Validation Friction Rate + +Definition: + +- Numerator: count of `inquiry_validation_failed` +- Denominator: count of `page_view` where `page = contact.html` +- Formula: `validation_friction_rate = numerator / denominator` + +If page-view events are unavailable: + +- fallback denominator: `count(inquiry_submit_attempt) + count(inquiry_validation_failed)` + +### 5) Compare Set Churn + +Definition: + +- Add actions: count of `compare_set_changed` where `action = add` +- Clear actions: count of `compare_set_changed` where `action = clear` +- Churn ratio: `clear_actions / add_actions` + +Breakdowns: + +- by `context` (`compare`, `browse_list`) +- by `source_page` + +### 6) Contact Attribution Quality + +Definition: + +- Distribution of inquiry events by `entry_source`, `entry_cta`, `entry_context`, `entry_channel` + +Primary checks: + +- events with non-empty `entry_source` / total contact submit attempts +- conversion rate by `entry_source` + +Suggested starting target ranges (establish and tune with first 2-4 weeks of live data): + +- Attribution coverage: at least 85% of `inquiry_submit_attempt` events include non-empty `entry_source`. +- Compare-origin inquiry share: 25% to 55% of inquiry attempts with `entry_source = compare`. +- Compare-origin submit rate: 35% to 65% (`inquiry_submit_success / inquiry_submit_attempt` where `entry_source = compare`). +- Non-attributed attempts: below 15% of total attempts. + +## Suggested Time-Series Panels + +1. `compare_add` daily volume +2. `compare_handoff_click` daily volume by `channel` +3. `inquiry_submit_attempt` vs `inquiry_submit_success` daily +4. `inquiry_validation_failed` daily +5. `compare_set_changed` by `action` daily +6. `page_view` daily by `page` + +## SQL-Like Reference Queries + +### Handoff rate by day + +```sql +SELECT + DATE(ts) AS d, + SUM(CASE WHEN event = 'compare_handoff_click' THEN 1 ELSE 0 END) AS handoffs, + SUM(CASE WHEN event = 'compare_view' AND view_state = 'filled' THEN 1 ELSE 0 END) AS compare_views_filled, + CASE + WHEN SUM(CASE WHEN event = 'compare_view' AND view_state = 'filled' THEN 1 ELSE 0 END) = 0 THEN 0 + ELSE 1.0 * SUM(CASE WHEN event = 'compare_handoff_click' THEN 1 ELSE 0 END) + / SUM(CASE WHEN event = 'compare_view' AND view_state = 'filled' THEN 1 ELSE 0 END) + END AS handoff_rate +FROM events +WHERE source = 'howiezz-web' + AND schema_version = '2026-06-06' +GROUP BY DATE(ts) +ORDER BY d; +``` + +### Inquiry submit rate by channel + +```sql +SELECT + channel, + SUM(CASE WHEN event = 'inquiry_submit_success' THEN 1 ELSE 0 END) AS submit_success, + SUM(CASE WHEN event = 'inquiry_submit_attempt' THEN 1 ELSE 0 END) AS submit_attempt, + CASE + WHEN SUM(CASE WHEN event = 'inquiry_submit_attempt' THEN 1 ELSE 0 END) = 0 THEN 0 + ELSE 1.0 * SUM(CASE WHEN event = 'inquiry_submit_success' THEN 1 ELSE 0 END) + / SUM(CASE WHEN event = 'inquiry_submit_attempt' THEN 1 ELSE 0 END) + END AS submit_rate +FROM events +WHERE source = 'howiezz-web' + AND schema_version = '2026-06-06' +GROUP BY channel +ORDER BY channel; +``` + +### Compare-origin submit rate + +```sql +SELECT + SUM(CASE WHEN event = 'inquiry_submit_success' AND entry_source = 'compare' THEN 1 ELSE 0 END) AS compare_success, + SUM(CASE WHEN event = 'inquiry_submit_attempt' AND entry_source = 'compare' THEN 1 ELSE 0 END) AS compare_attempt, + CASE + WHEN SUM(CASE WHEN event = 'inquiry_submit_attempt' AND entry_source = 'compare' THEN 1 ELSE 0 END) = 0 THEN 0 + ELSE 1.0 * SUM(CASE WHEN event = 'inquiry_submit_success' AND entry_source = 'compare' THEN 1 ELSE 0 END) + / SUM(CASE WHEN event = 'inquiry_submit_attempt' AND entry_source = 'compare' THEN 1 ELSE 0 END) + END AS compare_submit_rate +FROM events +WHERE source = 'howiezz-web' + AND schema_version = '2026-06-06'; +``` + +## Data Hygiene Checks + +1. `event_original` should be present for all rows. +2. `session_id` should be present for all rows. +3. `compare_count` should be non-negative for compare-related events. +4. `channel` should be present for `compare_handoff_click` and `inquiry_submit_success`. +5. `page_view` should appear once per page load. +6. Contact events routed from compare should include `entry_source=compare` and `entry_cta=ask_about_these_bodies`. + +## Current Threshold Rationale + +- `minAttributionCoverage = 0.8`: strict enough to catch broken contact attribution wiring while allowing normal early-stage traffic variation. +- `minTotalEvents = 8` on the positive fixture: ensures each core event family appears at least once in the canonical sample. +- `minPageViews = 2`: guards against fixture truncation that removes multi-page flow context. +- `minCompareAdd = 1`: confirms compare funnel entry events are still present. +- `minInquiryAttempts = 1`: guarantees at least one measurable conversion attempt in sanity data. + +Calibration note: + +- Keep these defaults conservative until 2-4 weeks of production telemetry are available, then tune only in `docs/pdr/PDR-analytics-sanity-thresholds.json`. diff --git a/docs/pdr/PDR-analytics-dashboard-handoff-runbook.md b/docs/pdr/PDR-analytics-dashboard-handoff-runbook.md new file mode 100644 index 0000000..aaba5d6 --- /dev/null +++ b/docs/pdr/PDR-analytics-dashboard-handoff-runbook.md @@ -0,0 +1,127 @@ +# PDR Analytics Dashboard Handoff Runbook + +Status: Active +Date: 2026-06-06 +Audience: Dashboard implementers and data engineering owners + +## Ownership + +- Product owner: Howie (CEO sponsor) +- Analytics owner: Growth Lead (interim) +- Data engineering owner: Web/Data Engineering Lead (interim) +- Last reviewed on: 2026-06-06 +- Next review date: 2026-06-13 + +## Objective + +Move from instrumented website events to an operational dashboard with validated metrics. + +## Source Artifacts + +1. Taxonomy contract: `docs/pdr/PDR-analytics-event-taxonomy.md` +2. Metric formulas: `docs/pdr/PDR-analytics-dashboard-cookbook.md` +3. Validation checklist: `docs/pdr/PDR-analytics-smoke-test-checklist.md` +4. Current implementation status: `docs/pdr/PDR-implementation-audit.md` + +## Handoff Steps + +1. Confirm ingestion pipeline captures all payload keys with no schema truncation. +2. Verify `schema_version = 2026-06-06` and `source = howiezz-web` filters are available. +3. Validate smoke-test flow in staging and capture sample payloads. +4. Build dashboard panels defined in cookbook. +5. Publish target ranges and alert thresholds with product/marketing owners. + +## Validation Commands + +Positive-path sample: + +1. `python scripts/analytics_event_sanity.py --input docs/pdr/PDR-analytics-sample-events.ndjson --strict --min-total-events 8 --min-page-views 2 --min-compare-add 1 --min-inquiry-attempts 1 --min-attribution-coverage 0.8` +2. `pwsh -File scripts/run_analytics_sanity.ps1 -Strict` +3. `pwsh -File scripts/run_analytics_sanity_ci_parity.ps1` + +Artifact outputs: + +- CI summaries: `.artifacts/analytics/*.json` (uploaded as workflow artifact `analytics-sanity-summaries`) +- Local suite summaries: `.artifacts/analytics/*-summary.local.json` + +Negative-path sample (should fail): + +1. `python scripts/analytics_event_sanity.py --input docs/pdr/PDR-analytics-sample-events-broken.ndjson --strict` + +## Required Fields (Minimum) + +Global: + +- `event` +- `event_original` +- `source` +- `schema_version` +- `session_id` +- `ts` +- `page` +- `path` + +Funnel-specific: + +- `compare_count` +- `view_state` +- `channel` +- `context` +- `source_page` +- `entry_source` +- `entry_cta` +- `entry_context` +- `entry_channel` +- `entry_compare_count` + +## Panel Build Order + +1. Traffic baseline (`page_view` by page) +2. Compare engagement (`compare_add`, `compare_view`) +3. Compare handoff (`compare_handoff_click`) +4. Inquiry lifecycle (`inquiry_submit_attempt`, `inquiry_submit_success`, `inquiry_submit_error`) +5. Validation friction (`inquiry_validation_failed`) +6. Compare set churn (`compare_set_changed`) +7. Attribution quality (`entry_source`, `entry_cta`) + +## QA Sign-Off Criteria + +1. No missing required global fields in sampled records. +2. `session_id` remains consistent across multi-page journeys. +3. Compare-to-contact route preserves attribution fields into inquiry events. +4. Metric values match cookbook SQL reference for the same date window. +5. Dashboard refresh cadence and latency are documented. + +## Operational Notes + +- Debug mirror can be enabled in browser with `?zx_analytics_debug=1` and disabled with `?zx_analytics_debug=0`. +- Keep schema changes additive where possible; bump `schema_version` for breaking changes. +- Threshold and fixture defaults are centralized in `docs/pdr/PDR-analytics-sanity-thresholds.json`. +- Wrapper scripts read this config and now fail fast on missing required sections or invalid threshold ranges. + +## Troubleshooting + +### Exit code 2 from analytics sanity wrappers + +Common causes: + +- Config file path is missing or mistyped. +- Config JSON is malformed and cannot be parsed. +- Required sections/fixture input paths are missing. +- Attribution coverage thresholds are outside `[0, 1]`. + +Quick checks: + +1. Validate config file exists at `docs/pdr/PDR-analytics-sanity-thresholds.json`. +2. Run: `pwsh -File scripts/run_analytics_sanity_suite.ps1`. +3. For negative-test sanity, run: `pwsh -File scripts/run_analytics_sanity_suite.ps1 -ConfigPath docs/pdr/PDR-analytics-sanity-thresholds.invalid.json` and confirm exit code `2`. + +Known error map: + +| Error text | Likely cause | Primary fix | +| --- | --- | --- | +| `Missing config file: ...` | Config path typo or missing file | Confirm path and file existence, then rerun wrapper | +| `Failed to parse config file: ...` | Invalid JSON syntax | Fix JSON formatting and validate with `ConvertFrom-Json` | +| `Config file missing required sections: positiveFixture/negativeFixtures` | Required top-level blocks absent | Restore required sections in config | +| `Config file missing required fixture input paths.` | One or more required `input` fields missing | Add fixture input paths for positive, broken, and low-attribution fixtures | +| `Attribution coverage thresholds must be between 0 and 1.` | Threshold values outside valid range | Set attribution thresholds within `[0, 1]` | diff --git a/docs/pdr/PDR-analytics-event-taxonomy.md b/docs/pdr/PDR-analytics-event-taxonomy.md new file mode 100644 index 0000000..a2ad1d6 --- /dev/null +++ b/docs/pdr/PDR-analytics-event-taxonomy.md @@ -0,0 +1,203 @@ +# PDR Analytics Event Taxonomy + +Status: Active +Date: 2026-06-06 +Scope: Compare funnel and inquiry funnel instrumentation + +## Purpose + +Define a stable event schema and property contract for funnel analytics and dashboard mapping. + +## Global Payload Contract + +All `ZX.track(...)` events emit these global fields: + +- `event`: canonical event name. +- `event_original`: raw event string passed by caller. +- `source`: fixed value `howiezz-web`. +- `schema_version`: fixed value `2026-06-06`. +- `session_id`: persistent analytics session identifier used across page transitions. +- `ts`: ISO timestamp in UTC. +- `page`: current page filename (for example `compare.html`). +- `path`: current browser path. + +## Canonical Events + +### `page_view` + +Auto-emitted once per page load by shared runtime. + +Required: + +- `context` (`navigation`) +- `source_page` + +### `compare_add` + +When user adds a body architecture to compare set. + +Required: + +- `body_code` +- `compare_count` +- `context` (`body_detail`, `character_detail`, `compare`, `browse_list`) +- `source_page` (`body`, `character`, `compare`, `browse`) + +Optional: + +- `family` +- `series` +- `character_id` + +### `compare_clear` + +When user clears compare set. + +Required: + +- `context` (`compare` or `browse_list`) +- `source_page` (`compare` or `browse`) + +Optional: + +- `previous_count` + +### `compare_set_changed` + +When compare set membership changes in browse or compare surfaces. + +Required: + +- `action` (`add` or `clear`) +- `compare_count` +- `context` (`compare` or `browse_list`) +- `source_page` (`compare` or `browse`) + +Optional: + +- `body_codes` +- `previous_count` (clear actions) + +### `compare_view` + +When compare page renders a view state. + +Required: + +- `view_state` (`empty` or `filled`) +- `compare_count` +- `context` (`compare`) +- `source_page` (`compare`) + +Optional: + +- `body_codes` (comma-separated list) + +### `compare_handoff_click` + +When user exits compare into a next-step CTA. + +Required: + +- `channel` (`contact`, `quiz`, or `compare`) +- `cta` (`ask_about_these_bodies`, `take_match_quiz`, or `open_compare`) +- `compare_count` +- `context` (`compare` or `browse_list`) +- `source_page` (`compare` or `browse`) + +Optional: + +- `body_codes` + +### `inquiry_validation_failed` + +When contact form fails client validation. + +Required: + +- `context` (`contact_form`) +- `source_page` (`contact`) + +### `inquiry_submit_attempt` + +When contact form submit is attempted after passing validation. + +Required: + +- `context` (`contact_form`) +- `source_page` (`contact`) + +Optional: + +- `has_character_context` (boolean) +- `has_compare_context` (boolean) +- `intent` +- `timeline` +- `entry_source` +- `entry_cta` +- `entry_context` +- `entry_channel` +- `entry_compare_count` + +### `inquiry_submit_success` + +When inquiry submission is completed. + +Required: + +- `channel` (`mailto` or `endpoint`) +- `context` (`contact_form`) +- `source_page` (`contact`) + +Optional: + +- `entry_source` +- `entry_cta` +- `entry_context` +- `entry_channel` +- `entry_compare_count` + +### `inquiry_submit_error` + +When inquiry submission fails. + +Required: + +- `context` (`contact_form`) +- `source_page` (`contact`) + +Optional: + +- `error_message` (runtime-normalized from `message`, truncated) +- `entry_source` +- `entry_cta` +- `entry_context` +- `entry_channel` +- `entry_compare_count` + +## Backward Compatibility Mapping + +Runtime aliases in `assets/site.js` normalize old event names: + +- `compare_add_from_body` -> `compare_add` +- `compare_add_from_character` -> `compare_add` +- `compare_add_from_compare_page` -> `compare_add` +- `compare_to_contact_click` -> `compare_handoff_click` +- `compare_to_quiz_click` -> `compare_handoff_click` +- `compare_view_empty` -> `compare_view` + +## Dashboard Mapping (Suggested) + +Primary funnel widgets: + +1. Compare engagement: count of `compare_add`, count of `compare_view` where `view_state=filled`. +2. Compare handoff rate: `compare_handoff_click` / filled `compare_view`. +3. Contact conversion: `inquiry_submit_success` / `inquiry_submit_attempt`. +4. Validation friction: `inquiry_validation_failed` per `contact.html` sessions. +5. Channel split: success counts grouped by `channel`. +6. Compare state churn: count of `compare_set_changed` grouped by `action`. +7. Page traffic baseline: count of `page_view` grouped by `page`. + +Recommended dimensions: + +- `page`, `source_page`, `context`, `channel`, `body_code`, `body_codes`, `family`, `series`, `intent`, `timeline`, `action`, `session_id`, `entry_source`, `entry_cta`, `entry_context`, `entry_channel`, `entry_compare_count`. \ No newline at end of file diff --git a/docs/pdr/PDR-analytics-sample-events-broken.ndjson b/docs/pdr/PDR-analytics-sample-events-broken.ndjson new file mode 100644 index 0000000..b493be9 --- /dev/null +++ b/docs/pdr/PDR-analytics-sample-events-broken.ndjson @@ -0,0 +1,2 @@ +{"event":"page_view","event_original":"page_view","source":"howiezz-web","schema_version":"2026-06-06","ts":"2026-06-06T12:00:00.000Z","page":"browse.html","path":"/browse.html","context":"navigation","source_page":"browse"} +{"event":"compare_add_from_browse","event_original":"compare_add_from_browse","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_broken_session","ts":"2026-06-06T12:00:02.000Z","page":"browse.html","path":"/browse.html","body_code":"ZF161D","compare_count":1,"context":"browse_list","source_page":"browse"} diff --git a/docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson b/docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson new file mode 100644 index 0000000..427aee0 --- /dev/null +++ b/docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson @@ -0,0 +1,4 @@ +{"event":"page_view","event_original":"page_view","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_attr_session","ts":"2026-06-06T12:10:00.000Z","page":"compare.html","path":"/compare.html","context":"navigation","source_page":"compare"} +{"event":"inquiry_submit_attempt","event_original":"inquiry_submit_attempt","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_attr_session","ts":"2026-06-06T12:10:05.000Z","page":"contact.html","path":"/contact.html","has_character_context":true,"has_compare_context":true,"intent":"Body comparison support","timeline":"Just exploring","context":"contact_form","source_page":"contact","entry_source":"compare","entry_cta":"ask_about_these_bodies","entry_context":"compare","entry_channel":"contact","entry_compare_count":2} +{"event":"inquiry_submit_attempt","event_original":"inquiry_submit_attempt","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_attr_session","ts":"2026-06-06T12:10:07.000Z","page":"contact.html","path":"/contact.html","has_character_context":false,"has_compare_context":false,"intent":"Character recommendation","timeline":"Near term (1-2 months)","context":"contact_form","source_page":"contact"} +{"event":"inquiry_submit_success","event_original":"inquiry_submit_success","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_attr_session","ts":"2026-06-06T12:10:09.000Z","page":"contact.html","path":"/contact.html","channel":"mailto","context":"contact_form","source_page":"contact","entry_source":"compare","entry_cta":"ask_about_these_bodies","entry_context":"compare","entry_channel":"contact","entry_compare_count":2} diff --git a/docs/pdr/PDR-analytics-sample-events.ndjson b/docs/pdr/PDR-analytics-sample-events.ndjson new file mode 100644 index 0000000..eaf9fea --- /dev/null +++ b/docs/pdr/PDR-analytics-sample-events.ndjson @@ -0,0 +1,8 @@ +{"event":"page_view","event_original":"page_view","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:00.000Z","page":"browse.html","path":"/browse.html","context":"navigation","source_page":"browse"} +{"event":"compare_add","event_original":"compare_add","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:02.000Z","page":"browse.html","path":"/browse.html","body_code":"ZF161D","compare_count":1,"context":"browse_list","source_page":"browse"} +{"event":"compare_handoff_click","event_original":"compare_handoff_click","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:04.000Z","page":"browse.html","path":"/browse.html","channel":"compare","cta":"open_compare","compare_count":1,"body_codes":"ZF161D","context":"browse_list","source_page":"browse"} +{"event":"page_view","event_original":"page_view","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:05.000Z","page":"compare.html","path":"/compare.html","context":"navigation","source_page":"compare"} +{"event":"compare_view","event_original":"compare_view","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:06.000Z","page":"compare.html","path":"/compare.html","compare_count":1,"body_codes":"ZF161D","view_state":"filled","context":"compare","source_page":"compare"} +{"event":"compare_handoff_click","event_original":"compare_handoff_click","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:08.000Z","page":"compare.html","path":"/compare.html","channel":"contact","cta":"ask_about_these_bodies","compare_count":1,"body_codes":"ZF161D","context":"compare","source_page":"compare"} +{"event":"inquiry_submit_attempt","event_original":"inquiry_submit_attempt","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:12.000Z","page":"contact.html","path":"/contact.html","has_character_context":true,"has_compare_context":true,"intent":"Body comparison support","timeline":"Just exploring","context":"contact_form","source_page":"contact","entry_source":"compare","entry_cta":"ask_about_these_bodies","entry_context":"compare","entry_channel":"contact","entry_compare_count":1} +{"event":"inquiry_submit_success","event_original":"inquiry_submit_success","source":"howiezz-web","schema_version":"2026-06-06","session_id":"zx_sample_session","ts":"2026-06-06T12:00:13.000Z","page":"contact.html","path":"/contact.html","channel":"mailto","context":"contact_form","source_page":"contact","entry_source":"compare","entry_cta":"ask_about_these_bodies","entry_context":"compare","entry_channel":"contact","entry_compare_count":1} diff --git a/docs/pdr/PDR-analytics-sanity-thresholds.invalid.json b/docs/pdr/PDR-analytics-sanity-thresholds.invalid.json new file mode 100644 index 0000000..1699db9 --- /dev/null +++ b/docs/pdr/PDR-analytics-sanity-thresholds.invalid.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": "2026-06-06", + "source": "howiezz-web", + "positiveFixture": { + "input": "docs/pdr/PDR-analytics-sample-events.ndjson", + "minTotalEvents": 8, + "minPageViews": 2, + "minCompareAdd": 1, + "minInquiryAttempts": 1, + "minAttributionCoverage": 1.2 + }, + "negativeFixtures": { + "broken": { + "input": "docs/pdr/PDR-analytics-sample-events-broken.ndjson" + }, + "lowAttribution": { + "input": "docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson", + "minAttributionCoverage": 0.8 + } + } +} diff --git a/docs/pdr/PDR-analytics-sanity-thresholds.json b/docs/pdr/PDR-analytics-sanity-thresholds.json new file mode 100644 index 0000000..aae5e84 --- /dev/null +++ b/docs/pdr/PDR-analytics-sanity-thresholds.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": "2026-06-06", + "source": "howiezz-web", + "positiveFixture": { + "input": "docs/pdr/PDR-analytics-sample-events.ndjson", + "minTotalEvents": 8, + "minPageViews": 2, + "minCompareAdd": 1, + "minInquiryAttempts": 1, + "minAttributionCoverage": 0.8 + }, + "negativeFixtures": { + "broken": { + "input": "docs/pdr/PDR-analytics-sample-events-broken.ndjson" + }, + "lowAttribution": { + "input": "docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson", + "minAttributionCoverage": 0.8 + } + } +} diff --git a/docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json b/docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json new file mode 100644 index 0000000..e66288c --- /dev/null +++ b/docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json @@ -0,0 +1,19 @@ +{ + "schemaVersion": "2026-06-06", + "source": "howiezz-web", + "positiveFixture": { + "minTotalEvents": 8, + "minPageViews": 2, + "minCompareAdd": 1, + "minInquiryAttempts": 1, + "minAttributionCoverage": 0.8 + }, + "negativeFixtures": { + "broken": { + "input": "docs/pdr/PDR-analytics-sample-events-broken.ndjson" + }, + "lowAttribution": { + "minAttributionCoverage": 0.8 + } + } +} diff --git a/docs/pdr/PDR-analytics-smoke-test-checklist.md b/docs/pdr/PDR-analytics-smoke-test-checklist.md new file mode 100644 index 0000000..3bbdede --- /dev/null +++ b/docs/pdr/PDR-analytics-smoke-test-checklist.md @@ -0,0 +1,126 @@ +# PDR Analytics Smoke Test Checklist + +Status: Active +Date: 2026-06-06 +Purpose: Verify analytics payload integrity after deploy. + +## Preconditions + +1. Serve site locally or in staging. +2. Ensure browser devtools is open on Network and Console. +3. Optional: add temporary listener: + +```javascript +window.addEventListener('zx:track', (e) => console.log('zx:track', e.detail)); +``` + +4. Optional automated sanity run on exported events: + +```powershell +python scripts/analytics_event_sanity.py --input path\to\events.ndjson +``` + +PowerShell wrapper option: + +```powershell +pwsh -File scripts/run_analytics_sanity.ps1 -Strict +``` + +Full suite wrapper (positive + negative path checks): + +```powershell +pwsh -File scripts/run_analytics_sanity_suite.ps1 +``` + +CI uses this same wrapper as the canonical gate command. + +Reference sample: + +```powershell +python scripts/analytics_event_sanity.py --input docs/pdr/PDR-analytics-sample-events.ndjson --strict --min-total-events 8 --min-page-views 2 --min-compare-add 1 --min-inquiry-attempts 1 --min-attribution-coverage 0.8 +``` + +Negative-path sample (expected failure): + +```powershell +python scripts/analytics_event_sanity.py --input docs/pdr/PDR-analytics-sample-events-broken.ndjson --strict +``` + +Low-attribution negative sample (expected failure): + +```powershell +python scripts/analytics_event_sanity.py --input docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson --strict --min-attribution-coverage 0.8 +``` + +Notes: + +- Script accepts NDJSON or JSON array files. +- Use `--pretty` for machine-friendly JSON output. +- Use `--strict` and `--min-*` flags for CI gating. +- Wrapper script centralizes default thresholds and Windows-safe input validation. +- CI artifact bundle name: `analytics-sanity-summaries`. +- Shared threshold config: `docs/pdr/PDR-analytics-sanity-thresholds.json`. + +## Test Flow A: Page Views + +1. Open index page. +2. Open browse page. +3. Open compare page. +4. Open contact page. + +Expected: + +- One `page_view` event on each page load. +- Each event includes: `session_id`, `schema_version`, `page`, `path`. + +## Test Flow B: Compare Set Management + +1. On browse, click Add to Compare for at least two cards. +2. Click Open Compare. +3. On compare page, add one more body. +4. Clear compare set. + +Expected: + +- `compare_add` events emitted on each add. +- `compare_set_changed` emitted with `action=add` and growing `compare_count`. +- `compare_handoff_click` emitted on browse Open Compare. +- `compare_clear` and `compare_set_changed` with `action=clear` on clear. + +## Test Flow C: Contact Attribution + +1. On compare page with a non-empty set, click Ask about these bodies. +2. Submit contact form with valid test data (mailto or endpoint path). + +Expected: + +- URL carries `src=compare`, `cta=ask_about_these_bodies`, `context=compare`, `channel=contact`. +- `inquiry_submit_attempt` includes: + - `entry_source=compare` + - `entry_cta=ask_about_these_bodies` + - `entry_context=compare` + - `entry_channel=contact` + - `entry_compare_count` greater than 0 +- `inquiry_submit_success` includes same entry fields. + +## Required Field Checklist + +For all events: + +- `event` +- `event_original` +- `source` +- `schema_version` +- `session_id` +- `ts` +- `page` +- `path` + +## Pass Criteria + +1. No missing required global fields. +2. Canonical event names only in `event`. +3. `session_id` is stable across page transitions in one session. +4. Compare-to-contact attribution fields present for compare-routed inquiry submits. +5. No console errors triggered by tracking calls. +6. `scripts/analytics_event_sanity.py` reports no non-canonical events and no missing required global fields. diff --git a/docs/pdr/PDR-implementation-audit.md b/docs/pdr/PDR-implementation-audit.md new file mode 100644 index 0000000..96b6dae --- /dev/null +++ b/docs/pdr/PDR-implementation-audit.md @@ -0,0 +1,48 @@ +# PDR Implementation Audit + +Status: Partial implementation now advanced for PDR-002 and PDR-003 scaffold. +Date: 2026-06-06 + +## Added in this slice + +- `compare.html` decision scaffold with localStorage-backed multi-body compare. +- Global navigation entry for Compare. +- Homepage trust strip and family chooser preview. +- Homepage compare preview section. +- Homepage concierge closing band. +- Shared CSS primitives to support new homepage and compare layouts. +- Body page "Add to Compare" action (localStorage-backed). +- Character page "Add to Compare" action (localStorage-backed). +- Contact-page compare prefill from `?compare=` and saved compare selections. +- Contact intake-depth fields for intent, timeline, and use context. +- Lightweight analytics hooks for compare and inquiry events. +- Canonical analytics taxonomy with normalized event payload contract and alias mapping. +- Dashboard mapping reference for compare-to-inquiry funnel metrics. +- Browse-page compare entry controls with quick compare-set management. +- Session-level event stitching via persistent `session_id`. +- Compare set state-change instrumentation (`compare_set_changed`) across compare and browse. +- Dashboard metric cookbook with formulas and query templates. +- Shared `page_view` event emission on page load. +- Compare-to-contact attribution propagation into inquiry lifecycle events. +- Analytics smoke-test checklist for post-deploy validation. +- Optional analytics debug mirror toggle for staging and validation. +- Dashboard implementer handoff runbook. +- Automated event-volume sanity checker script for exported analytics payloads. +- Threshold-capable sanity checks for CI gating (`--strict`, `--min-*`). +- Reproducible analytics sample fixture for script verification. +- Reproducible broken analytics fixture for failure-path validation. +- PowerShell wrapper for standardized sanity execution in Windows environments. +- Low-attribution fixture for threshold-failure validation. +- Suite wrapper for repeatable positive and negative sanity checks. +- CI workflow analytics sanity gates (positive pass + negative expected-fail checks). +- Deterministic local artifact output path under `.artifacts/analytics` for suite summaries. +- CI now uses the same suite wrapper command path as local validation. +- Thresholds and fixture paths centralized in `docs/pdr/PDR-analytics-sanity-thresholds.json`. + +## Still pending + +- External dashboard implementation against production event store. + +## Intent + +This is a focused decision-flow implementation slice: guide users to choose body architecture with confidence before concierge inquiry. diff --git a/index.html b/index.html index 4ab1ff0..1322e8e 100644 --- a/index.html +++ b/index.html @@ -65,11 +65,19 @@

The Character Atlas

+
+
Made to orderNo standing-stock confusion
+
Measured bodiesWHR/BWR silhouette logic
+
Private inquiryConcierge-first decision path
+
Adults only18+ collector experience
+
+
@@ -96,6 +104,32 @@

The Character Atlas

The Four Series
Each series is a distinct design language. Step into one to see its body architectures.
+ +
Choose by silhouette family
+
The fastest path is not product code first - it is buyer intent, silhouette, and handling confidence.
+ + +
+
+
Compare before contact
+

Body architecture is the real decision layer.

+

Compare up to four bodies by height, weight, cup, family, WHR/BWR, bust drop, and handling class before asking concierge.

+ +
+
+ Natural vs dramatic silhouette + Solo-manageable vs dedicated-space handling + Verified vs estimated family confidence +
+
+
@@ -105,6 +139,18 @@

The Character Atlas

A rotating cast from across the collection.
+ +
+
+
Private next step
+

Still deciding? Let the body architecture narrow it down.

+

Use the quiz or compare tool first, then send a cleaner inquiry with the exact bodies, family, and buyer intent attached.

+
+ +
diff --git a/scripts/analytics_event_sanity.py b/scripts/analytics_event_sanity.py new file mode 100644 index 0000000..d32dbe7 --- /dev/null +++ b/scripts/analytics_event_sanity.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python3 +"""Quick sanity checks for ZELEX analytics event exports. + +Supports JSON array files or NDJSON (one JSON object per line). + +Usage: + python scripts/analytics_event_sanity.py --input path/to/events.ndjson + python scripts/analytics_event_sanity.py --input path/to/events.json --pretty +""" + +from __future__ import annotations + +import argparse +import json +import os +import sys +from collections import Counter +from typing import Any, Dict, Iterable, List + + +REQUIRED_GLOBAL_FIELDS = ( + "event", + "event_original", + "source", + "schema_version", + "session_id", + "ts", + "page", + "path", +) + +CANONICAL_EVENTS = { + "page_view", + "compare_add", + "compare_clear", + "compare_set_changed", + "compare_view", + "compare_handoff_click", + "inquiry_validation_failed", + "inquiry_submit_attempt", + "inquiry_submit_success", + "inquiry_submit_error", +} + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Sanity-check analytics event payload exports.") + parser.add_argument("--input", required=True, help="Path to NDJSON or JSON array export") + parser.add_argument("--schema-version", default="2026-06-06", help="Expected schema_version") + parser.add_argument("--source", default="howiezz-web", help="Expected source") + parser.add_argument("--pretty", action="store_true", help="Pretty-print JSON summary") + parser.add_argument("--strict", action="store_true", help="Fail when required fields are missing or non-canonical events exist") + parser.add_argument("--min-total-events", type=int, default=0, help="Minimum total events expected") + parser.add_argument("--min-page-views", type=int, default=0, help="Minimum page_view count expected") + parser.add_argument("--min-compare-add", type=int, default=0, help="Minimum compare_add count expected") + parser.add_argument("--min-inquiry-attempts", type=int, default=0, help="Minimum inquiry_submit_attempt count expected") + parser.add_argument("--min-attribution-coverage", type=float, default=0.0, help="Minimum attribution coverage ratio (0.0-1.0)") + parser.add_argument("--max-missing-global", type=int, default=0, help="Maximum allowed missing required global fields") + parser.add_argument("--output-json", default="", help="Optional path to write JSON summary output") + return parser.parse_args() + + +def is_placeholder_path(path: str) -> bool: + return path.strip() in {".", "./", ".\\"} + + +def load_events(path: str) -> List[Dict[str, Any]]: + with open(path, "r", encoding="utf-8") as f: + raw = f.read() + + raw_strip = raw.strip() + if not raw_strip: + return [] + + if raw_strip.startswith("["): + data = json.loads(raw_strip) + if not isinstance(data, list): + raise ValueError("JSON file must be an array when bracket format is used") + return [x for x in data if isinstance(x, dict)] + + events: List[Dict[str, Any]] = [] + for idx, line in enumerate(raw.splitlines(), start=1): + s = line.strip() + if not s: + continue + try: + obj = json.loads(s) + except json.JSONDecodeError as exc: + raise ValueError(f"Invalid NDJSON at line {idx}: {exc}") from exc + if isinstance(obj, dict): + events.append(obj) + return events + + +def missing_global_fields(events: Iterable[Dict[str, Any]]) -> Counter: + c: Counter = Counter() + for e in events: + for key in REQUIRED_GLOBAL_FIELDS: + if e.get(key) in (None, ""): + c[key] += 1 + return c + + +def canonical_violations(events: Iterable[Dict[str, Any]]) -> Counter: + c: Counter = Counter() + for e in events: + name = str(e.get("event") or "") + if name and name not in CANONICAL_EVENTS: + c[name] += 1 + return c + + +def coverage_checks(events: List[Dict[str, Any]]) -> Dict[str, Any]: + attempts = [e for e in events if e.get("event") == "inquiry_submit_attempt"] + compare_attempts = [e for e in attempts if str(e.get("entry_source") or "") == "compare"] + attributed_attempts = [e for e in attempts if str(e.get("entry_source") or "").strip()] + compare_success = [ + e + for e in events + if e.get("event") == "inquiry_submit_success" and str(e.get("entry_source") or "") == "compare" + ] + + attr_coverage = (len(attributed_attempts) / len(attempts)) if attempts else 0.0 + compare_submit_rate = (len(compare_success) / len(compare_attempts)) if compare_attempts else 0.0 + + return { + "inquiry_attempts": len(attempts), + "attributed_attempts": len(attributed_attempts), + "attribution_coverage": round(attr_coverage, 4), + "compare_attempts": len(compare_attempts), + "compare_success": len(compare_success), + "compare_submit_rate": round(compare_submit_rate, 4), + } + + +def summarize(events: List[Dict[str, Any]], expected_source: str, expected_schema: str) -> Dict[str, Any]: + by_event = Counter(str(e.get("event") or "") for e in events) + by_source = Counter(str(e.get("source") or "") for e in events) + by_schema = Counter(str(e.get("schema_version") or "") for e in events) + page_views = [e for e in events if e.get("event") == "page_view"] + session_ids = {str(e.get("session_id") or "") for e in events if str(e.get("session_id") or "").strip()} + + missing = missing_global_fields(events) + canonical = canonical_violations(events) + + return { + "total_events": len(events), + "event_counts": dict(by_event), + "source_counts": dict(by_source), + "schema_version_counts": dict(by_schema), + "distinct_sessions": len(session_ids), + "page_view_count": len(page_views), + "expected_source_present": by_source.get(expected_source, 0), + "expected_schema_present": by_schema.get(expected_schema, 0), + "missing_global_field_counts": dict(missing), + "non_canonical_event_counts": dict(canonical), + "coverage": coverage_checks(events), + } + + +def print_human(summary: Dict[str, Any]) -> None: + print("Analytics Event Sanity Summary") + print("-" * 40) + print(f"Total events: {summary['total_events']}") + print(f"Distinct sessions: {summary['distinct_sessions']}") + print(f"Page views: {summary['page_view_count']}") + print(f"Expected source matches: {summary['expected_source_present']}") + print(f"Expected schema matches: {summary['expected_schema_present']}") + + print("\nEvent counts:") + for k, v in sorted(summary["event_counts"].items()): + if not k: + continue + print(f" {k}: {v}") + + if summary["missing_global_field_counts"]: + print("\nMissing required global fields:") + for k, v in sorted(summary["missing_global_field_counts"].items()): + print(f" {k}: {v}") + else: + print("\nMissing required global fields: none") + + if summary["non_canonical_event_counts"]: + print("\nNon-canonical event names:") + for k, v in sorted(summary["non_canonical_event_counts"].items()): + print(f" {k}: {v}") + else: + print("\nNon-canonical event names: none") + + c = summary["coverage"] + print("\nAttribution coverage checks:") + print(f" inquiry_attempts: {c['inquiry_attempts']}") + print(f" attributed_attempts: {c['attributed_attempts']}") + print(f" attribution_coverage: {c['attribution_coverage']}") + print(f" compare_attempts: {c['compare_attempts']}") + print(f" compare_success: {c['compare_success']}") + print(f" compare_submit_rate: {c['compare_submit_rate']}") + + +def evaluate_thresholds(summary: Dict[str, Any], args: argparse.Namespace) -> List[str]: + failures: List[str] = [] + event_counts = summary.get("event_counts", {}) + total_missing = sum((summary.get("missing_global_field_counts", {}) or {}).values()) + non_canonical_total = sum((summary.get("non_canonical_event_counts", {}) or {}).values()) + coverage = summary.get("coverage", {}) or {} + + if summary.get("total_events", 0) < args.min_total_events: + failures.append( + f"total_events below minimum: {summary.get('total_events', 0)} < {args.min_total_events}" + ) + + if summary.get("page_view_count", 0) < args.min_page_views: + failures.append( + f"page_view_count below minimum: {summary.get('page_view_count', 0)} < {args.min_page_views}" + ) + + compare_add = int(event_counts.get("compare_add", 0) or 0) + if compare_add < args.min_compare_add: + failures.append(f"compare_add below minimum: {compare_add} < {args.min_compare_add}") + + inquiry_attempts = int(event_counts.get("inquiry_submit_attempt", 0) or 0) + if inquiry_attempts < args.min_inquiry_attempts: + failures.append( + f"inquiry_submit_attempt below minimum: {inquiry_attempts} < {args.min_inquiry_attempts}" + ) + + attr_coverage = float(coverage.get("attribution_coverage", 0.0) or 0.0) + if attr_coverage < args.min_attribution_coverage: + failures.append( + f"attribution_coverage below minimum: {attr_coverage:.4f} < {args.min_attribution_coverage:.4f}" + ) + + if total_missing > args.max_missing_global: + failures.append( + f"missing required global fields above threshold: {total_missing} > {args.max_missing_global}" + ) + + if args.strict: + if total_missing > 0: + failures.append(f"strict mode: missing required global fields found ({total_missing})") + if non_canonical_total > 0: + failures.append(f"strict mode: non-canonical events found ({non_canonical_total})") + + return failures + + +def main() -> int: + args = parse_args() + input_path = args.input.strip() + + # Guard against accidental placeholder path usage on Windows shells. + if is_placeholder_path(input_path): + print("Error: --input received a placeholder path ('.'). Provide a file path.", file=sys.stderr) + return 2 + + if not os.path.exists(input_path): + print(f"Error: input file does not exist: {input_path}", file=sys.stderr) + return 2 + + try: + events = load_events(input_path) + except Exception as exc: + print(f"Error: failed to parse events: {exc}", file=sys.stderr) + return 2 + + summary = summarize(events, args.source, args.schema_version) + + if args.output_json and str(args.output_json).strip(): + out_path = str(args.output_json).strip() + os.makedirs(os.path.dirname(out_path) or ".", exist_ok=True) + with open(out_path, "w", encoding="utf-8") as f: + json.dump(summary, f, indent=2, sort_keys=True) + + if args.pretty: + print(json.dumps(summary, indent=2, sort_keys=True)) + else: + print_human(summary) + + failures = evaluate_thresholds(summary, args) + if failures: + print("\nThreshold check failures:") + for msg in failures: + print(f" - {msg}") + return 1 + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/run_analytics_sanity.ps1 b/scripts/run_analytics_sanity.ps1 new file mode 100644 index 0000000..d0babf4 --- /dev/null +++ b/scripts/run_analytics_sanity.ps1 @@ -0,0 +1,100 @@ +<# +Config schema expected at docs/pdr/PDR-analytics-sanity-thresholds.json: +{ + "schemaVersion": "2026-06-06", + "source": "howiezz-web", + "positiveFixture": { + "input": "docs/pdr/PDR-analytics-sample-events.ndjson", + "minTotalEvents": 8, + "minPageViews": 2, + "minCompareAdd": 1, + "minInquiryAttempts": 1, + "minAttributionCoverage": 0.8 + } +} +#> + +Param( + [string]$InputPath = "docs/pdr/PDR-analytics-sample-events.ndjson", + [string]$SchemaVersion = "2026-06-06", + [string]$Source = "howiezz-web", + [string]$ConfigPath = "docs/pdr/PDR-analytics-sanity-thresholds.json", + [string]$OutputJson = "", + [int]$MinTotalEvents = 8, + [int]$MinPageViews = 2, + [int]$MinCompareAdd = 1, + [int]$MinInquiryAttempts = 1, + [double]$MinAttributionCoverage = 0.8, + [switch]$Strict, + [switch]$Pretty +) + +$resolvedInput = [string]::IsNullOrWhiteSpace($InputPath) ? "" : $InputPath.Trim() + +$cfg = $null +if (-not [string]::IsNullOrWhiteSpace($ConfigPath) -and (Test-Path -LiteralPath $ConfigPath)) { + try { + $cfg = Get-Content -Raw -LiteralPath $ConfigPath | ConvertFrom-Json + } + catch { + Write-Warning "Failed to parse config at $ConfigPath. Falling back to inline defaults." + } +} + +if ($cfg -and $cfg.positiveFixture) { + if ($InputPath -eq "docs/pdr/PDR-analytics-sample-events.ndjson" -and $cfg.positiveFixture.input) { $resolvedInput = [string]$cfg.positiveFixture.input } + if ($SchemaVersion -eq "2026-06-06" -and $cfg.schemaVersion) { $SchemaVersion = [string]$cfg.schemaVersion } + if ($Source -eq "howiezz-web" -and $cfg.source) { $Source = [string]$cfg.source } + if ($MinTotalEvents -eq 8 -and $null -ne $cfg.positiveFixture.minTotalEvents) { $MinTotalEvents = [int]$cfg.positiveFixture.minTotalEvents } + if ($MinPageViews -eq 2 -and $null -ne $cfg.positiveFixture.minPageViews) { $MinPageViews = [int]$cfg.positiveFixture.minPageViews } + if ($MinCompareAdd -eq 1 -and $null -ne $cfg.positiveFixture.minCompareAdd) { $MinCompareAdd = [int]$cfg.positiveFixture.minCompareAdd } + if ($MinInquiryAttempts -eq 1 -and $null -ne $cfg.positiveFixture.minInquiryAttempts) { $MinInquiryAttempts = [int]$cfg.positiveFixture.minInquiryAttempts } + if ($MinAttributionCoverage -eq 0.8 -and $null -ne $cfg.positiveFixture.minAttributionCoverage) { $MinAttributionCoverage = [double]$cfg.positiveFixture.minAttributionCoverage } +} + +if ($MinAttributionCoverage -lt 0 -or $MinAttributionCoverage -gt 1) { + Write-Error "MinAttributionCoverage must be between 0 and 1." + exit 2 +} + +if ($resolvedInput -eq "." -or $resolvedInput -eq "./" -or $resolvedInput -eq ".\\") { + Write-Error "InputPath cannot be a placeholder path like '.'" + exit 2 +} + +if (-not (Test-Path -LiteralPath $resolvedInput)) { + Write-Error "InputPath does not exist: $resolvedInput" + exit 2 +} + +$cmd = @( + "scripts/analytics_event_sanity.py", + "--input", $resolvedInput, + "--schema-version", $SchemaVersion, + "--source", $Source, + "--min-total-events", "$MinTotalEvents", + "--min-page-views", "$MinPageViews", + "--min-compare-add", "$MinCompareAdd", + "--min-inquiry-attempts", "$MinInquiryAttempts", + "--min-attribution-coverage", "$MinAttributionCoverage" +) + +if ($Strict) { $cmd += "--strict" } +if ($Pretty) { $cmd += "--pretty" } +if (-not [string]::IsNullOrWhiteSpace($OutputJson)) { + $cmd += "--output-json" + $cmd += $OutputJson.Trim() +} + +Write-Host "Running analytics sanity checker..." +Write-Host ("python " + ($cmd -join " ")) + +python @cmd +$exit = $LASTEXITCODE +if ($exit -ne 0) { + Write-Error "Analytics sanity checker failed with exit code $exit" + exit $exit +} + +Write-Host "Analytics sanity checker passed." +exit 0 diff --git a/scripts/run_analytics_sanity_ci_parity.ps1 b/scripts/run_analytics_sanity_ci_parity.ps1 new file mode 100644 index 0000000..ce28c86 --- /dev/null +++ b/scripts/run_analytics_sanity_ci_parity.ps1 @@ -0,0 +1,27 @@ +Write-Host "Running analytics CI parity checks..." + +$repoRoot = Split-Path -Parent $PSScriptRoot + +Write-Host "[1/3] Baseline suite (expected pass)" +pwsh -File (Join-Path $repoRoot "scripts/run_analytics_sanity_suite.ps1") +if ($LASTEXITCODE -ne 0) { + Write-Error "Baseline analytics sanity suite failed unexpectedly" + exit $LASTEXITCODE +} + +Write-Host "[2/3] Invalid threshold config (expected exit 2)" +pwsh -File (Join-Path $repoRoot "scripts/run_analytics_sanity_suite.ps1") -ConfigPath "docs/pdr/PDR-analytics-sanity-thresholds.invalid.json" +if ($LASTEXITCODE -ne 2) { + Write-Error "Expected exit code 2 for invalid-threshold config, got $LASTEXITCODE" + exit 1 +} + +Write-Host "[3/3] Missing keys config (expected exit 2)" +pwsh -File (Join-Path $repoRoot "scripts/run_analytics_sanity_suite.ps1") -ConfigPath "docs/pdr/PDR-analytics-sanity-thresholds.missing-keys.json" +if ($LASTEXITCODE -ne 2) { + Write-Error "Expected exit code 2 for missing-keys config, got $LASTEXITCODE" + exit 1 +} + +Write-Host "Analytics CI parity checks passed." +exit 0 diff --git a/scripts/run_analytics_sanity_suite.ps1 b/scripts/run_analytics_sanity_suite.ps1 new file mode 100644 index 0000000..49183d2 --- /dev/null +++ b/scripts/run_analytics_sanity_suite.ps1 @@ -0,0 +1,143 @@ +Param( + [string]$ConfigPath = "docs/pdr/PDR-analytics-sanity-thresholds.json" +) + +<# +Config schema expected at docs/pdr/PDR-analytics-sanity-thresholds.json: +{ + "schemaVersion": "2026-06-06", + "source": "howiezz-web", + "positiveFixture": { + "input": "docs/pdr/PDR-analytics-sample-events.ndjson", + "minTotalEvents": 8, + "minPageViews": 2, + "minCompareAdd": 1, + "minInquiryAttempts": 1, + "minAttributionCoverage": 0.8 + }, + "negativeFixtures": { + "broken": { "input": "docs/pdr/PDR-analytics-sample-events-broken.ndjson" }, + "lowAttribution": { + "input": "docs/pdr/PDR-analytics-sample-events-low-attribution.ndjson", + "minAttributionCoverage": 0.8 + } + } +} +#> + +Write-Host "Running analytics sanity suite..." + +$repoRoot = Split-Path -Parent $PSScriptRoot +$artifactDir = Join-Path $repoRoot ".artifacts/analytics" +New-Item -ItemType Directory -Force -Path $artifactDir | Out-Null + +$resolvedConfig = [string]::IsNullOrWhiteSpace($ConfigPath) ? "" : $ConfigPath.Trim() +if ($resolvedConfig -eq "." -or $resolvedConfig -eq "./" -or $resolvedConfig -eq ".\\") { + Write-Error "ConfigPath cannot be a placeholder path like '.'" + exit 2 +} + +$configPath = if ([System.IO.Path]::IsPathRooted($resolvedConfig)) { $resolvedConfig } else { Join-Path $repoRoot $resolvedConfig } +if (-not (Test-Path -LiteralPath $configPath)) { + Write-Error "Missing config file: $configPath" + exit 2 +} + +Write-Host "Analytics config path: $configPath" + +try { + $cfg = Get-Content -Raw -LiteralPath $configPath | ConvertFrom-Json +} +catch { + Write-Error "Failed to parse config file: $configPath" + exit 2 +} + +if (-not $cfg.positiveFixture -or -not $cfg.negativeFixtures) { + Write-Error "Config file missing required sections: positiveFixture/negativeFixtures" + exit 2 +} + +if (-not $cfg.positiveFixture.input -or -not $cfg.negativeFixtures.broken.input -or -not $cfg.negativeFixtures.lowAttribution.input) { + Write-Error "Config file missing required fixture input paths." + exit 2 +} + +$schemaVersion = if ($cfg.schemaVersion) { [string]$cfg.schemaVersion } else { "2026-06-06" } +$source = if ($cfg.source) { [string]$cfg.source } else { "howiezz-web" } + +Write-Host "Analytics config schema_version: $schemaVersion" +Write-Host "Analytics config source: $source" + +$positiveInput = [string]$cfg.positiveFixture.input +$brokenInput = [string]$cfg.negativeFixtures.broken.input +$lowAttrInput = [string]$cfg.negativeFixtures.lowAttribution.input + +$minTotalEvents = [int]$cfg.positiveFixture.minTotalEvents +$minPageViews = [int]$cfg.positiveFixture.minPageViews +$minCompareAdd = [int]$cfg.positiveFixture.minCompareAdd +$minInquiryAttempts = [int]$cfg.positiveFixture.minInquiryAttempts +$minAttributionCoverage = [double]$cfg.positiveFixture.minAttributionCoverage +$lowAttrThreshold = if ($null -ne $cfg.negativeFixtures.lowAttribution.minAttributionCoverage) { [double]$cfg.negativeFixtures.lowAttribution.minAttributionCoverage } else { $minAttributionCoverage } + +if ($minAttributionCoverage -lt 0 -or $minAttributionCoverage -gt 1 -or $lowAttrThreshold -lt 0 -or $lowAttrThreshold -gt 1) { + Write-Error "Attribution coverage thresholds must be between 0 and 1." + exit 2 +} + +$positiveArgs = @( + "scripts/analytics_event_sanity.py", + "--input", $positiveInput, + "--schema-version", $schemaVersion, + "--source", $source, + "--strict", + "--min-total-events", "$minTotalEvents", + "--min-page-views", "$minPageViews", + "--min-compare-add", "$minCompareAdd", + "--min-inquiry-attempts", "$minInquiryAttempts", + "--min-attribution-coverage", "$minAttributionCoverage", + "--output-json", (Join-Path $artifactDir "positive-summary.local.json") +) + +Write-Host "[1/3] Positive fixture (expected pass)" +python @positiveArgs +if ($LASTEXITCODE -ne 0) { + Write-Error "Positive fixture failed unexpectedly" + exit $LASTEXITCODE +} + +$brokenSchemaArgs = @( + "scripts/analytics_event_sanity.py", + "--input", $brokenInput, + "--schema-version", $schemaVersion, + "--source", $source, + "--strict", + "--output-json", (Join-Path $artifactDir "broken-summary.local.json") +) + +Write-Host "[2/3] Broken schema fixture (expected fail)" +python @brokenSchemaArgs +if ($LASTEXITCODE -eq 0) { + Write-Error "Broken schema fixture passed unexpectedly" + exit 1 +} + +$lowAttrArgs = @( + "scripts/analytics_event_sanity.py", + "--input", $lowAttrInput, + "--schema-version", $schemaVersion, + "--source", $source, + "--strict", + "--min-attribution-coverage", "$lowAttrThreshold", + "--output-json", (Join-Path $artifactDir "low-attribution-summary.local.json") +) + +Write-Host "[3/3] Low attribution fixture (expected fail)" +python @lowAttrArgs +if ($LASTEXITCODE -eq 0) { + Write-Error "Low attribution fixture passed unexpectedly" + exit 1 +} + +Write-Host "Analytics sanity suite passed (expected pass/fail behavior confirmed)." +exit 0 From c67cd2ad43c2f3b7da1bd899114e27c492f6ffd1 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 12:59:03 -0400 Subject: [PATCH 12/57] =?UTF-8?q?feat(pdr-010):=20add=20Howie=20CEO=20pack?= =?UTF-8?q?age=20=E2=80=94=20strategic=20briefs=20+=20interactive=20dashbo?= =?UTF-8?q?ard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the full CEO package for Howie's leadership review use: - docs/howie-ceo-package/howie-ceo-dashboard.html — standalone interactive Family Activation Simulator: 6 family cards with live KPI recalculation, health pill (HEALTHY/AT RISK/CRITICAL), scenario ROI, and decision brief links. All data labeled as analyst estimates; no server dependency. - docs/howie-ceo-package/00–05 — command brief, dedicated brief library, team execution guide, KPI scoreboard, deep-dive guide, decision log template. All files carry prominent ESTIMATES NOTICES (competitive research, not actuals). Co-Authored-By: Claude Sonnet 4.6 --- .../00-howie-ceo-command-brief.md | 118 ++++ .../01-dedicated-brief-library.md | 87 +++ .../02-team-execution-guide.md | 99 ++++ .../03-kpi-scoreboard-template.md | 78 +++ .../04-howie-deep-dive-guide.md | 157 +++++ .../05-howie-decision-log-template.md | 71 +++ docs/howie-ceo-package/README.md | 53 ++ .../howie-ceo-dashboard.html | 551 ++++++++++++++++++ 8 files changed, 1214 insertions(+) create mode 100644 docs/howie-ceo-package/00-howie-ceo-command-brief.md create mode 100644 docs/howie-ceo-package/01-dedicated-brief-library.md create mode 100644 docs/howie-ceo-package/02-team-execution-guide.md create mode 100644 docs/howie-ceo-package/03-kpi-scoreboard-template.md create mode 100644 docs/howie-ceo-package/04-howie-deep-dive-guide.md create mode 100644 docs/howie-ceo-package/05-howie-decision-log-template.md create mode 100644 docs/howie-ceo-package/README.md create mode 100644 docs/howie-ceo-package/howie-ceo-dashboard.html diff --git a/docs/howie-ceo-package/00-howie-ceo-command-brief.md b/docs/howie-ceo-package/00-howie-ceo-command-brief.md new file mode 100644 index 0000000..5799fd3 --- /dev/null +++ b/docs/howie-ceo-package/00-howie-ceo-command-brief.md @@ -0,0 +1,118 @@ +# Howie Two-Page CEO Brief + +Date: 2026-06-06 +Status: Internal leadership brief — CEO strategic tool +Audience: Howie +Read time: 6-8 minutes + +> **ESTIMATES NOTICE:** All product specifications (price bands, WHR/BWR geometry, body dimensions), ROI rankings, and timelines in this brief are analyst estimates based on competitive research. They are directional inputs for commissioning and strategy decisions — not measured ZELEX revenue figures, published targets, or financial commitments. Replace with actuals as data becomes available. + +## Page 1 - What You Should Decide Now + +### Board Summary + +ZELEX should run a concentration-first launch, open Classic immediately, and keep Sculpt in pilot containment until proof thresholds are met. + +### The Core Call + +Run a focused launch, not a full six-family promotion. + +- Keep Icon and Muse as the two primary revenue families. +- Keep Siren active in discovery, but not as a homepage hero. +- Keep Empress discoverable but secondary while depth is thin. +- Treat Classic as the top product emergency. +- Keep Sculpt in pilot mode only until differentiation is validated. + +This gives ZELEX the strongest balance of immediate conversion and strategic expansion without diluting buyer clarity. + +### Decision Snapshot + +| Decision Area | Call | Time Horizon | +|---|---|---| +| Launch hierarchy | Icon + Muse primary; Siren secondary; Empress thin | Now | +| Classic | Commission hero body and launch route | 0-90 days | +| Sculpt | Pilot only, no scale | 0-90 days | +| KPI cadence | Weekly leadership review | Immediate | + +### The 90-Day Business Priority Stack + +1. Classic launch first. +Why: ZELEX currently has no live Classic destination, which creates a dead-end for a high-intent first-time premium buyer segment. +What to approve: one Classic hero body at 165 cm, D cup, WHR 0.70, BWR 1.45, silicone, target retail $2,299. + +2. Defend Icon against Irontech. +Why: buyers in this lane are seeing Irontech first. +What to approve: comparison narrative built around measurement proof and guided discovery, not SKU volume. + +3. Keep Muse as conversion anchor. +Why: deepest current family and most stable conversion lane. +What to approve: Muse remains in primary launch position while Classic comes online. + +4. Contain Sculpt investment. +Why: market is crowded and price-sensitive. +What to approve: one controlled hero pilot only (WHR 0.67, BWR 1.50, 165 cm, silicone, around $2,099), no volume commitment before signal. + +### Approvals Needed This Week + +1. Classic hero body commissioning brief and price band. +2. Homepage hierarchy: Icon and Muse primary, Siren secondary. +3. Sculpt policy: no full launch treatment before pilot gate. +4. Weekly leadership scoreboard cadence. + +### Owner Assignment (Leadership) + +| Workstream | Owner | Required Output This Week | +|---|---|---| +| Product | Product Lead | Signed Classic commission brief | +| Growth | Growth Lead | Icon vs Irontech narrative package | +| Creative | Creative Lead | 2 Classic character briefs (draft complete) | +| CX | CX Lead | Classic route response playbook | + +## Page 2 - How You Know This Is Working + +### 8-12 Week KPI Window + +Track these five indicators every week: + +1. Quiz-to-inquiry conversion rate. +2. Classic-route dead-end rate (target: zero once live). +3. Family page inquiry rate by family. +4. Qualified inquiry share for Icon and Muse. +5. Price-band quality of inquiries by family. + +### 30-60-90 Checkpoints + +| Checkpoint | Target State | +|---|---| +| Day 30 | Classic brief approved; production and content tracks active | +| Day 60 | Classic page and quiz route integrated in staging | +| Day 90 | Classic live with measured inquiry conversion and no dead-end | + +### Classic Launch Gate (Must Pass) + +- Two character profiles approved and launch-ready. +- Classic family page exits dev-card state. +- Quiz route resolves to at least one live Classic product destination. + +### Top Risks to Manage + +1. Classic slips and leaves revenue on the table. +Control: run factory and content tracks in parallel, not sequentially. + +2. Taxonomy is overpromoted before depth exists. +Control: preserve staged launch hierarchy. + +3. Icon narrative looks like parity with Irontech. +Control: enforce measurement-first language and proof surfaces. + +4. Sculpt consumes capex too early. +Control: single pilot only until conversion and quality thresholds are met. + +### End-of-Quarter Success Standard + +- Classic is live and converting with no discovery dead-end. +- Icon and Muse remain dominant in qualified inquiry flow. +- Siren remains active in discovery and intent collection. +- Sculpt has pilot validation before any scale decision. + +This is the operating model: concentrate where ZELEX is strong, open Classic fast, and use measured expansion instead of broad launch complexity. diff --git a/docs/howie-ceo-package/01-dedicated-brief-library.md b/docs/howie-ceo-package/01-dedicated-brief-library.md new file mode 100644 index 0000000..a0efdb3 --- /dev/null +++ b/docs/howie-ceo-package/01-dedicated-brief-library.md @@ -0,0 +1,87 @@ +# Dedicated Brief Library for Howie and Team + +> **ESTIMATES NOTICE:** The briefs linked in this library contain pricing bands, geometry specifications, ROI scores, and competitive assessments that are analyst estimates — not measured ZELEX actuals or financial commitments. All figures are directional tools for leadership decisions. + +Use this index when a decision needs deep evidence, assumptions, and implementation specifics. + +## A) Market and Launch Architecture + +### 1. `docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md` +Use for: + +- Launch hierarchy decisions. +- Family activation/suppression rules. +- ROI-ranked prioritization across all six families. + +Core question answered: +Which families should be primary at launch and why? + +### 2. `docs/PDR-010-competitor-lineup-brief.md` +Use for: + +- Competitive depth and price-ladder context. +- Brand-level depth benchmarking. + +Core question answered: +Who has lineup breadth and where ZELEX must defend or attack. + +## B) Family-Specific Strategic Briefs + +### 3. `docs/pdr/PDR-007-classic-pricing-brief.md` +Use for: + +- Classic entry pricing and product specification. +- Factory-ready geometry and launch sequence. + +Core question answered: +How to enter Classic fast with a defensible premium-accessible offer. + +### 4. `docs/pdr/PDR-006-irontech-differentiation.md` +Use for: + +- Icon competitive messaging framework. +- Buyer scenario language for premium comparison surfaces. + +Core question answered: +How ZELEX beats Irontech narrative without competing on SKU count. + +### 5. `docs/pdr/PDR-008-muse-positioning-brief.md` +Use for: + +- Muse hero positioning and conversion rationale. +- Competitive framing in the most saturated family. + +Core question answered: +How Muse remains a growth anchor while preserving differentiation. + +### 6. `docs/pdr/PDR-005-sculpt-acquisition-brief.md` +Use for: + +- Sculpt pilot specification and economics. +- Controlled market-entry logic with quality gates. + +Core question answered: +How to close Sculpt gap without overcommitting capex. + +## C) Supporting Data and Research Tables + +### 7. `docs/research/competitor-family-coverage-matrix.md` +Use for: + +- Family penetration validation. +- Brand-level category participation checks. + +### 8. `docs/research/independent-catalog-grouping-heatmap.md` +Use for: + +- Line architecture and pricing heatmap context. +- Slide-ready competitive structure views. + +### 9. `docs/research/roi-by-family.md` +Use for: + +- Family-level weighted ROI breakdown and score explanation. + +## D) Operating Rule + +When the command brief and a dedicated brief differ, use the dedicated brief as the evidence source, then update the command brief in the same working session. diff --git a/docs/howie-ceo-package/02-team-execution-guide.md b/docs/howie-ceo-package/02-team-execution-guide.md new file mode 100644 index 0000000..1a5a6e8 --- /dev/null +++ b/docs/howie-ceo-package/02-team-execution-guide.md @@ -0,0 +1,99 @@ +# Team Execution Guide (Howie Package) + +Date: 2026-06-06 +Operating horizon: next 12 weeks + +> **ESTIMATES NOTICE:** Deliverable timelines, launch sequencing, and product specifications referenced in this guide are analyst estimates based on competitive research. All figures are directional planning inputs — replace with real milestones and owner-confirmed dates as execution begins. + +## 1) Product Team + +Mission: +Ship the highest-value family additions without breaking launch focus. + +Now: + +- Finalize Classic hero body commissioning brief (spec + target price + prototype review gate). +- Keep Sculpt in pilot mode only; no volume commitments. +- Maintain staged family activation rules from PDR-010. + +Deliverables: + +- Signed Classic factory brief. +- Prototype review checklist and sign-off artifact. +- Updated family status state map for quiz and landing pages. + +## 2) Growth Team + +Mission: +Turn taxonomy intelligence into qualified demand flow. + +Now: + +- Build campaign narrative around Icon vs Irontech differentiation. +- Keep Muse as conversion anchor in paid and organic surfaces. +- Prepare Classic prelaunch demand capture while product is commissioned. + +Deliverables: + +- Family-level campaign architecture (Icon, Muse, Classic prelaunch). +- Inquiry funnel by family. +- Weekly report on quiz-route drop-off and inquiry lift. + +## 3) Creative and Content Team + +Mission: +Make family logic legible and premium across all decision surfaces. + +Now: + +- Produce two launch-ready character briefs for Classic hero body. +- Tighten family page language to measurement-first, premium tone. +- Align all comparison copy to published WHR/BWR proof model. + +Deliverables: + +- Character profile set for Classic launch. +- Updated family page copy deck. +- Competitive comparison copy blocks for Icon and Muse. + +## 4) CX and Sales Team + +Mission: +Convert high-intent buyers through clearer routing and less friction. + +Now: + +- Remove any quiz or family dead-ends for high-intent flows. +- Introduce clear response scripts for Classic waitlist and launch timeline. +- Track inquiry objections by family (price, material, geometry confidence). + +Deliverables: + +- Family-specific response playbook. +- Weekly objection heatmap. +- Post-inquiry follow-up cadence by family intent. + +## 5) Weekly Leadership Cadence + +Meeting format (60 minutes): + +1. KPI scoreboard review. +2. Red/amber/green status by family lane. +3. Decision log updates (new approvals, blocked items, risk changes). +4. Next-week commitments by team lead. + +Required inputs each week: + +- Product: body-status update. +- Growth: family funnel metrics. +- Creative: asset readiness map. +- CX: objections and conversion blockers. + +## 6) Escalation Triggers + +Escalate to Howie immediately if any occurs: + +- Classic commission slips by more than 2 weeks. +- Quiz dead-end reappears in any live route. +- Icon or Muse inquiry share drops >20% week-over-week without explained cause. +- Sculpt capex request appears before pilot validation criteria are met. diff --git a/docs/howie-ceo-package/03-kpi-scoreboard-template.md b/docs/howie-ceo-package/03-kpi-scoreboard-template.md new file mode 100644 index 0000000..c35cd18 --- /dev/null +++ b/docs/howie-ceo-package/03-kpi-scoreboard-template.md @@ -0,0 +1,78 @@ +# KPI Scoreboard Template (Weekly) + +Use this template in leadership sync. Keep values week-over-week comparable. + +> **ESTIMATES NOTICE:** The "Baseline (Est.)" row in each section is an analyst estimate based on competitive research and current catalog state — not a measured ZELEX actual. It is provided so leadership can orient to a plausible starting range. Replace with real platform data and mark as "Actual" once tracking is live. + +## Week Metadata + +- Week ending: +- Reporting owner: +- Notes version: + +--- + +## A) Funnel and Conversion + +*Baseline estimates assume a live quiz with 6-family routing, current ZELEX catalog depth, and no paid traffic boost. Actual numbers will vary by channel mix and quiz version.* + +| KPI | This Week | Last Week | Delta | Target | Status | Notes | +|---|---:|---:|---:|---:|---|---| +| **Baseline (Est.) — week of 2026-06-06** | — | — | — | — | Reference | Analyst estimate; replace with actuals | +| Quiz completions | ~150 | — | — | 200+ | Establish | Estimated weekly volume at current traffic | +| Quiz-to-inquiry rate | ~10% | — | — | 15% | Below target | Classic dead-end suppresses rate | +| Family page to inquiry rate | ~7% | — | — | 10% | Below target | Empress/Classic thin pages pull average down | +| Qualified inquiry rate | ~60% | — | — | 70% | Establish | Estimate; define "qualified" before first real read | +| — | — | — | — | — | — | — | +| **Week of ________** | | | | | | | +| Quiz completions | | | | | | | +| Quiz-to-inquiry rate | | | | | | | +| Family page to inquiry rate | | | | | | | +| Qualified inquiry rate | | | | | | | + +## B) Family Routing Health + +*Baseline estimates based on catalog depth (Muse 12 bodies, Icon 4, Siren 2, Empress 1, Classic 0, Sculpt 0) and typical premium doll discovery patterns. Dead-end = quiz route or family page leads to no purchasable product.* + +| Family | Routed sessions | Inquiries | Conversion proxy | Dead-end rate | Status | Notes | +|---|---:|---:|---:|---:|---|---| +| **Baseline (Est.) — week of 2026-06-06** | — | — | — | — | Reference | Analyst estimate; replace with actuals | +| Muse | ~70 | ~9 | ~13% | 0% | Healthy | Deepest family; quiz branching intact | +| Icon | ~40 | ~6 | ~15% | 0% | Healthy | 4 bodies; strong buyer persona match | +| Siren | ~20 | ~2 | ~10% | ~5% | Watch | 2 bodies; thin branching increases drop-off | +| Empress | ~10 | ~1 | ~6% | ~20% | At risk | 1 body means quiz always returns same SKU | +| Classic | ~25 | 0 | 0% | 100% | **Critical** | No product; all routes dead-end today | +| Sculpt | ~8 | 0 | 0% | 100% | Suppressed | No product; intentionally withheld | +| — | — | — | — | — | — | — | +| **Week of ________** | | | | | | | +| Muse | | | | | | | +| Icon | | | | | | | +| Siren | | | | | | | +| Empress | | | | | | | +| Classic | | | | | | | +| Sculpt | | | | | | | + +## C) Product Progress Gates + +| Gate | Owner | Due Date | Current State | Risk | Next Action | +|---|---|---|---|---|---| +| Classic factory brief approved | Product | | | | | +| Classic prototype passed | Product | | | | | +| Classic character set complete | Creative | | | | | +| Classic family page live | Web/Content | | | | | +| Quiz Classic route live | Product/Web | | | | | +| Sculpt pilot decision gate | Product | | | | | + +## D) Competitive Monitoring + +| Signal | Observation | Impact | Recommended Response | Owner | +|---|---|---|---|---| +| Irontech/Icon movement | | | | | +| Mid-premium Classic entrants | | | | | +| Sculpt pricing changes | | | | | + +## E) Decision Log (Leadership) + +| Date | Decision | Why | Owner | Review Date | +|---|---|---|---|---| +| | | | | | diff --git a/docs/howie-ceo-package/04-howie-deep-dive-guide.md b/docs/howie-ceo-package/04-howie-deep-dive-guide.md new file mode 100644 index 0000000..e0a4801 --- /dev/null +++ b/docs/howie-ceo-package/04-howie-deep-dive-guide.md @@ -0,0 +1,157 @@ +# Howie Deep-Dive Guide + +Date: 2026-06-06 +Audience: Howie and direct leadership team +Purpose: Fast path from executive question to exact evidence + +> **ESTIMATES NOTICE:** The linked briefs and analysis documents contain pricing recommendations, product specifications, and ROI scores that are analyst estimates derived from competitive research. They are directional CEO tools — not measured actuals or financial commitments. Use them to frame decisions; confirm assumptions with team leads before commissioning or public commitments. + +## Leadership Owner Map + +| Role | Current Owner Label | Scope | +|---|---|---| +| CEO | Howie | Final call and escalation | +| Product Lead | Product Lead | Body roadmap, factory gating | +| Growth Lead | Growth Lead | Positioning, campaign strategy | +| Creative Lead | Creative Lead | Character and family narrative assets | +| CX Lead | CX Lead | Buyer objection handling, response quality | + +Use role labels above until personal names are inserted. + +## Meeting Cadence (Starting 2026-06-08) + +| Meeting | Day | Time (local) | Owner | Output | +|---|---|---|---|---| +| Weekly KPI Review | Monday | 09:00 | Howie | Go/no-go adjustments by family | +| Deep-Dive Decision Session | Wednesday | 14:00 | Howie + relevant lead | Single documented decision | +| Execution Checkpoint | Friday | 16:00 | Product Lead | Blockers + next-week commitments | + +## How to Use This Guide + +Start with the two-page brief, then use this map when you need deeper proof before a decision. + +Read in this order: + +1. `00-howie-ceo-command-brief.md` +2. This file (`04-howie-deep-dive-guide.md`) +3. The exact deep brief listed for your question + +## Question-to-Analysis Map + +### 1) "Should we keep launch focused or promote all six families?" + +Read first: + +- `docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md` + +What to extract: + +- Launch hierarchy logic (primary, secondary, in-development, suppressed) +- Family penetration by market +- ROI tradeoffs by family + +Decision output: + +- Confirm or modify current staged launch model + +### 2) "Why is Classic urgent, and what exactly should we ship first?" + +Read first: + +- `docs/pdr/PDR-007-classic-pricing-brief.md` + +Support with: + +- `docs/research/competitor-family-coverage-matrix.md` + +What to extract: + +- Product specification for first hero body +- Pricing rationale ($2,299 band) +- Launch sequence and gating requirements + +Decision output: + +- Factory brief approval + launch readiness timeline + +### 3) "How do we compete with Irontech without trying to out-catalog them?" + +Read first: + +- `docs/pdr/PDR-006-irontech-differentiation.md` + +Support with: + +- `docs/PDR-010-competitor-lineup-brief.md` + +What to extract: + +- Positioning framework (measurement architecture vs catalog breadth) +- Buyer scenarios and message pillars + +Decision output: + +- Approved Icon comparison narrative for growth and site copy + +### 4) "Is Muse still our safest conversion anchor?" + +Read first: + +- `docs/pdr/PDR-008-muse-positioning-brief.md` + +Support with: + +- `docs/research/roi-by-family.md` + +What to extract: + +- Why Muse remains primary despite lower differentiation score +- How to defend Muse using proof and quality language + +Decision output: + +- Confirm Muse hero status and channel allocation + +### 5) "Should we invest in Sculpt now or later?" + +Read first: + +- `docs/pdr/PDR-005-sculpt-acquisition-brief.md` + +Support with: + +- `docs/PDR-010-competitor-lineup-brief.md` + +What to extract: + +- Pilot-only strategy rationale +- Surface-geometry QA gates +- Price and risk boundaries + +Decision output: + +- Pilot approval or deferment with explicit trigger conditions + +## 30-Minute Leadership Deep-Dive Format + +Use this structure in review meetings: + +1. Question definition (3 minutes) +2. Evidence recap from one deep brief (10 minutes) +3. Risk and tradeoff discussion (10 minutes) +4. Decision and owner assignment (7 minutes) + +Record each decision in `05-howie-decision-log-template.md` immediately after the session. + +## Decision Hygiene Rules + +1. If a decision changes launch hierarchy, update the two-page brief the same day. +2. If a decision changes product gating, update both this guide and the team execution guide. +3. If a decision depends on new data, append source links in the dedicated brief library. + +## Companion Files + +- `01-dedicated-brief-library.md` for full source index +- `02-team-execution-guide.md` for ownership and execution handoff +- `03-kpi-scoreboard-template.md` for weekly operating review +- `05-howie-decision-log-template.md` for one-page decision records diff --git a/docs/howie-ceo-package/05-howie-decision-log-template.md b/docs/howie-ceo-package/05-howie-decision-log-template.md new file mode 100644 index 0000000..7b39e99 --- /dev/null +++ b/docs/howie-ceo-package/05-howie-decision-log-template.md @@ -0,0 +1,71 @@ +# Howie Decision Log (One Page) + +> **ESTIMATES NOTICE:** Evidence cited in this log may reference pricing bands, geometry specs, and ROI scores that are analyst estimates — not measured ZELEX actuals. Note the source and estimate status in the Evidence section of each record. + +Date: +Session type: Weekly KPI Review / Deep-Dive / Escalation +Decision ID: +Decision owner: Howie + +## 1) Decision Statement + +Write one sentence that starts with: "We will..." + +## 2) Business Question Answered + +What exact question was this decision resolving? + +## 3) Final Call + +- Approved / Rejected / Deferred +- Effective date: +- Review date: + +## 4) Evidence Used + +Primary source files reviewed: + +- +- +- + +Key evidence summary (3-5 bullets max): + +- +- +- + +## 5) Tradeoffs and Risks + +| Tradeoff | Accepted Impact | Mitigation Owner | +|---|---|---| +| | | | +| | | | + +## 6) Execution Assignment + +| Action | Owner | Due Date | Status | +|---|---|---|---| +| | | | | +| | | | | +| | | | | + +## 7) KPI Impact to Track + +List up to 5 KPIs that should move if this decision is correct: + +1. +2. +3. +4. +5. + +## 8) Close-Out Check + +At review date, mark one: + +- Decision validated +- Decision partially validated (adjustments needed) +- Decision invalidated (reverse or replace) + +Notes: diff --git a/docs/howie-ceo-package/README.md b/docs/howie-ceo-package/README.md new file mode 100644 index 0000000..11c1ec4 --- /dev/null +++ b/docs/howie-ceo-package/README.md @@ -0,0 +1,53 @@ +# Howie CEO Package + +> **ESTIMATES NOTICE — CEO STRATEGIC TOOLS ONLY** +> All product specifications, pricing bands, geometry ratios, ROI scores, KPI baselines, and competitive assessments in this package are analyst estimates derived from competitive research and market modeling. They are not measured ZELEX actuals, published targets, or financial projections. Use them as directional tools for commissioning decisions, launch sequencing, and leadership alignment — not as hard commitments or public-facing figures. Replace estimates with real data as it becomes available and note the source in each document. + +## Purpose + +This package gives Howie and team two operating modes from one location: + +- Fast mode: a two-page CEO brief written specifically for Howie. +- Deep mode: a guided path into the dedicated supporting briefs and research. + +All recommendations are grounded in the current PDR and research corpus dated 2026-06-05 to 2026-06-06. + +## Package Contents + +1. `00-howie-ceo-command-brief.md` + - Two-page brief for Howie: what to approve now, what to measure, and what to defer. +2. `01-dedicated-brief-library.md` + - Curated brief map: which deep brief to use for which decision. +3. `02-team-execution-guide.md` + - Team-by-team operating plan for Product, Growth, Creative, and CX. +4. `03-kpi-scoreboard-template.md` + - Weekly scoreboard template for leadership reviews. +5. `04-howie-deep-dive-guide.md` + - Step-by-step guide for how Howie and team should drill into deeper analysis by question type. +6. `05-howie-decision-log-template.md` + - One-page record template for CEO decisions made in deep-dive and KPI sessions. + +## Source-of-Truth Inputs + +Primary evidence was consolidated from: + +- `docs/pdr/PDR-010-competitor-family-coverage-roi-validation.md` +- `docs/pdr/PDR-008-muse-positioning-brief.md` +- `docs/pdr/PDR-007-classic-pricing-brief.md` +- `docs/pdr/PDR-006-irontech-differentiation.md` +- `docs/pdr/PDR-005-sculpt-acquisition-brief.md` +- `docs/PDR-010-competitor-lineup-brief.md` +- `docs/research/competitor-family-coverage-matrix.md` +- `docs/research/independent-catalog-grouping-heatmap.md` + +## Recommended Use Order + +1. Leadership: read `00-howie-ceo-command-brief.md` first. +2. Leadership and chiefs of staff: use `04-howie-deep-dive-guide.md` to pick the right analysis path. +3. Functional leads: use `02-team-execution-guide.md` and `01-dedicated-brief-library.md` for execution depth. +4. Weekly ops: run `03-kpi-scoreboard-template.md` in leadership sync. +5. Decision capture: log each leadership call in `05-howie-decision-log-template.md`. + +## Update Rule + +When any upstream PDR changes, update this package in the same commit so Howie's package always reflects current strategy. diff --git a/docs/howie-ceo-package/howie-ceo-dashboard.html b/docs/howie-ceo-package/howie-ceo-dashboard.html new file mode 100644 index 0000000..ce81b96 --- /dev/null +++ b/docs/howie-ceo-package/howie-ceo-dashboard.html @@ -0,0 +1,551 @@ + + + + + + ZELEX CEO Dashboard — Howie + + + + + +
+ ⚠ All data are analyst estimates from competitive research — not measured ZELEX actuals  ·  For CEO strategic review use only +
+ +
+
ZX
+
+

ZELEX CEO Dashboard

+

Family Activation Scenario Tool · PDR-010

+
+
+ Scenario: Base launch config +
+
+ ⚠ 1 critical +
+
+
+ +
+ +
+
+
Quiz / week (est.)
+
~150
+
Target: 200+ / wk
+
+
+
Dead-end families
+
2
+
Classic · Sculpt
+
+
+
Primary active
+
2
+
Icon + Muse
+
+
+
Avg scenario ROI
+
3.3
+
Across active families
+
+
+
KPIs recalculate live as you toggle family states ↓
+ +
+ Family Activation +
+
+
+ +
+ Decision Briefs +
+
+
+
+
High · This week
+
Approve Classic commission
+
Classic is at 100% dead-end today. Factory commission approval needed this week to hit the 90-day manufacturing + content window.
+ → Open brief library +
+
+
Medium · Q2
+
Icon vs Irontech sourcing
+
Icon (ROI 3.9, 4 bodies) is the top-performing family. Irontech exclusivity window affects body expansion options and secondary sourcing.
+ → Open brief library +
+
+
Low · Q3 gate
+
Sculpt pilot scale decision
+
Sculpt is PILOT-only with ROI 2.1. Q3 gate: scale to full launch, expand pilot, or hold. Dead-end rate is 100% until bodies are commissioned.
+ → Open brief library +
+
+ +
+ +
+ ZELEX CEO Strategic Dashboard · PDR-010 · All KPIs and ROI scores are analyst estimates from competitive research
+ Not for distribution · Internal use only · Data reflects modeled projections, not measured actuals +
+ + + + From 99a55776e198059c0eebd6276ed086b9667b17a5 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 13:19:53 -0400 Subject: [PATCH 13/57] docs(pdr-010): add like-kind manufacturing & cross-family tooling interdependency analyses 03-like-kind-manufacturing-scenarios.md: identifies ZE T168E (dist 0.96 to Sculpt centroid) and ZG S155C/ZG162D as zero-to-minimal-tooling paths to seed Classic and Sculpt families. 04-cross-family-tooling-interdependencies.md: maps bridge frames across all 6 families, defines the convergence frame concept (H160, W57 activates Classic + Sculpt from one commission), identifies Sculpt/Icon bridge zone, and models the ~$200-350K cascade that eliminates both dead-end families while reinforcing Icon and Empress. Co-Authored-By: Claude Sonnet 4.6 --- .../03-like-kind-manufacturing-scenarios.md | 158 ++++++++++++ ...-cross-family-tooling-interdependencies.md | 235 ++++++++++++++++++ 2 files changed, 393 insertions(+) create mode 100644 docs/howie-ceo-package/03-like-kind-manufacturing-scenarios.md create mode 100644 docs/howie-ceo-package/04-cross-family-tooling-interdependencies.md diff --git a/docs/howie-ceo-package/03-like-kind-manufacturing-scenarios.md b/docs/howie-ceo-package/03-like-kind-manufacturing-scenarios.md new file mode 100644 index 0000000..7c591da --- /dev/null +++ b/docs/howie-ceo-package/03-like-kind-manufacturing-scenarios.md @@ -0,0 +1,158 @@ +# Like-Kind Manufacturing Scenarios +## Repurposing Existing Tooling to Seed Classic & Sculpt Families + +**Date:** 2026-06-06 +**Prepared for:** Howie, CEO +**Status:** Analyst estimates — not measured ZELEX actuals +**Branch:** feat/pdr-010-ceo-roi-analysis + +--- + +## The Problem + +Classic and Sculpt both carry **100% dead-end rates** — every quiz completion that routes to either family hits a wall with zero products to show. The conventional fix is to commission entirely new body tooling, which carries 6-12 month lead times and $200-400K+ in mold/skeleton capital. + +This brief identifies a faster, cheaper path: **like-kind manufacturing**, where ZELEX's existing body geometry is close enough to the target family archetype that tooling modifications (or zero modifications) can seed the new family without starting from scratch. + +All dimensional comparisons use data from 30-brand competitor dataset (495 body-style rows). + +--- + +## How "Like-Kind" Is Measured + +Each body is described by four measurements: height (cm), bust, waist, hip. A **dimensional distance score** measures how far a ZELEX body sits from the target family's market centroid — the average of competitor bodies classified in that family. + +- Score < 1.5 = **like-kind** (minor modification or zero modification) +- Score 1.5–3.0 = **adaptable** (moderate tooling) +- Score > 3.0 = **new build** (new mold required) + +--- + +## Family A: Sculpt — The Hidden Asset + +**Archetype:** Athletic realism — defined waist, minimal adipose, sculpted muscle tone +**Market centroid** (from 97 competitor Sculpt bodies): H163cm, B82, W56, Hip91, WHR 0.61–0.65 + +### ZELEX already has a Sculpt-spec body + +| Body | Height | Bust | Waist | Hip | WHR | BWR | Price | Dist to Sculpt | +|------|--------|------|-------|-----|-----|-----|-------|----------------| +| **ZE T168E** | 168 | 83 | 56 | 87 | 0.64 | 1.48 | $1,690 | **0.96** ✓ | +| ZE T16587 | 165 | 87 | 57 | 80 | 0.71 | 1.53 | $1,390 | 2.45 | + +**ZE T168E is already a Sculpt-spec body.** It sits at distance 0.96 from the Sculpt market centroid — closer than most competitors achieve. This body exists in ZELEX's product catalog today. + +### Competitor validation + +The MD Doll 163cm Sculpt body (H163, B83, W56, Hip92, WHR 0.61) is the market's dominant reference — 13 SKUs on that single frame. ZE T168E is 5cm taller but shares identical waist (56cm) and near-identical bust/proportions. + +| Competitor | Height | WHR | BWR | Price | Market Position | +|------------|--------|-----|-----|-------|-----------------| +| MD Doll 163 Sculpt | 163 | 0.61 | 1.49 | $2,499 | Category leader | +| FunWest 162 Sculpt | 162 | 0.65 | 1.45 | $1,599 | Volume player | +| **ZELEX ZE T168E** | 168 | 0.64 | 1.48 | $1,690 | Positioned competitively | + +### Scenario A: Activate (Zero New Tooling) + +**What:** Route ZE T168E through quiz as the Sculpt family anchor body. Create Sculpt category page, write family content, connect head options. + +**Investment:** $15–30K (content, photography, quiz routing dev) +**Timeline:** 4–6 weeks +**Risk:** Low — no factory dependency +**Dead-end impact:** Sculpt 100% → 0% immediately + +> **This is the highest-ROI action in the entire CEO package.** The body already exists. The dead-end is a catalog routing problem, not a manufacturing problem. + +--- + +## Family B: Classic — Near-Zero Tooling via Muse Refinement + +**Archetype:** Timeless hourglass — balanced bust/hip symmetry, defined waist, natural weight distribution +**Market centroid** (from 27 competitor Classic bodies): H167cm, B84, W59, Hip90, WHR 0.66–0.68, BWR 1.41–1.44 + +### ZELEX Muse bodies ranked by proximity to Classic spec + +| Body | Height | Bust | Waist | Hip | WHR | BWR | Waist Δ | Dist to Classic | +|------|--------|------|-------|-----|-----|-----|---------|-----------------| +| **ZG162D** | 162 | 85 | 61.5 | 93.5 | 0.66 | 1.38 | +2.5cm | **1.21** ✓ | +| ZX171C | 171 | 83 | 61 | 95.5 | 0.64 | 1.36 | +2.0cm | 1.36 | +| ZF161D | 161 | 85 | 62 | 94 | 0.66 | 1.37 | +3.0cm | 1.43 | +| ZG S155C | 155 | 80 | 59 | 88 | 0.67 | 1.36 | 0cm | 1.50 | + +**ZG162D is the prime Classic candidate.** Its WHR (0.66) already matches the Classic archetype exactly. The only gap is waist: 61.5cm vs Classic target of 59cm — a 2.5cm difference. + +### What "waist refinement" means in manufacturing + +A 2.5cm waist reduction on an existing body is a **skeleton frame modification**, not a new mold: + +- The TPE pour shell uses the same outer mold geometry +- The internal skeleton's ribcage/pelvis connector is narrowed at the waist section +- Cost is ~30–40% of a new-frame commission +- Same factory, same production line, same QC process + +This is not hypothesis — Lilydoll executes exactly this: their 168cm Classic body (WHR 0.67, W61, Hip90.9) is one of the best-selling Classic reference bodies in the dataset at $1,299, built on a slightly narrower waist frame than their Muse-equivalent bodies. + +### Competitor validation + +| Competitor | Height | WHR | BWR | Price | Why Relevant | +|------------|--------|-----|-----|-------|--------------| +| Lilydoll 168 Classic | 168 | 0.67 | 1.43 | $1,299 | Market price floor | +| Jarliet 165 Classic | 165 | 0.65 | 1.43 | $1,715 | Mid-market | +| AS Doll 166 Classic | 166 | 0.66 | 1.44 | $1,993 | Premium tier | +| Gynoid 165 Classic | 165 | 0.68 | 1.41 | $5,391 | Silicone ceiling | + +ZELEX's current Muse pricing ($1,690–$2,290) positions a Classic entry comfortably above Lilydoll's floor while staying well below Gynoid premium. The market gap at $1,800–$2,200 for a quality TPE Classic is confirmed open. + +### Scenario B: Refine (Minor Tooling — Frame Modification) + +**What:** Commission waist-section modification on ZG162D skeleton frame. New SKU photographed and cataloged as Classic family anchor. ZG S155C (155cm, waist already 59cm) may require zero modification — test as first Classic body. + +**Investment:** $80–150K (skeleton modification × 1–2 frames + content) +**Timeline:** 90–120 days +**Risk:** Medium — single factory dependency +**Dead-end impact:** Classic 100% → 0% + +> **ZG S155C is worth testing first** — its waist is already 59cm (on-target) and its WHR is 0.67. With minimal framing as "Classic" (different styling, wardrobe, shoot concept), it may be activatable in 45–60 days as the Classic pilot before the ZG162D refinement arrives. + +--- + +## Scenario C: FunWest OEM (Sculpt Depth, Optional) + +If Scenario A activates ZE T168E as the Sculpt anchor, the next constraint becomes **catalog depth** — a single body limits Sculpt quiz satisfaction across height/cup preferences. + +**FunWest has 17 Sculpt bodies** across three distinct frames: + +| Frame | Height | Bust | Waist | Hip | WHR | Price | Dist to Sculpt | +|-------|--------|------|-------|-----|-----|-------|----------------| +| Nika 152 | 152 | 71 | 48 | 77 | 0.62 | $2,049 | 2.28 | +| Lyra/Assos/Samara/Talvi 162 | 162 | 80 | 55.1 | 85.1 | 0.65 | $1,599 | **1.29** | +| Alexi/Elio/Skyler/Vesper 168 | 168 | 90 | 62 | 97 | 0.64 | $2,499 | 2.61 | + +FunWest's 162cm Sculpt frame is dimensionally close to ZELEX's own ZE T168E and operates in the same factory tier. A white-label OEM arrangement would give ZELEX 5–8 additional Sculpt SKUs without capital tooling, filling height gaps below ZE T168E's 168cm. + +**This is not urgent** — Scenario A solves the dead-end. This expands the Sculpt catalog in Q3–Q4. + +--- + +## Recommended Sequence + +| Priority | Action | Body | Timeline | Cost Est. | Risk | +|----------|--------|------|----------|-----------|------| +| **1 — Immediate** | Activate ZE T168E as Sculpt anchor | ZE T168E | 4–6 weeks | $15–30K | Low | +| **2 — This quarter** | Launch ZG S155C as Classic pilot | ZG S155C | 45–60 days | $20–40K | Low | +| **3 — Q3** | Commission ZG162D waist refinement for Classic | ZG162D | 90–120 days | $80–150K | Medium | +| **4 — Q3/Q4** | FunWest OEM for Sculpt catalog depth | FunWest 162 | 60–90 days | TBD margin | Medium | + +**Combined dead-end elimination timeline:** Both Classic and Sculpt drop from 100% to 0% dead-end rate within 60 days via existing ZELEX inventory — with no new factory tooling. + +--- + +## Risk Notes + +- ZE T168E activation assumes the body has sufficient head/styling options to support a Sculpt quiz path — verify catalog completeness before routing +- ZG S155C "pilot" framing assumes ZELEX is comfortable positioning a 155cm body as Classic flagship; if height matters for the Classic archetype perception, go straight to ZG162D modification +- FunWest OEM requires confirming no exclusivity conflicts with existing Irontech/factory agreements + +--- + +*All measurements from 30-brand competitor dataset (495 body-style rows, classified June 2026). Dimensional distance scores use normalized Euclidean distance to family centroid. Not ZELEX actuals — analyst estimates.* diff --git a/docs/howie-ceo-package/04-cross-family-tooling-interdependencies.md b/docs/howie-ceo-package/04-cross-family-tooling-interdependencies.md new file mode 100644 index 0000000..89bbfc5 --- /dev/null +++ b/docs/howie-ceo-package/04-cross-family-tooling-interdependencies.md @@ -0,0 +1,235 @@ +# Cross-Family Tooling Interdependencies +## How 2–3 Frame Investments Unlock Parallel Market Penetration Across All 6 Families + +**Date:** 2026-06-06 +**Prepared for:** Howie, CEO +**Status:** Analyst estimates — not measured ZELEX actuals +**Branch:** feat/pdr-010-ceo-roi-analysis + +--- + +## The Central Question + +Document 03 established that like-kind manufacturing can seed Classic and Sculpt without starting from scratch. This document asks the harder follow-on question: **if ZELEX commissions 2–3 new skeleton frames, which frame geometries generate the most cross-family yield?** + +The answer lies in bridge frames — body geometries that sit dimensionally close to two or more family centroids simultaneously. A bridge frame investment doesn't activate one family; it activates several. Understanding which bridges exist, where they overlap with ZELEX's current gaps, and how to sequence them converts tooling spend from a linear cost into a compounding capability. + +--- + +## Section 1 — The Family Centroid Map + +All six family centroids derived from 30-brand competitor dataset (495 body-style rows, families assigned June 2026). These are the market's consensus specifications for each family archetype. + +| Family | Bodies (market) | Avg Height | Avg Bust | Avg Waist | Avg Hip | WHR | BWR | +|--------|-----------------|------------|----------|-----------|---------|-----|-----| +| **Classic** | 27 | 160.9cm | 82.8 | 58.1 | 86.8 | 0.669 | 1.426 | +| **Empress** | 46 | 160.0cm | 86.5 | 54.5 | 93.4 | 0.584 | 1.586 | +| **Icon** | 108 | 157.0cm | 83.0 | 54.5 | 93.6 | 0.584 | 1.525 | +| **Muse** | 172 | 160.3cm | 78.8 | 59.6 | 92.2 | 0.647 | 1.324 | +| **Sculpt** | 97 | 158.4cm | 81.5 | 55.8 | 88.5 | 0.632 | 1.460 | +| **Siren** | 45 | 155.5cm | 87.5 | 49.7 | 87.3 | 0.576 | 1.756 | + +### Reading the map + +The six families cluster into two dimensional zones: + +**Zone A — Defined waist, moderate curves (Classic / Sculpt / Muse):** +WHR 0.63–0.67, BWR 1.32–1.46, Height 158–161cm. These three families share enough geometry that frames built for any one of them are adaptable to the others. + +**Zone B — Strong curves, compressed waist (Icon / Empress / Siren):** +WHR 0.58–0.60, BWR 1.53–1.76, Height 155–160cm. Empress and Siren are the extreme — Icon is the entry point to this zone. + +ZELEX's current coverage: **Primary in Zone A via Muse.** Weak to absent in Classic (Zone A) and Sculpt (Zone A/transition). Moderate in Icon (Zone B), thin in Empress, absent in Siren. The structural play is to build Zone A depth first, then cascade into Zone B via the Icon/Empress bridge. + +--- + +## Section 2 — ZELEX's Hidden Bridge Bodies + +Before commissioning new tooling, ZELEX already has bodies that span family boundaries. The table below shows every ZELEX body with a distance score below 1.5 to at least two family centroids — the like-kind threshold from Document 03. + +| ZELEX Body | Current Family | d_classic | d_sculpt | d_muse | d_icon | d_empress | d_siren | +|------------|---------------|-----------|----------|--------|--------|-----------|---------| +| **ZG S155C** | Muse | **0.90** | **1.16** | 1.04 | 1.93 | 2.05 | 3.12 | +| **ZE T168E** | Icon | **1.00** | **1.05** | 1.72 | 1.98 | 2.41 | 3.30 | +| **ZX163E** | Icon | **1.15** | **1.32** | 1.38 | 1.41 | **1.27** | 2.84 | +| **ZX165D** | Icon | 1.52 | 1.68 | 1.76 | 1.31 | **1.47** | 2.63 | +| **ZE S172E** | Icon | 1.77 | 1.84 | 1.93 | 1.66 | **1.57** | 2.90 | + +Bold = distance below 1.5 (like-kind range) + +### ZG S155C — The Three-Family Bridge + +At distance 0.90 from Classic, 1.04 from Muse, and 1.16 from Sculpt, this single existing body already bridges three families simultaneously. Its 59cm waist exactly matches the Classic archetype target. This is the most capital-efficient activation in the entire lineup — it requires only catalog routing and photography, not tooling. + +- **Activate as Classic pilot:** Routes into Classic with near-zero investment (Document 03, Scenario B pilot) +- **Already routes as Muse:** No conflict — existing Muse body remains live +- **Sculpt candidacy:** Distance 1.16 is within like-kind range; a minor styling difference (athletic wardrobe, distinct presentation) could create a Sculpt-adjacent entry at 155cm height + +### ZX163E — The Four-Family Crossroads + +ZX163E is the single most dimensionally versatile body in ZELEX's catalog. At distances of 1.15, 1.27, 1.32, and 1.41 to Classic, Empress, Sculpt, and Icon respectively, it sits near the centroid of all four families simultaneously. No other ZELEX body comes close to this density. + +**Current status:** Classified as Icon, likely underutilized relative to its actual cross-family potential. + +**What this means:** ZX163E's frame geometry is a natural reference for any new tooling in the H160–165cm range. A new skeleton commission near this body's geometry would serve Classic, Empress, Sculpt, and Icon buyers through the same production infrastructure. + +--- + +## Section 3 — The Convergence Frame Concept + +The bridge frame analysis from competitor data identifies a geometric sweet spot where Classic and Sculpt centroid proximity maximizes simultaneously. The competitor evidence: + +| Competitor Body | Family | Height | Bust | Waist | Hip | d_classic | d_sculpt | Notes | +|----------------|--------|--------|------|-------|-----|-----------|----------|-------| +| Gynoid GT 160 | Sculpt | 160 | 83 | 57 | 87 | **0.38** | **0.60** | Classic/Sculpt bridge: closest competitor to both | +| YL Doll YL S158D | Sculpt | 158 | 82 | 55 | 90 | 1.42 | **0.42** | Sculpt/Icon bridge | +| MD Doll Cindy 163 | Sculpt | 163 | 83 | 56 | 92 | 1.10 | **0.88** | Near-equidistant Sculpt/Icon bridge | +| FunWest 162 Sculpt | Sculpt | 162 | 80 | 55 | 85 | **1.20** | **0.86** | Classic/Sculpt bridge | + +The Gynoid GT 160 spec (H160, B83, W57, Hip87) is the market's best-proven Classic/Sculpt bridge geometry. It sits 0.38 from the Classic centroid and 0.60 from the Sculpt centroid — closer to both than any other single body in the dataset. + +### The Convergence Frame Spec + +A new frame at approximately **H160, B82–83, W56–57, Hip87–89** would: + +- Fall within like-kind range of both Classic (estimated distance ~0.4–0.6) and Sculpt (estimated distance ~0.6–0.9) +- Fill the most consequential gap in ZELEX's lineup: 0% Classic coverage in all height bands +- Complement ZE T168E (the 168cm Sculpt anchor from Document 03) with a 160cm Sculpt body +- Produce two product lines from one skeleton commission: the same frame, styled and positioned differently for each family + +**Manufacturing reality:** Classic and Sculpt differ primarily in presentation — wardrobe, skin tone selection, photography concept — not in body geometry. A frame at H160, W57 presents as Classic in a fitted dress and Sculpt in activewear. Same SKU, two quiz paths. + +**Cost-efficiency vs. two separate builds:** + +| Path | Frames Required | Estimated Cost | Families Activated | +|------|----------------|----------------|-------------------| +| Classic frame + Sculpt frame (separate) | 2 | $160–300K | Classic, Sculpt (partial) | +| Convergence frame (one) | 1 | $80–150K | Classic + Sculpt (from one body) | +| ZG S155C pilot (zero tooling) + Convergence frame | 1 new | $100–180K total | Classic (155cm + 160cm), Sculpt (160cm) | + +--- + +## Section 4 — The Sculpt/Icon Bridge Zone + +Sculpt and Icon share a geometric overlap that competitor data makes visible. The bridge zone is approximately: + +**H158–163cm, B82–83, W55–56, Hip90–93, WHR 0.58–0.65** + +| Competitor Body | Sculpt dist | Icon dist | Notes | +|----------------|-------------|-----------|-------| +| YL Doll YL S158D | **0.42** | **0.77** | Best Sculpt/Icon bridge in dataset | +| MD Doll Cindy 163 | **0.88** | **0.83** | Near-equidistant, strong both | +| Lusandy 161 | **0.96** | **1.25** | Sculpt primary / Icon secondary | + +ZELEX's existing body ZX163E (d_sculpt=1.32, d_icon=1.41) already sits near this zone — but outside like-kind threshold for Sculpt. A new frame at H160–163, W55–56 would enter the zone and serve both simultaneously. + +### Why this matters for Icon specifically + +Icon is ZELEX's third-most important active family (ROI 3.9 — tied with Muse for highest in the lineup), but its market coverage is weak in the 150–164cm height bands: + +- **150–159cm:** ZELEX 2% share (2 of ~80 market bodies) +- **160–164cm:** ZELEX 6% share (1 of ~17 market bodies) + +A new frame in the Sculpt/Icon bridge zone doesn't just help a dead-end family (Sculpt) — it reinforces ZELEX's highest-ROI active family (Icon) in its weakest height segment. One tooling investment strengthens both. + +--- + +## Section 5 — The Empress Path Through Icon + +Empress carries a 20% dead-end rate (not 100%, but material) and limited depth — currently 1 body. The Empress centroid (H160, B86.5, W54.5, Hip93.4) shares the compressed-waist Zone B profile with Icon. + +ZELEX's two Icon bodies nearest the Empress centroid: + +| ZELEX Body | d_empress | d_icon | Notes | +|------------|-----------|--------|-------| +| **ZX165D** | **1.47** | 1.31 | Like-kind Empress (just inside threshold) | +| **ZE S172E** | **1.57** | 1.66 | Adaptable for Empress at tall end | +| **ZX163E** | **1.27** | 1.41 | Closest ZELEX body to Empress centroid | + +ZX163E is already closer to the Empress centroid (1.27) than to its own classified family (Icon, 1.41). This suggests ZX163E could be styled and positioned as an Empress-adjacent entry with minimal modification — the frame already reflects the right waist compression and hip-to-waist ratio. + +**The Empress activation path:** +Rather than commissioning a dedicated Empress frame, ZX163E (and potentially ZX165D) can be re-positioned as Empress catalog entries. The body geometry supports it; the investment is presentation (wardrobe, copy, quiz routing) not tooling. + +--- + +## Section 6 — Market Coverage Cascade + +Current state: ZELEX has **0% share in Classic** across all height bands, and **0–5% in Sculpt** in the 150–164cm bands where most market demand exists. + +### Investment A: ZG S155C → Classic pilot (zero tooling, $20–40K) + +| Effect | Before | After | +|--------|--------|-------| +| Classic coverage 150–159cm | 0 / ~8 market bodies | 1 / ~8 = 12% | +| Classic dead-end rate | 100% | 0% | +| Sculpt-adjacent coverage 150–159cm | 0 | +1 crossover (same body, Sculpt styling) | + +### Investment B: Convergence Frame H160, B82, W57, Hip88 (~$80–150K, 90–120 days) + +| Effect | Before | After | +|--------|--------|-------| +| Classic coverage 160–164cm | 0 / ~10 market bodies | 1 / ~10 = 10% | +| Sculpt coverage 160–164cm | 0 / 17 market bodies | 1 / 17 = 6% | +| Sculpt coverage 165–169cm (ZE T168E already active) | 1 / ~20 | unchanged | +| Combined dead-end family count | 2 (Classic, Sculpt) | 0 | + +### Investment C: Icon/Sculpt Bridge H161, B83, W55, Hip91 (~$100–150K, 90–120 days) + +| Effect | Before | After | +|--------|--------|-------| +| Sculpt coverage 160–164cm | 1 (from Investment B) | 2 | +| Icon coverage 160–164cm | 1 (ZX163E) | 2 | +| Empress (via ZX163E re-routing) | 1 body | +1 via styling | +| Combined Icon+Sculpt dead-end rate | Sculpt 0% (from A+B), Icon healthy | Reinforced | + +### Combined Cascade Summary + +Three investments (two zero-tooling, one convergence frame, one bridge frame) transform ZELEX from: + +- **Before:** Classic 0%, Sculpt 0–5%, Empress thin, Icon weak in short bands +- **After:** Classic seeded in two height bands, Sculpt seeded in three height bands, Empress reinforced via ZX163E re-routing, Icon strengthened in 160–164cm + +Total estimated investment: **$200–350K across 6–9 months** to activate both dead-end families, expand three others, and generate catalog depth in ZELEX's highest-gap height bands. + +--- + +## Section 7 — Recommended Frame Commission Sequence + +| Priority | Frame Spec | Families Served | Timeline | Est. Cost | Yield | +|----------|------------|----------------|----------|-----------|-------| +| **0 — Zero tooling** | ZG S155C pilot (Classic routing) | Classic, Sculpt-adjacent | 4–6 weeks | $20–40K | Classic dead-end → 0% | +| **0 — Zero tooling** | ZX163E re-routing (Empress styling) | Empress, Icon, Classic, Sculpt | 4–8 weeks | $15–30K | Empress depth +1, 4-family visibility | +| **1 — Convergence Frame** | H160, B82, W57, Hip88 | Classic + Sculpt | 90–120 days | $80–150K | Both families seeded at 160cm | +| **2 — Bridge Frame** | H161, B83, W55, Hip91 | Sculpt + Icon (+ Empress adjacent) | 90–120 days | $100–150K | Icon strengthened, Sculpt depth, Empress path | + +**Total investment window:** $215–370K across two tooling commissions and two zero-tooling routing changes. +**Combined dead-end elimination:** Both Classic and Sculpt drop to 0% dead-end within 6 months, with Icon and Empress reinforced as byproducts. + +--- + +## Section 8 — What This Is Not + +Two important scope limits: + +**Siren is excluded from this sequence.** Siren's centroid (H155.5, W49.7, BWR 1.756) sits in Zone B extremes — the geometry required (extreme waist compression, very high bust-to-waist ratio) has no near-neighbor in ZELEX's current lineup. Siren requires a purpose-built frame commission, not a bridge frame. It's outside the like-kind manufacturing window. + +**Muse is not a gap.** ZELEX's Muse family already has 18 bodies with 4–24% market share across all height bands. Investment in Muse framing would be incremental, not gap-filling. The capital case doesn't compete with Classic/Sculpt zero-to-one. + +--- + +## Strategic Summary + +The like-kind manufacturing opportunity is larger than two dead-end families. The data shows: + +1. **ZG S155C and ZX163E are underpublished multi-family assets** — they already qualify for Classic, Sculpt, and Empress routing without new tooling. The cost is catalog work, not factory work. + +2. **A single convergence frame at H160, W57** activates both Classic and Sculpt dead-ends with one commission — the market precedent (Gynoid GT 160) proves the geometry exists and is commercially validated. + +3. **A second frame in the Sculpt/Icon bridge zone** reinforces ZELEX's highest-ROI active family (Icon) in its weakest height bands while simultaneously building Sculpt catalog depth — cross-family ROI from one tooling investment. + +4. **The cascade is non-linear.** Two new frame commissions don't just fix two dead-end families — they reinforce Icon, enable Empress re-routing, and create Sculpt depth across three height bands. The interdependency multiplies the return on each tooling dollar. + +--- + +*All measurements and distance scores from 30-brand competitor dataset (495 body-style rows, classified June 2026). Dimensional distance uses normalized Euclidean distance to family centroid. Not ZELEX actuals — analyst estimates.* From 9fbd6b06e51cdcde78120ad30aee37cfa7509ad4 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 13:25:16 -0400 Subject: [PATCH 14/57] docs(pdr-010): add manufacturing intelligence matrix brief for CEO package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces the Build-to-Stage framework: Family × Component Layer × Demand Confidence Tier matrix showing how market intelligence (family centroids, dimensional distance scores, market gap coverage) feeds directly into pre-staged work orders. Distinguishes what current data enables vs. what requires customer/order data, and identifies Tier 1 pre-stage actions (ZE T168E for Sculpt, ZG S155C for Classic) that can start immediately. Co-Authored-By: Claude Sonnet 4.6 --- .../05-manufacturing-intelligence-matrix.md | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 docs/howie-ceo-package/05-manufacturing-intelligence-matrix.md diff --git a/docs/howie-ceo-package/05-manufacturing-intelligence-matrix.md b/docs/howie-ceo-package/05-manufacturing-intelligence-matrix.md new file mode 100644 index 0000000..f9c2f05 --- /dev/null +++ b/docs/howie-ceo-package/05-manufacturing-intelligence-matrix.md @@ -0,0 +1,196 @@ +# Manufacturing Intelligence Matrix +## A Pull-Based Production Framework for ZELEX's 6-Family Lineup + +**Date:** 2026-06-06 +**Prepared for:** Howie, CEO +**Status:** Strategic framework — analyst estimates, not ZELEX actuals +**Branch:** feat/pdr-010-ceo-roi-analysis + +--- + +## The Problem with Make-to-Order + +ZELEX's current production model is almost entirely make-to-order: a customer places an order, a work order is generated, and the factory starts cold. This produces 8–12 week lead times, uneven factory utilization, and no structural advantage for ZELEX's most predictable demand — the SKUs that account for the majority of quiz completions and repeat buyer segments. + +The conventional fix is to pre-build finished inventory, but that creates a different problem: incorrect SKUs, skin tone mismatches, head combinations that don't move, and capital locked in unsold stock. + +The third path — the one this brief describes — is **Build-to-Stage**: pre-position the right sub-assemblies based on demand signals, not finished products based on guesses. The factory is never starting cold; it's completing the last steps of a body that's already 40–60% built. + +This only works if the signal layer is precise enough to know *which* sub-assemblies to stage. That precision comes from market intelligence — and ZELEX already has most of it. + +--- + +## The Foundation: What the Data Already Tells Us + +The competitor analysis database (30 brands, 495 body-style rows, classified June 2026) produces three outputs that function as manufacturing inputs, not just market research: + +### 1. Family Centroids → Frame Specification Targets + +Each family centroid (height, bust, waist, hip averages across all competitor bodies in that family) defines the geometry of a frame that would serve that family's market. These are not aspirational — they are derived from what the market has already validated commercially. + +| Family | Target Frame Spec | Market Validation | +|--------|------------------|-------------------| +| Classic | H161, B83, W58, Hip87 | 27 competitor bodies, $1,299–$5,391 range | +| Sculpt | H158, B82, W56, Hip89 | 97 competitor bodies, category leader MD Doll 163 | +| Icon | H157, B83, W55, Hip94 | 108 competitor bodies, largest single family by count | +| Empress | H160, B87, W55, Hip93 | 46 competitor bodies, premium tier concentration | +| Muse | H160, B79, W60, Hip92 | 172 competitor bodies, ZELEX's home territory | +| Siren | H156, B88, W50, Hip87 | 45 competitor bodies, extreme BWR segment | + +These specs are not estimates of what might work — they are the market's revealed preference. A frame built to these specs is entering a proven geometry. + +### 2. Dimensional Distance Scores → Which Existing Inventory Is Transferable + +The distance score for each ZELEX body against each family centroid tells the factory which existing skeleton frames can serve multiple families with minor or zero modification. This eliminates the need to commission a new mold for every family activation. + +Key transferable frames (distance < 1.5 = like-kind, usable now): + +| ZELEX Frame | Classic | Sculpt | Muse | Icon | Empress | Status | +|-------------|---------|--------|------|------|---------|--------| +| ZG S155C | **0.90** | **1.16** | 1.04 | — | — | Pre-stage for Classic/Sculpt 155cm | +| ZE T168E | **1.00** | **1.05** | — | — | — | Pre-stage for Sculpt/Classic 168cm | +| ZX163E | **1.15** | **1.32** | 1.38 | 1.41 | **1.27** | Cross-route for 4 families at 163cm | + +This is the factory equivalent of shared tooling: one production line, multiple output families. + +### 3. Market Coverage Gaps by Height Band → Demand Probability Weights + +ZELEX's market share vs. the full competitor field, broken out by height band, gives a prior probability for where unmet demand is concentrated: + +| Height Band | Classic | Sculpt | Icon | Empress | Muse | Siren | +|-------------|---------|--------|------|---------|------|-------| +| 150–159cm | **0%** | **0%** | 2% | **0%** | 4% | **0%** | +| 160–164cm | **0%** | **0%** | 6% | 5% | 12% | — | +| 165–169cm | **0%** | 5% | 20% | — | 18% | — | +| 170cm+ | **0%** | — | 33% | — | 24% | — | + +Gaps = demand that is going to competitors. Gaps in a band where ZELEX *does* have frames suggest a routing or catalog problem. Gaps in bands where ZELEX has *no* frames are hard manufacturing gaps — the factory has nothing to stage. + +--- + +## The Matrix Architecture + +The Manufacturing Intelligence Matrix maps three dimensions: + +``` +Family (6) × Component Layer (4) × Demand Confidence Tier (3) +``` + +### Dimension 1 — The 6 Families (demand categories) + +Each family represents a distinct buyer archetype. Quiz completions, cart adds, and order history are family-level signals — a Sculpt buyer doesn't convert to Muse inventory. + +### Dimension 2 — The 4 Component Layers (production stages) + +Every doll moves through four discrete production stages. Build-to-Stage works by advancing inventory as far through these stages as the demand signal justifies: + +| Layer | Component | Family Specificity | Pre-Stage Cost | Notes | +|-------|-----------|-------------------|----------------|-------| +| **L1 — Skeleton Frame** | Internal armature, joint assembly | Family-specific (geometry locked here) | Low — frames are compact, long shelf life | First and most critical pre-stage point | +| **L2 — TPE Pour Shell** | Body silicone/TPE cast over frame | Frame-specific (height/weight class) | Medium — poured and cured, shape locked | Can queue before customer skin tone choice | +| **L3 — Skin Tone Finish** | Pigmentation pass, surface texture | Customer-configurable | High — skin tone is a personalization variable | Stage only after order confirmation | +| **L4 — Head + Assembly** | Head attachment, eye install, quality check | Customer-configurable (head choice) | Highest — customer selection | Never pre-stage: personalization completes here | + +**The pre-stage decision:** L1 and L2 can be queued before an order exists if demand confidence is high. L3 and L4 should only proceed post-order. This collapses lead time from 8–12 weeks (starting from L1) to 2–3 weeks (completing from L3 or L4 only). + +### Dimension 3 — The 3 Demand Confidence Tiers + +| Tier | Signal Basis | Pre-Stage Depth | Current Data Source | +|------|-------------|----------------|-------------------| +| **Tier 1 — High Confidence** | Historical order velocity for this family+height band, quiz completion rate | Pre-stage L1 + L2 (frame + pour ready) | Market gap analysis + quiz routing data | +| **Tier 2 — Medium Confidence** | Quiz completions trending, wishlist/cart adds, seasonal patterns | Pre-stage L1 only (frame queued, pour on order trigger) | Quiz analytics, cart data | +| **Tier 3 — Low Confidence** | New family launch, untested SKU, low historical velocity | Make-to-order from L1 (no pre-stage, but frame spec is known) | Market centroid estimate only | + +--- + +## The Work Order Flow + +With the matrix in place, a demand signal generates a structured work order rather than an unstructured factory request. The flow: + +``` +Demand Signal + │ + ├─ Signal type: quiz completion → map to family + height band + ├─ Signal type: cart add → map to specific SKU + ├─ Signal type: confirmed order → trigger L3 + L4 queue + │ + ▼ +Matrix lookup: [Family] × [Height Band] → Confidence Tier + │ + ├─ Tier 1 → Release L1 + L2 work order to factory queue + ├─ Tier 2 → Release L1 work order; flag L2 for trigger + └─ Tier 3 → Record signal; accumulate toward Tier 2 threshold + │ + ▼ +Factory receives: Component spec (frame geometry from centroid), + Quantity, Target completion window, + Skin tone / head deferred (awaits customer order) + │ + ▼ +Customer Order Arrives + │ + ├─ L1/L2 already staged → Release L3 work order (skin tone) + ├─ Head selected → Release L4 assembly + └─ Ship in 2–3 weeks instead of 8–12 +``` + +--- + +## What the Current Data Enables vs. What It Doesn't + +The market intelligence database is sufficient to populate the matrix's structural layer. Here is an honest accounting of what it covers and where gaps remain: + +### Enabled now by market data: + +- **Frame specification targets** for all 6 families (from family centroids) +- **Like-kind routing decisions** — which existing ZELEX frames serve multiple families (from dimensional distance scores) +- **Height-band demand weights** — where market gaps indicate highest unmet demand +- **Bridge frame geometry** — which single new frame investment serves multiple family dead-ends +- **Component layer architecture** — the L1–L4 model applies regardless of demand data + +### Requires customer/order data to sharpen: + +- **Tier assignment per SKU** — current assignment is market-estimate-based. Actual order history by family+height band would replace estimates with measured velocity +- **Quiz completion → purchase conversion rate** — needed to weight quiz signals correctly (a family with high quiz completions but low conversion produces false Tier 1 signals) +- **Seasonal demand curves** — which families over-index by season (Muse in summer vs. Empress in winter, hypothetically) +- **Head-body co-selection patterns** — which heads are ordered with which bodies at high frequency enables L4 pre-positioning at scale + +### The data maturity path: + +| Phase | Data Available | Matrix Precision | +|-------|---------------|-----------------| +| **Now** | Competitor market intelligence + quiz routing estimates | Tier assignments estimated; frame specs accurate; bridge routing validated | +| **3–6 months post-launch** | ZELEX order history by family, quiz completion data | Tier assignments measured; conversion rates known | +| **12+ months** | Seasonal curves, head-body co-selection, repeat buyer patterns | Full matrix calibration; predictive work order generation | + +The matrix is functional at Phase 1 with analyst estimates. It becomes predictive at Phase 2 when ZELEX's own sales data replaces competitor proxies. + +--- + +## Priority Pre-Stage Actions (Phase 1, Now) + +Based on current market data and dimensional distance analysis, three immediate pre-stage targets have the highest demand confidence: + +| Family | Height | Frame | Tier | Basis | Action | +|--------|--------|-------|------|-------|--------| +| Sculpt | 165–169cm | ZE T168E (existing) | **Tier 1** | ZE T168E is already in catalog; zero new tooling; Sculpt centroid distance 1.05 | Stage L1+L2 inventory now; route quiz | +| Classic | 150–159cm | ZG S155C (existing) | **Tier 1** | WHR 0.66, waist 59cm on-target; Classic centroid distance 0.90; zero tooling | Stage L1+L2; route as Classic pilot | +| Classic+Sculpt | 158–162cm | Convergence Frame (new) | **Tier 2** | Market gap confirmed in both families at this height band; bridge geometry validated by Gynoid GT 160 comp | Commission frame; pre-stage L1 on delivery | + +The two Tier 1 actions require no factory work — the frames exist. The pre-stage investment is in finished body inventory at L2, sized to expected quarterly demand. + +--- + +## What This Unlocks at Scale + +A fully calibrated Manufacturing Intelligence Matrix changes ZELEX's competitive position in a specific way: **lead time becomes a product feature.** + +The current 8–12 week industry standard is structural — most competitors are in the same make-to-order position. A ZELEX that ships Tier 1 SKUs in 2–3 weeks captures buyers who decide at the point of comparison, not after waiting 10 weeks to see how the competitor's product actually arrives. + +The data infrastructure to build this is already partially in place. The family centroids are calculated. The distance scores are computed. The market gap coverage map exists. The next layer — order velocity and quiz conversion — turns on when the product catalog is active and customers start generating signal. + +The matrix is not a future-state aspiration. It is the next-level use of the intelligence already built. + +--- + +*Market centroids and dimensional distances from 30-brand competitor dataset (495 body-style rows, classified June 2026). Lead time estimates are analyst assumptions based on industry benchmarks. Not ZELEX actuals.* From 6de707a10d541d0f00a7c7e0f4de066ed397c0a8 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 13:29:10 -0400 Subject: [PATCH 15/57] docs(pdr-010): add full PDR with Mermaid path analysis across all epic phases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Covers 5 decision points — family activation paths, tooling investment options, manufacturing model (MTO vs. Build-to-Stage), data signal maturity, and family expansion sequence — each with Mermaid flowcharts showing pros/cons per path. Includes investment summary across Immediate / Q3 / Q3-Q4 / 2027 horizons and a single-table decision summary for Howie. Co-Authored-By: Claude Sonnet 4.6 --- docs/howie-ceo-package/PDR-010.md | 245 ++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 docs/howie-ceo-package/PDR-010.md diff --git a/docs/howie-ceo-package/PDR-010.md b/docs/howie-ceo-package/PDR-010.md new file mode 100644 index 0000000..313aae7 --- /dev/null +++ b/docs/howie-ceo-package/PDR-010.md @@ -0,0 +1,245 @@ +# PDR-010 — ZELEX Family Activation & Manufacturing Intelligence +## Product Decision Record: All Phases + +**Date:** 2026-06-06 +**Prepared for:** Howie, CEO +**Status:** Analyst estimates — not measured ZELEX actuals +**Branch:** feat/pdr-010-ceo-roi-analysis + +--- + +## What This PDR Covers + +This record documents every material decision in the ZELEX family activation initiative — from the market intelligence work already completed, through the dead-end elimination actions required now, through the manufacturing intelligence layer that compounds the value of those investments over time. Each decision point presents the available paths with their trade-offs. + +This is not a roadmap of things to do. It is a map of choices, with the costs and consequences of each path made visible so the right sequence can be selected deliberately. + +--- + +## Epic Overview + +```mermaid +timeline + title PDR-010 — Phase Map + section Phase 0 · Complete + Market Intelligence Foundation : 30-brand competitor dataset + : 495 body-style rows classified + : Family centroids computed + : Dimensional distance matrix built + section Phase 1 · In Progress + Dead-End Elimination : Classic 100% dead-end → 0% + : Sculpt 100% dead-end → 0% + : Zero-tooling activations (4–8 weeks) + section Phase 2 · Planned + Tooling Investments : Convergence frame commission + : Sculpt/Icon bridge frame + : Catalog depth across 3 height bands + section Phase 3 · Planned + Manufacturing Intelligence : Build-to-Stage matrix live + : Demand signal integration + : Quiz → work order pipeline + section Phase 4 · Future + Predictive Production : Order velocity → automated staging + : Head/body co-selection pre-positioning + : Lead time advantage as product feature +``` + +--- + +## Decision Point 1 — How to Eliminate Classic & Sculpt Dead-Ends + +Both families are at 100% dead-end rate. Three activation paths exist. This is the most urgent decision in the package. + +```mermaid +flowchart TD + PROBLEM["Classic & Sculpt\n100% Dead-End Rate\nEvery quiz completion → wall"] + + PROBLEM --> PA["Path A\nZero Tooling\nRoute existing bodies"] + PROBLEM --> PB["Path B\nConvergence Frame\nOne new commission, two families"] + PROBLEM --> PC["Path C\nSeparate Frames\nDedicated commission per family"] + + PA --> PA_PROS["PROS\n✓ $20–40K total investment\n✓ 4–8 weeks to live\n✓ No factory dependency\n✓ ZG S155C Classic: waist already on-target\n✓ ZE T168E Sculpt: dist 0.96 to centroid"] + PA --> PA_CONS["CONS\n✗ Single body per family — thin catalog\n✗ 155cm only for Classic (height gap)\n✗ 168cm only for Sculpt (no short option)"] + PA --> PA_VERDICT["VERDICT\nDo this now regardless.\nDoes not preclude Path B."] + + PB --> PB_PROS["PROS\n✓ $80–150K for both families\n✓ One commission activates Classic + Sculpt at 160cm\n✓ Market-validated geometry (Gynoid GT 160 precedent)\n✓ Convergence frame d_classic ~0.4, d_sculpt ~0.6"] + PB --> PB_CONS["CONS\n✗ 90–120 day factory lead time\n✗ Single factory dependency\n✗ Medium tooling risk if spec drifts"] + PB --> PB_VERDICT["VERDICT\nBest capital efficiency.\nCommission in Q3 after Path A validates demand."] + + PC --> PC_PROS["PROS\n✓ Optimal spec for each family independently\n✓ Full height band coverage per family\n✓ No geometry compromise"] + PC --> PC_CONS["CONS\n✗ $160–300K — double the convergence path cost\n✗ 6–9 months for both frames\n✗ Double factory dependency\n✗ No yield advantage over Path B\n if families share geometric zone"] + PC --> PC_VERDICT["VERDICT\nAvoid unless Path B frame\nunderperforms for one family.\nTreat as fallback, not first option."] +``` + +--- + +## Decision Point 2 — Which Tooling Investments to Make and When + +Assuming Path A (zero tooling) is executed immediately, this decision governs the Q3 capital allocation: which frame commissions generate the most cross-family yield. + +```mermaid +flowchart LR + subgraph OPTION_1["Option 1 — Convergence Frame (H160, B82, W57, Hip88)"] + CF_INVEST["Investment: $80–150K\nTimeline: 90–120 days"] + CF_UNLOCK["Unlocks:\nClassic at 160cm\nSculpt at 160cm\nBridge zone for Empress-adjacent"] + CF_RISK["Risk: Medium\nSingle factory, spec alignment needed"] + end + + subgraph OPTION_2["Option 2 — Sculpt/Icon Bridge (H161, B83, W55, Hip91)"] + SIB_INVEST["Investment: $100–150K\nTimeline: 90–120 days"] + SIB_UNLOCK["Unlocks:\nSculpt depth at 161cm\nIcon reinforcement at 160–164cm\nEmpress-adjacent via ZX163E routing"] + SIB_RISK["Risk: Medium\nStrengthens existing active family (Icon)"] + end + + subgraph OPTION_3["Option 3 — Both Frames in Parallel"] + BOTH_INVEST["Investment: $180–300K\nTimeline: 90–120 days (parallel)"] + BOTH_UNLOCK["Unlocks:\nAll of Option 1 + Option 2\nClassic + Sculpt fully seeded\nIcon + Empress reinforced\n3 height bands covered"] + BOTH_RISK["Risk: Higher capital, parallel factory work"] + end + + OPTION_1 --> VERDICT_1["Best ROI if capital is constrained\nActivates both dead-end families\nfrom one commission"] + OPTION_2 --> VERDICT_2["Best ROI if Icon growth is priority\nStrengthens highest-ROI active family\nalongside dead-end Sculpt"] + OPTION_3 --> VERDICT_3["Best ROI if timeline is priority\nBoth frames complete together\nFull catalog depth in one factory cycle"] +``` + +--- + +## Decision Point 3 — Manufacturing Model for Production + +This governs how the factory stages inventory. Three models exist. The choice determines lead time, inventory risk, and competitive positioning. + +```mermaid +flowchart TD + subgraph MTO["Model A — Make-to-Order (Status Quo)"] + MTO_HOW["How it works:\nOrder arrives → work order generated\n→ Factory starts from skeleton\n→ 8–12 weeks to ship"] + MTO_PROS["PROS\n✓ Zero inventory risk\n✓ No capital committed pre-order\n✓ Full personalization (all variables open)"] + MTO_CONS["CONS\n✗ 8–12 week lead time is\n industry standard — no differentiation\n✗ Factory utilization uneven\n✗ Customer experience: long wait"] + end + + subgraph BTS["Model B — Build-to-Stage (Proposed)"] + BTS_HOW["How it works:\nDemand signal (quiz/cart)\n→ Pre-stage L1 skeleton + L2 pour\n→ Order arrives → L3 skin + L4 head only\n→ 2–3 weeks to ship"] + BTS_PROS["PROS\n✓ 2–3 week lead time vs. 8–12 week industry\n✓ Lead time becomes product differentiator\n✓ Moderate inventory risk (L1+L2 only)\n✓ Personalization preserved at L3+L4\n✓ Data-driven: demand signals drive queue"] + BTS_CONS["CONS\n✗ Requires demand signal infrastructure\n✗ Some L1+L2 inventory may not convert\n✗ Needs quiz + cart data integration\n (Phase 1: market estimates as proxy)"] + end + + subgraph PRE["Model C — Pre-Built Finished Inventory"] + PRE_HOW["How it works:\nBuild finished dolls to forecast\n→ Ship in 1–2 weeks from stock"] + PRE_PROS["PROS\n✓ Fastest possible ship time\n✓ Simple operations"] + PRE_CONS["CONS\n✗ Skin tone + head locked in before order\n✗ High returns risk on mismatched personalization\n✗ Heavy capital in finished goods\n✗ Wrong SKU mix = unsellable stock\n✗ NOT viable for configurable products"] + end + + MTO --> RECOMMEND_B["Model B is the target state.\nModel A is the starting state.\nModel C is not viable for configurable products."] + BTS --> RECOMMEND_B + PRE --> RECOMMEND_B +``` + +--- + +## Decision Point 4 — Data Signal Maturity Path + +The Manufacturing Intelligence Matrix depends on demand signals to assign Tier 1/2/3 confidence. This decision governs what data is used at each phase and what is deferred. + +```mermaid +flowchart LR + subgraph PHASE_NOW["Phase 1 — Market Intelligence Only (Now)"] + D1_INPUT["Inputs:\nCompetitor data (30 brands)\nFamily centroid distances\nMarket gap coverage %"] + D1_OUTPUT["Outputs:\nTier assignment by\nfamily + height band\n(estimate, not measured)"] + D1_LIMIT["Limitation:\nProxy for ZELEX demand —\nnot ZELEX order history"] + end + + subgraph PHASE_LAUNCH["Phase 2 — Post-Launch Signals (3–6 months)"] + D2_INPUT["Inputs:\nQuiz completions by family\nCart adds / wishlists\nFirst order velocity data"] + D2_OUTPUT["Outputs:\nTier assignments calibrated\nto actual ZELEX conversion\nSeasonal pattern emerging"] + D2_LIMIT["Limitation:\nSmall sample — first 6 months\nmay not be representative"] + end + + subgraph PHASE_MATURE["Phase 3 — Mature Signals (12+ months)"] + D3_INPUT["Inputs:\nFull order history\nHead-body co-selection patterns\nRepeat buyer behavior\nSeasonal demand curves"] + D3_OUTPUT["Outputs:\nPredictive work orders\nAutomatic L1+L2 staging\nHead pre-positioning on\nhigh-confidence co-selection"] + D3_LIMIT["Limitation:\nRequires data infrastructure\nand system integration"] + end + + PHASE_NOW -->|"Estimates replaced\nby measured signals"| PHASE_LAUNCH + PHASE_LAUNCH -->|"Pattern recognition\nover full year"| PHASE_MATURE + + PHASE_NOW --> NOW_ACTION["Action now:\nUse market centroids + gap\ncoverage to assign Tier 1\nfor Classic, Sculpt at\nknown high-gap bands"] + PHASE_MATURE --> FUTURE_STATE["Future state:\nFactory queue self-populates\nbased on rolling 90-day\norder velocity. Lead time\ndrop is permanent and compounding."] +``` + +--- + +## Decision Point 5 — Family Expansion Sequence + +Which families to prioritize for catalog expansion beyond Classic and Sculpt. + +```mermaid +flowchart TD + START["After Classic + Sculpt\ndead-ends eliminated"] + + START --> ZONE_A["Zone A Expansion\nClassic / Sculpt depth\n(additional height bands)"] + START --> ZONE_B["Zone B Expansion\nIcon / Empress reinforcement\n(short height bands)"] + START --> SIREN["Siren Activation\n(independent track)"] + + ZONE_A --> ZA_PROS["PROS\n✓ Same manufacturing zone as Muse\n (shared factory line potential)\n✓ Convergence + bridge frames\n already commission-ready\n✓ ROI 3.1–3.7 range"] + ZONE_A --> ZA_CONS["CONS\n✗ Muse already dominant —\n incremental share vs.\n competitor switching"] + + ZONE_B --> ZB_PROS["PROS\n✓ Icon ROI 3.9 — highest in lineup\n✓ Bridge frames serve Icon + Sculpt\n simultaneously (no extra cost)\n✓ ZX163E already bridges\n Empress without new tooling"] + ZONE_B --> ZB_CONS["CONS\n✗ Waist compression geometry\n requires distinct skeleton spec\n✗ Empress has lowest ROI (2.1)\n in Zone B — prioritize Icon first"] + + SIREN --> SR_PROS["PROS\n✓ 45 competitor bodies, $1,899–$5,999 range\n✓ Uncontested in ZELEX lineup\n✓ Extreme BWR (1.76) is a differentiator"] + SIREN --> SR_CONS["CONS\n✗ No like-kind path from\n any ZELEX existing body\n✗ New mold required — longest\n lead time, highest cost\n✗ Smallest family confidence\n (WHR 0.58, W49.7 centroid\n far from any current frame)"] + + ZA_PROS --> SEQ["Recommended sequence:\n1. Zone A depth (Q3) via\n convergence + bridge frames\n2. Zone B Icon (Q3) via\n bridge frame dual-use\n3. Zone B Empress (Q4) via\n ZX163E routing\n4. Siren (2027) — dedicated\n commission, separate track"] + ZB_PROS --> SEQ + SR_CONS --> SEQ +``` + +--- + +## Investment Summary Across All Paths + +```mermaid +flowchart LR + subgraph NOW["Immediate (0–8 weeks)"] + I1["ZG S155C → Classic pilot\n$20–40K · Zero tooling"] + I2["ZE T168E → Sculpt anchor\n$15–30K · Zero tooling"] + I3["ZX163E → Empress re-route\n$15–30K · Catalog work only"] + end + + subgraph Q3["Q3 (90–120 days)"] + I4["Convergence Frame\nH160, B82, W57, Hip88\n$80–150K · Classic+Sculpt at 160cm"] + I5["Sculpt/Icon Bridge Frame\nH161, B83, W55, Hip91\n$100–150K · Sculpt depth + Icon 160cm"] + end + + subgraph Q3Q4["Q3–Q4 (ongoing)"] + I6["Build-to-Stage infrastructure\nQuiz → demand signal → work order\n$TBD · Ops + data integration"] + I7["FunWest OEM (optional)\nSculpt catalog depth via white-label\nMargin TBD"] + end + + subgraph Y2["2027"] + I8["Siren frame commission\nDedicated new mold\n$200–400K · Purpose-built"] + end + + NOW --> TOTAL_NOW["Dead-end rate: 100% → 0%\nTimeline: 4–8 weeks\nTotal: $50–100K"] + Q3 --> TOTAL_Q3["Catalog depth in 3 height bands\nIcon reinforced\nTotal: $180–300K"] + Q3Q4 --> TOTAL_Q3Q4["Lead time: 8–12 wks → 2–3 wks\nFactory utilization smoothed"] + Y2 --> TOTAL_Y2["Sixth family activated\nPremium segment entry"] +``` + +--- + +## Decision Summary for Howie + +| Decision | Recommended Path | Why | When | +|----------|-----------------|-----|------| +| Classic dead-end | ZG S155C pilot (zero tooling) | Waist already on-target; body exists | This week | +| Sculpt dead-end | ZE T168E routing (zero tooling) | Distance 0.96 to centroid; body exists | This week | +| Empress depth | ZX163E re-routing (zero tooling) | Distance 1.27 to Empress centroid; no new cost | 4–8 weeks | +| Capital tooling | Convergence Frame (H160, W57) | One commission, two families, market-validated geometry | Q3 | +| Icon reinforcement | Sculpt/Icon bridge frame | Dual-yield: strengthens highest-ROI active family + Sculpt | Q3 | +| Manufacturing model | Build-to-Stage (L1+L2 pre-stage) | Lead time advantage is a product feature, not an ops choice | Phase 3 | +| Siren | Defer to 2027 | No like-kind path; purpose-built commission; lowest urgency | 2027 | + +--- + +*All measurements from 30-brand competitor dataset (495 body-style rows, classified June 2026). Investment ranges are analyst estimates. Not ZELEX actuals.* From a1657f993f5bb7d935a939b3ae94da5382151414 Mon Sep 17 00:00:00 2001 From: TwistKS Date: Sat, 6 Jun 2026 13:40:09 -0400 Subject: [PATCH 16/57] feat(pdr-010): embed Mermaid decision charts into CEO dashboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds interactive PDR-010 decision path section to howie-ceo-dashboard.html: - Mermaid v10.9.0 CDN + dark-theme initialization - Phase Map (full-width): P0 done → P1 active → P2-P4 planned/future - DP-1: Classic/Sculpt activation paths (A/B/C with verdicts) - DP-2: Q3 tooling investment options (Convergence/Bridge/Both) - DP-3: Make-to-Order → Build-to-Stage transition - DP-4: Family expansion sequence (Zone A/B, Empress, Siren) Co-Authored-By: Claude Sonnet 4.6 --- .../howie-ceo-dashboard.html | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/docs/howie-ceo-package/howie-ceo-dashboard.html b/docs/howie-ceo-package/howie-ceo-dashboard.html index ce81b96..9cf3636 100644 --- a/docs/howie-ceo-package/howie-ceo-dashboard.html +++ b/docs/howie-ceo-package/howie-ceo-dashboard.html @@ -283,6 +283,45 @@ } .brief-link:hover { color:var(--cyan); } + /* ── PDR DECISION CHARTS ── */ + .pdr-charts-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 14px; + margin-bottom: 28px; + } + .pdr-chart-full { grid-column: 1 / -1; } + .pdr-chart-card { + background: var(--bg1); + border: 1px solid var(--bg4); + border-radius: var(--radius); + overflow: hidden; + } + .pdr-chart-header { + padding: 12px 16px; + border-bottom: 1px solid var(--bg4); + display: flex; + align-items: flex-start; + gap: 10px; + } + .pdr-dp-badge { + font-family: 'JetBrains Mono', monospace; + font-size: 9px; font-weight: 600; + letter-spacing: 0.8px; text-transform: uppercase; + padding: 2px 8px; border-radius: 3px; + background: var(--purple-dim); + border: 1px solid rgba(124,92,252,0.30); + color: var(--purple); + white-space: nowrap; flex-shrink: 0; + margin-top: 1px; + } + .pdr-chart-info { flex: 1; } + .pdr-chart-title { font-size: 13px; font-weight: 600; line-height: 1.2; margin-bottom: 2px; } + .pdr-chart-desc { font-size: 11px; color: var(--text-muted); line-height: 1.4; } + .pdr-chart-body { padding: 16px; overflow-x: auto; } + .pdr-chart-body .mermaid { display: flex; justify-content: center; } + .pdr-chart-body .mermaid svg { max-width: 100% !important; background: transparent !important; } + /* ── FOOTER ── */ footer { margin-top:40px; padding:20px 32px; @@ -291,6 +330,33 @@ font-family:'JetBrains Mono',monospace; line-height:1.7; } + + @@ -370,6 +436,146 @@

ZELEX CEO Dashboard

+
+ Decision Paths · PDR-010 +
+
+ +
+ +
+
+
Phase Map
+
+
Epic Phase Sequence — PDR-010
+
Five-phase journey: market intelligence foundation (done) through dead-end elimination, tooling investments, manufacturing intelligence, to predictive production.
+
+
+
+
+flowchart LR
+    P0["Phase 0 · Done\nMarket Intel\n30 brands · 495 bodies"]:::done
+    P1["Phase 1 · Active\nDead-End\nElimination"]:::active
+    P2["Phase 2 · Planned\nTooling\nInvestments"]:::planned
+    P3["Phase 3 · Planned\nMfg Intelligence"]:::planned
+    P4["Phase 4 · Future\nPredictive\nProduction"]:::future
+    P0 --> P1 --> P2 --> P3 --> P4
+    classDef done fill:#10d98a22,stroke:#10d98a,color:#10d98a
+    classDef active fill:#f59e0b22,stroke:#f59e0b,color:#f59e0b
+    classDef planned fill:#7c5cfc22,stroke:#7c5cfc,color:#c4b5fd
+    classDef future fill:#6b749422,stroke:#6b7494,color:#9195aa
+
+
+
+ +
+
+
DP-1
+
+
Classic + Sculpt Activation Paths
+
Three paths to eliminate 100% dead-end rate. Path A is immediate action; Path B is the Q3 follow-on; Path C should be avoided.
+
+
+
+
+flowchart TD
+    START["Classic + Sculpt\n100% Dead-End Rate"]
+    PA["Path A · Zero Tooling\n$20-40K · 4-8 wks"]:::good
+    PB["Path B · Convergence Frame\n$80-150K · 90-120d"]:::good
+    PC["Path C · Separate Frames\n$160-300K · 6-9 mo"]:::bad
+    VA["Do now.\nDoes not preclude B."]:::verdict
+    VB["Best capital efficiency.\nCommission Q3."]:::verdict
+    VC["Avoid. Fallback only."]:::bad
+    START --> PA --> VA
+    START --> PB --> VB
+    START --> PC --> VC
+    classDef good fill:#10d98a22,stroke:#10d98a,color:#e2e4f0
+    classDef bad fill:#f43f5e22,stroke:#f43f5e,color:#e2e4f0
+    classDef verdict fill:#1e234088,stroke:#6b7494,color:#9195aa
+
+
+
+ +
+
+
DP-2
+
+
Q3 Tooling Investment Options
+
Which frame commissions generate the most cross-family yield. Capital allocation decision for Q3.
+
+
+
+
+flowchart LR
+    subgraph OPT1["Option 1 — Convergence Frame"]
+        CF["H160 B82 W57 Hip88\n$80-150K · 90-120 days\nClassic + Sculpt at 160cm"]
+    end
+    subgraph OPT2["Option 2 — Bridge Frame"]
+        BF["H161 B83 W55 Hip91\n$100-150K · 90-120 days\nSculpt + Icon 160cm"]
+    end
+    subgraph OPT3["Option 3 — Both Parallel"]
+        BP["$180-300K combined\nAll families seeded\n3 height bands covered"]
+    end
+    OPT1 --> R1["Best ROI\nif capital constrained"]:::rec
+    OPT2 --> R2["Best ROI\nif Icon is priority"]:::rec
+    OPT3 --> R3["Best ROI\nif timeline priority"]:::rec
+    classDef rec fill:#7c5cfc22,stroke:#7c5cfc,color:#c4b5fd
+
+
+
+ +
+
+
DP-3
+
+
Manufacturing Model Transition
+
Make-to-Order (status quo) vs. Build-to-Stage (target). Pre-built finished inventory is not viable for configurable products.
+
+
+
+
+flowchart LR
+    subgraph MTO["Model A — Make-to-Order (Now)"]
+        M1["Order arrives — cold start\n8-12 weeks to ship\nIndustry standard — no edge"]
+    end
+    subgraph BTS["Model B — Build-to-Stage (Target)"]
+        M2["Demand signal — pre-stage L1+L2\nOrder arrives — L3+L4 only\n2-3 weeks to ship"]
+    end
+    MTO -.->|"Phase 3 transition"| BTS
+    BTS --> ADV["Lead time is\na product feature.\n6x speed vs. industry."]:::adv
+    classDef adv fill:#22d3ee22,stroke:#22d3ee,color:#22d3ee
+
+
+
+ +
+
+
DP-4
+
+
Family Expansion Sequence
+
After Classic and Sculpt dead-ends are eliminated — which families to prioritize and in what order.
+
+
+
+
+flowchart TD
+    NOW["Classic + Sculpt\ndead-ends eliminated"]
+    ZA["Zone A Depth\nClassic/Sculpt bands\nQ3 · ROI 3.1-3.7"]:::ok
+    ZB["Zone B — Icon\nBridge frame dual-use\nQ3 · ROI 3.9 highest"]:::ok
+    EM["Empress re-route\nZX163E styling\nQ4 · no new tooling"]:::ok
+    SR["Siren · 2027\nDedicated commission\nPurpose-built mold"]:::hold
+    NOW --> ZA
+    NOW --> ZB
+    ZB --> EM
+    ZA -.->|"defer"| SR
+    classDef ok fill:#7c5cfc22,stroke:#7c5cfc,color:#c4b5fd
+    classDef hold fill:#6b749422,stroke:#6b7494,color:#9195aa
+
+
+
+ +
+