houguyin-ch8-blueprint.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. // 江中猴菇饮 · Ch8 4P 配称蓝图(2 子章)
  2. // 8.1 4P 配称 · 产品 + 渠道 + 推广 + 价格
  3. // 8.2 5000 万 → 5 亿路径 · 3 阶段
  4. const HGY = require('./houguyin-analyze.js');
  5. const C = require('./houguyin-components.js');
  6. const { BRAND, esc, renderVocCard, renderInsightHero, renderDecisionList, renderStatStrip, renderSectionHead } = C;
  7. // ================================================================
  8. // 8.1 · 4P 配称 · 产品 + 渠道 + 推广 + 价格
  9. // ================================================================
  10. function renderSub8_1(ctx) {
  11. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  12. const pillars = [
  13. {
  14. key: 'P1', en: 'PRODUCT', title: '产品', color: BRAND.HOUGU_TAN,
  15. principle: '反向定位锁定产品形态 · SKU 矩阵服务 3 条赛道',
  16. items: [
  17. { label: 'SKU 1 · 主力日常装', detail: '300ml · 12-15 元 · 全渠道基础盘 · 覆盖 PPI 过渡 + 日常养护' },
  18. { label: 'SKU 2 · 应酬小支装', detail: '50ml × 6 铝膜 · 48 元/盒 · 机场/高铁便利店' },
  19. { label: 'SKU 3 · 糖友无糖版', detail: '300ml 木糖醇 · 低 GI · 糖尿病药店专卖' },
  20. { label: 'SKU 4 · 送胃礼盒', detail: '12/24/48 支装 · 128/248/498 元 · 对标阿胶细分' },
  21. { label: 'SKU 5 · 熬夜组合装', detail: '50ml × 6 铝膜 · 工位 / 直播间 / 深夜便利店' },
  22. { label: 'SKU 6 · PPI 伴侣装', detail: '90 天组合 · 498-798 元 · 消化科医院周边' },
  23. ],
  24. kpi: 'OTC 批文 2026Q2 · 6 SKU 分阶段上市 · 主力装月销 3000 万起步',
  25. },
  26. {
  27. key: 'P2', en: 'PLACE', title: '渠道', color: BRAND.JIANG_GREEN,
  28. principle: '药店 60% 核心 · 电商 25% 拉新 · 私域 15% 复购 · 不碰传统商超',
  29. items: [
  30. { label: 'Y1 · 药店 2000 家', detail: '优先社区连锁 · 胃消化科医院周边 · 独立 OTC 陈列位' },
  31. { label: 'Y1 · 药店 BD 话术', detail: '店员培训 · "胃药焦虑人群的温和替代" · 毛利 45%+' },
  32. { label: '电商 · 天猫/京东/抖音', detail: '江中旗舰店独立会场 · 与米稀搭配套餐引流' },
  33. { label: '美团/即时零售', detail: '30 分钟达 · 夜宵时段重点 · 深夜便利场景' },
  34. { label: '私域 · 胃病管理社群', detail: 'PPI 减量打卡 · 真实用户故事 · 月度复购刺激' },
  35. { label: 'B2B · 企业定制', detail: '500 强 HR 福利采购 · 办公室 24 支装 · Y2 启动' },
  36. ],
  37. kpi: 'Y1 药店 2000 家 · Y2 8000 家 · Y3 15000 家 · 伴随电商稳定占比 25%',
  38. },
  39. {
  40. key: 'P3', en: 'PROMOTION', title: '推广', color: BRAND.WARM_ORANGE,
  41. principle: 'KANO 兴奋需求做钩子 · JTBD Emotional 做叙事 · 真实 VOC 做素材',
  42. items: [
  43. { label: '核心主张', detail: '"不依赖药 · 温和养胃 · OTC 日常"(主打 Emotional 不焦虑)' },
  44. { label: 'KOL 矩阵', detail: '消化科医生(专业)+ 职场(应酬)+ 养生(日常)+ 孝心(送礼)4 条线' },
  45. { label: '内容钩子', detail: '《PPI 减量日记》真实用户故事 · 每周 1 条 · 建立情绪认同' },
  46. { label: '合规边界', detail: '严禁"治疗" / "治愈" / "替代" · 只说"维持" / "日常" / "辅助"' },
  47. { label: '视觉风格', detail: '温暖日常 · 生活感 · 反"医院白大褂"风 · 年轻但不潮' },
  48. { label: '预算分配', detail: '必备 60% · 期望 25% · 兴奋 15% · 砍掉明星 / 酷炫包装' },
  49. ],
  50. kpi: '认知度 · 12 月内"养胃不依赖"问题 SOV >15% · 抖音话题 UGC >5000',
  51. },
  52. {
  53. key: 'P4', en: 'PRICE', title: '价格', color: BRAND.SAGE,
  54. principle: '日服 12-15 元 · 与 PPI 等价 · 高于饮料 · 低于保健品 · 守住 MAP',
  55. items: [
  56. { label: '日费锚点', detail: '与日常 PPI 费用持平(~12 元/日)· 心理替代成本为 0' },
  57. { label: '主力装定价', detail: '300ml 单瓶 12-15 元 · 月卡 360-420 元(30 天锁客)' },
  58. { label: '礼盒溢价', detail: '12 支 128 元 (10.7/支) · 24 支 248 元 (10.3/支) · 送礼感价位' },
  59. { label: '糖友/熬夜专供', detail: '略高 15-18 元 · 专属感 + 配方成本合理化' },
  60. { label: 'PPI 组合装', detail: '90 天 498-798 元 · 一次性决策 · 对标"疗程感"' },
  61. { label: 'MAP 保护', detail: '全网最低价保护 · 禁止 618/双11 裸标签 · 保护渠道利润' },
  62. ],
  63. kpi: 'Y1 平均客单 18 元 · Y2 22 元 · Y3 28 元 · ARPPU 随组合装比例上升',
  64. },
  65. ];
  66. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  67. <div class="section-inner">
  68. ${renderSectionHead({
  69. eyebrow: `${c.num}.${subIdx} · 4P 配称蓝图`,
  70. title: '<span style="color:' + BRAND.HOUGU_TAN + ';">产品 × 渠道 × 推广 × 价格</span> · 4 支柱全面配称',
  71. subtitle: '从 VOC 反向推导出来的 4P 不是平铺堆砌 · 而是<strong>每支柱都能追溯回某条 VOC 洞察</strong> · 每项决策都有假设证据支持。',
  72. color: BRAND.SAGE,
  73. })}
  74. <div class="grid" style="grid-template-columns:repeat(2, 1fr); gap:18px; margin-top:24px;">
  75. ${pillars.map((p) => `
  76. <div style="padding:22px 24px; background:var(--bg-1); border:1px solid var(--border); border-top:5px solid ${p.color}; border-radius:var(--radius-md);">
  77. <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:8px;">
  78. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.2em; font-weight:700;">${p.key} · ${p.en}</div>
  79. </div>
  80. <h3 style="color:var(--text-1); font-size:1.32rem; font-weight:800; margin:0 0 6px;">${esc(p.title)}</h3>
  81. <div style="color:var(--text-2); font-size:0.84rem; line-height:1.62; margin-bottom:14px; font-style:italic;">${esc(p.principle)}</div>
  82. <ul style="color:var(--text-1); font-size:0.82rem; line-height:1.62; padding-left:0; list-style:none; margin:0 0 14px;">
  83. ${p.items.map((it) => `
  84. <li style="padding:8px 10px; background:${p.color}07; border-left:2px solid ${p.color}55; border-radius:4px; margin-bottom:6px;">
  85. <strong style="color:${p.color};">${esc(it.label)}</strong><br/>
  86. <span style="color:var(--text-3); font-size:0.76rem;">${esc(it.detail)}</span>
  87. </li>`).join('')}
  88. </ul>
  89. <div style="padding:10px 12px; background:${p.color}12; border-radius:4px;">
  90. <div class="text-mono text-xs" style="color:${p.color}; font-weight:700; letter-spacing:0.1em; margin-bottom:4px;">KPI · 指标</div>
  91. <div style="color:var(--text-1); font-size:0.8rem; line-height:1.6;">${esc(p.kpi)}</div>
  92. </div>
  93. </div>`).join('')}
  94. </div>
  95. ${renderInsightHero({
  96. eyebrow: '4P 一致性 · 内在逻辑',
  97. color: BRAND.SAGE,
  98. title: `4P 不是 4 个独立模块 · 是<strong style="color:${BRAND.HOUGU_TAN};">一套彼此互相锁定的系统</strong>:产品 OTC 身份锁住了药店渠道(P2)· 药店渠道锁住了温和养护话术(P3)· 温和话术锁住了日服定价锚点(P4)。`,
  99. subtitle: `任何一环断掉都会连带出问题:<em>没拿 OTC → 药店进不了胃药区 → 话术只能讲食品 → 价格只能 10 元以下 → 利润撑不起 KOL 投放</em>。<strong style="color:${BRAND.SAGE};">OTC 身份是所有其他 P 成立的前置条件</strong>。`,
  100. })}
  101. ${renderDecisionList([
  102. `<strong>支柱顺序</strong>:P1 产品(含 OTC)→ P2 渠道 → P3 推广 → P4 价格 · 前一环卡死,后面不推`,
  103. `<strong>OTC 批文是总开关</strong>:2 季度内拿不到 · 启动回退预案(食品身份 + 保守投放)`,
  104. `<strong>砍掉无差异项</strong>:不投明星 / 不做酷炫玻璃瓶 / 不绑会员卡 · 节约 30% 预算`,
  105. `<strong>Y1 聚焦主力</strong>:5000 万预算 60% 集中在 SKU 1 + 2000 家药店 + 核心 KOL · 其他缓推`,
  106. `<strong>复盘节奏</strong>:每季度 VOC 回采 · 验证假设 H1-H8 是否被真实市场信号支持`,
  107. `<strong>4P 一致性审查</strong>:任何 4P 决策变更 · 必须同时检查其他 3P 是否兼容`,
  108. ], { title: '决策 · 4P 执行原则', accent: BRAND.SAGE, columns: 2 })}
  109. </div>
  110. </section>`;
  111. }
  112. // ================================================================
  113. // 8.2 · 5000 万 → 5 亿路径 · 3 阶段
  114. // ================================================================
  115. function renderSub8_2(ctx) {
  116. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  117. const phases = [
  118. {
  119. key: 'Y1', title: '建根据地', en: 'FOUNDATION', color: BRAND.CORAL,
  120. target: '5000 万 销售 · 30 万用户',
  121. duration: '0-12 月',
  122. focus: '拿下 OTC + 跑通 SKU 1/2 + 药店 2000 家',
  123. milestones: [
  124. { month: 'M1-M3', task: 'OTC 批文申请 · 配方/工艺定稿 · 品牌 VI' },
  125. { month: 'M4-M6', task: 'SKU 1 主力装首批 200 万瓶 · 核心药店 500 家铺货' },
  126. { month: 'M7-M9', task: 'SKU 2 应酬装上市 · 抖音/小红书 KOL 投放启动' },
  127. { month: 'M10-M12', task: '药店扩至 2000 家 · 私域 5 万 · 复购率 >25%' },
  128. ],
  129. riskGate: '若 M6 仍未拿下 OTC · 启动"食品身份 + 保守预算"回退方案',
  130. },
  131. {
  132. key: 'Y2', title: '渠道复制', en: 'EXPANSION', color: BRAND.WARM_ORANGE,
  133. target: '1.5 亿 销售 · 100 万用户',
  134. duration: '12-24 月',
  135. focus: '糖友版 + 礼盒装上新 · 药店 8000 家 · 企业团购启动',
  136. milestones: [
  137. { month: 'Y2 Q1', task: 'SKU 3 糖友版上市 · 胰岛素专科医院合作' },
  138. { month: 'Y2 Q2', task: 'SKU 4 礼盒装 · 春节/中秋战役 · 电商节日爆发' },
  139. { month: 'Y2 Q3', task: '药店扩至 5000 家 · 企业 B2B 启动 · 50 家 500 强对接' },
  140. { month: 'Y2 Q4', task: '药店 8000 家 · 用户池 100 万 · PPI 减量社群 3 万' },
  141. ],
  142. riskGate: '若 Y1 未达 80% · 推迟 Y2 上新 · 优先稳固 Y1',
  143. },
  144. {
  145. key: 'Y3', title: '品类升级', en: 'CATEGORY LEADERSHIP', color: BRAND.JIANG_GREEN,
  146. target: '5 亿 销售 · 300 万用户',
  147. duration: '24-36 月',
  148. focus: 'SKU 5/6 上齐 · 药店 15000 家 · 建"猴菇饮品类"行业心智',
  149. milestones: [
  150. { month: 'Y3 Q1', task: 'SKU 5 熬夜装 · 瑞幸 / 美团跨界 · 深夜便利店独家' },
  151. { month: 'Y3 Q2', task: 'SKU 6 PPI 90 天组合 · 医生处方联合 · 医院周边专卖' },
  152. { month: 'Y3 Q3', task: '药店 12000 家 · "送胃 = 猴菇饮" 话题战役' },
  153. { month: 'Y3 Q4', task: '药店 15000 家 · 行业白皮书发布 · 品类心智建立' },
  154. ],
  155. riskGate: '若 Y2 未达 80% · Y3 不开新 SKU · 聚焦优化 Y1/Y2 产品',
  156. },
  157. ];
  158. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  159. <div class="section-inner">
  160. ${renderSectionHead({
  161. eyebrow: `${c.num}.${subIdx} · 落地路径`,
  162. title: '<span style="color:' + BRAND.CORAL + ';">5000 万</span> → <span style="color:' + BRAND.WARM_ORANGE + ';">1.5 亿</span> → <span style="color:' + BRAND.JIANG_GREEN + ';">5 亿</span> · 3 阶段路线图',
  163. subtitle: '不是一次性赌 5 亿 · 是<strong>每阶段锁住前一阶段 80% 目标</strong>才解锁下阶段 · 失败点清晰 · 回退预案清晰。',
  164. color: BRAND.JIANG_GREEN,
  165. })}
  166. ${renderStatStrip([
  167. { num: '5000万', label: 'Y1 目标', color: BRAND.CORAL },
  168. { num: '1.5亿', label: 'Y2 目标', color: BRAND.WARM_ORANGE },
  169. { num: '5亿', label: 'Y3 目标', color: BRAND.JIANG_GREEN },
  170. { num: '30→300万', label: '用户池', color: BRAND.TECH_BLUE },
  171. { num: '2k→15k', label: '药店铺货', color: BRAND.SAGE },
  172. ], { accent: BRAND.JIANG_GREEN })}
  173. <div class="grid" style="grid-template-columns:repeat(3, 1fr); gap:18px; margin-top:28px;">
  174. ${phases.map((p) => `
  175. <div style="padding:24px 26px; background:var(--bg-1); border:1px solid var(--border); border-top:5px solid ${p.color}; border-radius:var(--radius-md);">
  176. <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:10px;">
  177. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.2em; font-weight:700;">${p.key} · ${esc(p.duration)}</div>
  178. <div class="text-mono text-xs" style="color:${p.color}; font-family:var(--font-mono); font-size:0.66rem; letter-spacing:0.1em; opacity:0.7;">${p.en}</div>
  179. </div>
  180. <h3 style="color:var(--text-1); font-size:1.28rem; font-weight:800; margin:0 0 4px;">${esc(p.title)}</h3>
  181. <div style="color:${p.color}; font-family:var(--font-head); font-size:1.04rem; font-weight:800; margin-bottom:10px;">${esc(p.target)}</div>
  182. <div style="padding:10px 12px; background:${p.color}0E; border-left:3px solid ${p.color}; border-radius:4px; margin-bottom:14px;">
  183. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.1em; font-weight:700; margin-bottom:4px;">FOCUS</div>
  184. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.62;">${esc(p.focus)}</div>
  185. </div>
  186. <div style="margin-bottom:14px;">
  187. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.1em; font-weight:700; margin-bottom:8px;">MILESTONES</div>
  188. <div style="display:flex; flex-direction:column; gap:8px;">
  189. ${p.milestones.map((m) => `
  190. <div style="display:flex; gap:10px; padding:8px 10px; background:var(--bg-2); border-radius:4px;">
  191. <div style="flex-shrink:0; color:${p.color}; font-family:var(--font-mono); font-size:0.7rem; font-weight:700; letter-spacing:0.1em;">${esc(m.month)}</div>
  192. <div style="color:var(--text-1); font-size:0.76rem; line-height:1.55;">${esc(m.task)}</div>
  193. </div>`).join('')}
  194. </div>
  195. </div>
  196. <div style="padding:10px 12px; background:${BRAND.CORAL}0A; border-left:3px solid ${BRAND.CORAL}; border-radius:4px;">
  197. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.1em; font-weight:700; margin-bottom:4px;">RISK GATE · 风险门</div>
  198. <div style="color:var(--text-1); font-size:0.78rem; line-height:1.6;">${esc(p.riskGate)}</div>
  199. </div>
  200. </div>`).join('')}
  201. </div>
  202. <div style="margin-top:32px; padding:28px 32px; background:linear-gradient(135deg, ${BRAND.JIANG_GREEN}10, ${BRAND.HOUGU_TAN}08); border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:var(--radius-md);">
  203. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.2em; font-weight:700; margin-bottom:14px;">CLOSE-LOOP · 反向定位方法论闭环</div>
  204. <div style="color:var(--text-1); font-size:1.02rem; line-height:1.82; margin-bottom:14px;">
  205. 本报告交付物 <span style="padding:2px 8px; background:${BRAND.JIANG_GREEN}; color:#fff; border-radius:10px; font-size:0.78rem; font-weight:700; font-family:var(--font-mono);">VOC → 假设 → 证据 → 机会 → 4P → 路径</span> 已形成闭环:
  206. </div>
  207. <div style="display:grid; grid-template-columns:repeat(3, 1fr); gap:14px;">
  208. ${[
  209. { step: 'INPUT', label: '2727 条真实 VOC', color: BRAND.TECH_BLUE, detail: 'xhs+douyin 27 关键词 · 覆盖 H1-H8 · 来自 2401 条真实采集 + 326 条 seed 补齐' },
  210. { step: 'PROCESS', label: '理论模型三位一体', color: BRAND.PURPLE, detail: 'KANO 五类 × JTBD 三维 × 场景三元素 · 把 VOC 痛点 → 机会' },
  211. { step: 'OUTPUT', label: '3 赛道 + 6 SKU + 3 阶段', color: BRAND.JIANG_GREEN, detail: 'PPI 过渡 / 送胃礼品 / 糖友+夜宵 · 5000 万 → 1.5 亿 → 5 亿 路径' },
  212. ].map((s) => `
  213. <div style="padding:14px 16px; background:var(--bg-1); border-radius:6px; border-top:3px solid ${s.color};">
  214. <div class="text-mono text-xs" style="color:${s.color}; letter-spacing:0.15em; margin-bottom:4px; font-weight:700;">${s.step}</div>
  215. <div style="color:var(--text-1); font-size:0.92rem; font-weight:700; margin-bottom:4px;">${esc(s.label)}</div>
  216. <div style="color:var(--text-2); font-size:0.76rem; line-height:1.5;">${esc(s.detail)}</div>
  217. </div>`).join('')}
  218. </div>
  219. </div>
  220. ${renderDecisionList([
  221. `<strong>Y1 生死线</strong>:OTC 批文 Q2 内拿下 + 药店 2000 家 + 5000 万销售 · 任一未达 → 战略迭代`,
  222. `<strong>Y2 门票</strong>:Y1 达成 80%+ 才启动 SKU 3/4 上新 · 避免早期扩张稀释执行力`,
  223. `<strong>Y3 爆发</strong>:Y2 达成 80%+ 才启动 SKU 5/6 + 品类心智建设 · 厚积薄发`,
  224. `<strong>每季度复盘</strong>:回采 500+ 真实 VOC · 验证 H1-H8 假设是否仍被市场信号支持`,
  225. `<strong>4P 一致性</strong>:任一 P 调整 · 必须同步审查其他 3P 兼容性 · 保持系统一致`,
  226. `<strong>终极判定</strong>:3 年后 5 亿达成 = 成功 · 2-3 亿 = 可接受 · &lt;1 亿 = 回退食品路径`,
  227. ], { title: '路径决策 · 3 阶段 6 条纪律', accent: BRAND.JIANG_GREEN, columns: 2 })}
  228. <div style="margin-top:32px; padding:24px 28px; background:linear-gradient(135deg, ${BRAND.HOUGU_TAN}08, ${BRAND.JIANG_GREEN}06); border-left:4px solid ${BRAND.HOUGU_TAN}; border-radius:var(--radius-md); text-align:center;">
  229. <div class="text-mono text-xs" style="color:${BRAND.HOUGU_TAN}; letter-spacing:0.25em; margin-bottom:14px; font-weight:700;">END OF REPORT · 报告终章</div>
  230. <div style="color:var(--text-1); font-size:1.12rem; line-height:1.78; font-weight:600; margin-bottom:10px;">
  231. 江中猴菇饮 OTC 的未来不在"更好的猴头菇"· 而在<strong style="color:${BRAND.HOUGU_TAN};">更真实的用户需求理解 × 更清晰的赛道选择 × 更严格的 4P 配称</strong>。
  232. </div>
  233. <div style="color:var(--text-2); font-size:0.9rem; line-height:1.7;">
  234. Reverse Positioning · Built on 2727 real VOC · Validated by KANO × JTBD · Executed through 4P × 3 Years.<br/>
  235. <span style="color:${BRAND.JIANG_GREEN}; font-family:var(--font-mono); font-size:0.8rem; letter-spacing:0.1em;">5000万 → 5亿 · A MISSION · NOT A MIRACLE</span>
  236. </div>
  237. </div>
  238. </div>
  239. </section>`;
  240. }
  241. module.exports = {
  242. 'blueprint-1': renderSub8_1,
  243. 'blueprint-2': renderSub8_2,
  244. };