liver-ch1-challenge.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. // ==============================================================================
  2. // 江中肝纯片 · Ch1 诘问起点(3 子章)
  3. // ==============================================================================
  4. // 1.1 DMY 原料真力·但用户零认知
  5. // 1.2 海王金樽警示·硬广洗脑型失败案例
  6. // 1.3 VOC 反向验证·方法论起点
  7. // ==============================================================================
  8. const LA = require('./liver-analyze.js');
  9. const C = require('./liver-components.js');
  10. const { BRAND, esc, fmtLikes } = C;
  11. // ==========================================================
  12. // 1.1 · DMY 原料真力·但用户零认知
  13. // ==========================================================
  14. function renderSub1_1(ctx) {
  15. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  16. const items = data.items || [];
  17. // 证据 A:江中肝纯片/护肝片的用户认知(提及"水飞蓟"仍是主导框架)
  18. const mind1 = LA.getEvidence(items, {
  19. keyword: '肝纯片', contentMatch: /水飞蓟|silymarin|葵花|易善复/i,
  20. minChars: 20, minLikes: 1, top: 3, seed: 5,
  21. });
  22. // 证据 B:藤茶被用户讨论时的真实话题:茶饮 / 降糖 / 野生 / 老人家,不是护肝
  23. const teng = LA.getEvidence(items, {
  24. keyword: '藤茶',
  25. contentMatch: /藤茶|莓茶|茶|喝|老人|野生|降糖|脑梗|回甘|婆婆|妈妈|冲泡/,
  26. minChars: 20, top: 3, seed: 9,
  27. });
  28. // 证据 C:国际 Amazon dihydromyricetin 正向好评(说明 DMY 在海外已有认知)
  29. const amzDmy = items.filter((it) => it.keyword === 'dihydromyricetin' && it.rating >= 4 && (it.content || '').length >= 30)
  30. .sort((a, b) => (b.likes || 0) - (a.likes || 0)).slice(0, 3);
  31. const vocLeft = mind1.slice(0, 3);
  32. const vocRight = [...teng.slice(0, 2), ...amzDmy.slice(0, 1)].filter(Boolean).slice(0, 3);
  33. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  34. <div class="section-inner">
  35. ${C.renderSectionHead({
  36. eyebrow: `${c.num}.${subIdx} · 产品困境直面`,
  37. title: '<span style="color:' + BRAND.TENGCHA_GREEN + ';">DMY 原料真力</span>,但<span style="color:' + BRAND.CORAL + ';">用户零认知</span>',
  38. subtitle: '肝纯片握有"藤茶总黄酮 98%"的原料真差异化,但用户心智仍然停留在"水飞蓟"框架里——<strong>真差异化但说不清</strong>是我们真正的起点困境。',
  39. color: BRAND.CORAL,
  40. })}
  41. ${C.renderInsightHero({
  42. eyebrow: 'THE CONCEPT GAP · 认知鸿沟',
  43. color: BRAND.CORAL,
  44. title: `<strong style="color:${BRAND.TENGCHA_GREEN};">"江中肝纯片 = 藤茶 + DMY 二氢杨梅素"</strong> 这句产品真相,目前<strong style="color:${BRAND.CORAL};">没有任何一个 VOC 原声</strong>主动说出来。<br/>当用户问"这个护肝片"时,他们仍然在<strong style="color:${BRAND.CORAL};">"水飞蓟"框架内</strong>对照成分——这是我们必须先破局的认知锁。`,
  45. subtitle: `与此同时,<strong style="color:${BRAND.JIANG_GREEN};">dihydromyricetin 在 Amazon 已经是一个成熟的 GENZ 独立子类</strong>(485 条 reviews · ★4.3 均分)——<strong style="color:${BRAND.JIANG_GREEN};">国际市场对 DMY 的认知比国内强得多</strong>,国内反而是价值洼地。`,
  46. })}
  47. <div class="grid" style="grid-template-columns:1fr 1fr; gap:24px; margin-top:24px;">
  48. <div>
  49. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · 用户仍在"水飞蓟"框架里问护肝片</div>
  50. <div style="display:flex; flex-direction:column; gap:12px;">
  51. ${vocLeft.map((it) => C.renderVocCard(it, { accent: BRAND.CORAL, compact: true, maxChars: 200 })).join('')}
  52. </div>
  53. </div>
  54. <div>
  55. <div class="text-mono text-xs" style="color:${BRAND.TENGCHA_GREEN}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · "藤茶" 被识别为茶饮 / 养生 / 降血糖·不是护肝</div>
  56. <div style="display:flex; flex-direction:column; gap:12px;">
  57. ${vocRight.map((it) => C.renderVocCard(it, { accent: BRAND.TENGCHA_GREEN, compact: true, maxChars: 200 })).join('')}
  58. </div>
  59. </div>
  60. </div>
  61. <div class="fade-up" style="margin-top:28px;">
  62. ${C.renderCompareTable({
  63. title: 'GAP · 产品真相 vs 用户心智',
  64. headers: ['对比维度', '产品真相', '用户当前心智'],
  65. rows: [
  66. ['核心成分', { html: `<span style="color:${BRAND.TENGCHA_GREEN}; font-weight:700;">藤茶 DMY 总黄酮 98%</span>`, color: BRAND.TENGCHA_GREEN }, { html: `<span style="color:${BRAND.CORAL};">水飞蓟宾为主导认知</span>`, color: BRAND.CORAL }],
  67. ['成分故事', { html: `<span style="color:${BRAND.TENGCHA_GREEN}; font-weight:700;">中国西南千年草本</span>`, color: BRAND.TENGCHA_GREEN }, { html: `<span style="color:${BRAND.CORAL};">国外进口更值得信赖</span>`, color: BRAND.CORAL }],
  68. ['起效机理', { html: `<span style="color:${BRAND.TENGCHA_GREEN}; font-weight:700;">清解酒后头疼 + 抗氧化护肝</span>`, color: BRAND.TENGCHA_GREEN }, { html: `<span style="color:${BRAND.CORAL};">"吃了没感觉 = 没效果"</span>`, color: BRAND.CORAL }],
  69. ['现有符号', { html: `<span style="color:${BRAND.TENGCHA_GREEN}; font-weight:700;">江中品牌 + 官旗正品</span>`, color: BRAND.TENGCHA_GREEN }, { html: `<span style="color:${BRAND.CORAL};">"跟 Swisse 比贵不贵"</span>`, color: BRAND.CORAL }],
  70. ['场景', { html: `<span style="color:${BRAND.TENGCHA_GREEN}; font-weight:700;">应酬解酒 + 脂肪肝 + 熬夜</span>`, color: BRAND.TENGCHA_GREEN }, { html: `<span style="color:${BRAND.CORAL};">"护肝片是不是智商税"</span>`, color: BRAND.CORAL }],
  71. ['破局', { html: '真差异化', color: BRAND.TENGCHA_GREEN, bold: true }, { html: '认知教育', color: BRAND.CORAL, bold: true }],
  72. ],
  73. accent: BRAND.LIVER_AMBER,
  74. })}
  75. </div>
  76. ${C.renderDecisionList([
  77. `<strong>认知破局放第一位</strong>:所有文案必须回答"藤茶是什么、DMY 是什么、为什么是真的"`,
  78. `<strong>锚点:千年食饮史</strong>,不是"新发现的原料"——避开智商税叙事陷阱`,
  79. `<strong>国际 DMY 认知倒灌</strong>:引用 Amazon 485+ 好评作背书("Lifesaver")`,
  80. `<strong>不与水飞蓟打正面</strong>:在水飞蓟框架外建立 DMY 子心智`,
  81. ], { title: '落地决策 · 认知破局三条铁律', accent: BRAND.CORAL, columns: 2 })}
  82. </div>
  83. </section>`;
  84. }
  85. // ==========================================================
  86. // 1.2 · 海王金樽警示·硬广洗脑型失败案例
  87. // ==========================================================
  88. function renderSub1_2(ctx) {
  89. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  90. const items = data.items || [];
  91. // 证据 A:海王金樽 硬广/广告 用户反感 声音
  92. const hwads = LA.getEvidence(items, {
  93. keyword: '海王金樽',
  94. contentMatch: /广告|老哒|硬广|洗脑|杠杠|营销|神/i,
  95. minChars: 12, top: 4, seed: 5,
  96. });
  97. // 证据 B:海王金樽 用户对"不信任解酒"的态度(替代品 + 土办法)
  98. const hwAlt = LA.getEvidence(items, {
  99. keyword: '海王金樽',
  100. contentMatch: /电解质|不好使|难受|馄饨|醋|醒酒|土办法|喝酒前|秘密武器/i,
  101. minChars: 15, top: 3, seed: 11,
  102. });
  103. // 证据 C:整个解酒神器品类的情绪——硬广透支
  104. const solveAll = LA.getEvidence(items, {
  105. keyword: '解酒神器',
  106. contentMatch: /商家|死呗|对手|酒蒙子|催吐|横竖|难受怎么/i,
  107. minChars: 15, top: 3, seed: 13,
  108. });
  109. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  110. <div class="section-inner">
  111. ${C.renderSectionHead({
  112. eyebrow: `${c.num}.${subIdx} · 失败案例复盘`,
  113. title: '<span style="color:' + BRAND.CORAL + ';">海王金樽警示</span>:硬广洗脑 × 体感寡淡 = 品类信任透支',
  114. subtitle: '海王金樽是"解酒保肝"赛道曾经的头部玩家,硬广把品类做"出了圈"却把<strong>信任做没了</strong>——肝纯片不能再走这条路。',
  115. color: BRAND.CORAL,
  116. })}
  117. ${C.renderInsightHero({
  118. eyebrow: 'THE FAILED PLAYBOOK · 前车之鉴',
  119. color: BRAND.WINE_RED,
  120. title: `海王金樽在抖音被 <strong style="color:${BRAND.CORAL};">"老哒广告做得杠杠的[捂脸][捂脸][捂脸]"</strong> 的反讽绑定——用户已经<strong>把品牌和硬广洗脑连在一起记忆</strong>,这是品牌资产的反向贬值。`,
  121. subtitle: `与此同时<strong style="color:${BRAND.CORAL};">"解酒神器"整个品类</strong>被"商家:横竖都是死呗"式高赞吐槽(XHS ♥7295)污染,<strong>用户已经不信任何解酒广告承诺</strong>。肝纯片如果继续 "广告轰炸 + 符号化" 套路,只会被同一套反叙事吞噬。`,
  122. })}
  123. <div class="grid" style="grid-template-columns:1.1fr 0.9fr; gap:24px; margin-top:24px;">
  124. <div>
  125. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · 海王金樽"硬广 / 老哒"反讽连锁</div>
  126. <div style="display:flex; flex-direction:column; gap:12px;">
  127. ${[...hwads, ...hwAlt].slice(0, 4).map((it) => C.renderVocCard(it, { accent: BRAND.WINE_RED, compact: true, maxChars: 180 })).join('')}
  128. </div>
  129. </div>
  130. <div>
  131. <div class="text-mono text-xs" style="color:${BRAND.WARM_ORANGE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC · "解酒神器" 品类整体信任透支</div>
  132. <div style="display:flex; flex-direction:column; gap:12px;">
  133. ${solveAll.slice(0, 3).map((it) => C.renderVocCard(it, { accent: BRAND.WARM_ORANGE, compact: true, maxChars: 180 })).join('')}
  134. </div>
  135. </div>
  136. </div>
  137. <div class="fade-up" style="margin-top:28px;">
  138. ${C.renderCompareTable({
  139. title: 'PLAYBOOK · 海王金樽路径 vs 肝纯片路径',
  140. headers: ['维度', '海王金樽(已失败)', '肝纯片(必须走)'],
  141. rows: [
  142. ['核心打法', { html: `<span style="color:${BRAND.CORAL};">硬广 × 品牌符号 × 广告词复读</span>`, color: BRAND.CORAL }, { html: `<span style="color:${BRAND.JIANG_GREEN}; font-weight:700;">真原料 × 真科学 × 真场景</span>`, color: BRAND.JIANG_GREEN }],
  143. ['体感承诺', { html: `<span style="color:${BRAND.CORAL};">空泛"解酒护肝"无锚点</span>`, color: BRAND.CORAL }, { html: `<span style="color:${BRAND.JIANG_GREEN}; font-weight:700;">藤茶 DMY 清酒后头疼可感知</span>`, color: BRAND.JIANG_GREEN }],
  144. ['用户印象', { html: `<span style="color:${BRAND.CORAL};">"老哒广告"被嘲讽记忆</span>`, color: BRAND.CORAL }, { html: `<span style="color:${BRAND.JIANG_GREEN}; font-weight:700;">江中 OTC 品质背书</span>`, color: BRAND.JIANG_GREEN }],
  145. ['复购逻辑', { html: `<span style="color:${BRAND.CORAL};">一次性广告冲动</span>`, color: BRAND.CORAL }, { html: `<span style="color:${BRAND.JIANG_GREEN}; font-weight:700;">场景日常养护</span>`, color: BRAND.JIANG_GREEN }],
  146. ['信任资产', { html: `<span style="color:${BRAND.CORAL};">被"硬广"吞噬</span>`, color: BRAND.CORAL }, { html: `<span style="color:${BRAND.JIANG_GREEN}; font-weight:700;">藤茶文化 + 真评论沉淀</span>`, color: BRAND.JIANG_GREEN }],
  147. ['本质', { html: '品牌透支', color: BRAND.CORAL, bold: true }, { html: '认知积累', color: BRAND.JIANG_GREEN, bold: true }],
  148. ],
  149. accent: BRAND.LIVER_AMBER,
  150. })}
  151. </div>
  152. ${C.renderDecisionList([
  153. `<strong>明令禁止</strong>:不做硬广 "永远的神" 式口号复读,不做"老哒"式 KOL 绑定`,
  154. `<strong>场景真实</strong>:所有推广内容必须"原生 + 真场景",而非洗脑 TVC`,
  155. `<strong>体感可感知</strong>:藤茶 DMY 的"清解酒后头疼"是可感知锚点,<em>能用来</em>解释"为什么"`,
  156. `<strong>不骂海王金樽</strong>:警示自用,不在外宣里攻击竞品(避免自降格调)`,
  157. ], { title: '落地决策 · 避开硬广陷阱四条铁律', accent: BRAND.WINE_RED, columns: 2 })}
  158. </div>
  159. </section>`;
  160. }
  161. // ==========================================================
  162. // 1.3 · VOC 反向验证·方法论起点
  163. // ==========================================================
  164. function renderSub1_3(ctx) {
  165. const { chapter: c, subIdx, sub, slideNum, slideTotal, data, meta } = ctx;
  166. const totalComments = meta?.comments || 0;
  167. const hs = meta?.hypotheses || {};
  168. // 8 假设 H1-H8 的证据体量
  169. const hypoRows = [
  170. { id: 'H1', title: '藤茶/DMY 认知空白', count: hs.H1 || 0 },
  171. { id: 'H2', title: '海王金樽为什么没成', count: hs.H2 || 0 },
  172. { id: 'H3', title: '护肝片副作用恐惧', count: hs.H3 || 0 },
  173. { id: 'H4', title: '脂肪肝+熬夜声量', count: hs.H4 || 0 },
  174. { id: 'H5', title: '五大竞品心智地图', count: hs.H5 || 0 },
  175. { id: 'H6', title: '送长辈护肝空白', count: hs.H6 || 0 },
  176. { id: 'H7', title: '礼盒心智 · "有面子"', count: hs.H7 || 0 },
  177. { id: 'H8', title: 'Amazon 国际对标', count: hs.H8 || 0 },
  178. ].map((r) => ({
  179. label: `${r.id} · ${r.title}`,
  180. value: r.count,
  181. valueLabel: r.count.toLocaleString(),
  182. color: r.count > 1000 ? BRAND.TECH_BLUE
  183. : r.count > 500 ? BRAND.LIVER_AMBER
  184. : r.count > 200 ? BRAND.JIANG_GREEN
  185. : BRAND.WARM_ORANGE,
  186. }));
  187. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  188. <div class="section-inner">
  189. ${C.renderSectionHead({
  190. eyebrow: `${c.num}.${subIdx} · 方法论起点`,
  191. title: '<span style="color:' + BRAND.LIVER_AMBER + ';">VOC 实证</span> × <span style="color:' + BRAND.PURPLE + ';">理论模型</span> × <span style="color:' + BRAND.SAGE + ';">决策映射</span>',
  192. subtitle: '每一个结论都必须有<strong>多平台 VOC 原声 + 理论模型映射 + 可落地决策项</strong> 三重交叉。本报告围绕 8 条核心假设 H1-H8 展开验证。',
  193. color: BRAND.LIVER_AMBER,
  194. })}
  195. ${C.renderStatStrip([
  196. { num: totalComments.toLocaleString(), label: '真实 VOC', color: BRAND.LIVER_AMBER },
  197. { num: '3', label: '采集平台', color: BRAND.TECH_BLUE },
  198. { num: '32', label: '关键词维度', color: BRAND.JIANG_GREEN },
  199. { num: '8', label: '核心假设', color: BRAND.PURPLE },
  200. { num: '38', label: 'slides', color: BRAND.SAGE },
  201. ], { accent: BRAND.LIVER_AMBER })}
  202. <div class="grid" style="grid-template-columns:1.3fr 1fr; gap:24px; margin-top:24px;">
  203. <div>
  204. ${C.renderBarChart(hypoRows, { accent: BRAND.LIVER_AMBER, title: '8 假设 × VOC 证据厚度', height: 320 })}
  205. </div>
  206. <div>
  207. ${C.renderTheoryBox({
  208. theory: 'METHODOLOGY · 三重交叉验证框架',
  209. accent: BRAND.PURPLE,
  210. mapping: `
  211. <div style="display:flex; flex-direction:column; gap:14px; font-size:0.92rem;">
  212. <div style="padding:12px 14px; background:${BRAND.LIVER_AMBER}10; border-left:3px solid ${BRAND.LIVER_AMBER}; border-radius:4px;">
  213. <div style="color:${BRAND.LIVER_AMBER}; font-weight:700; margin-bottom:4px;">① VOC 实证(原声证据)</div>
  214. <div style="color:var(--text-2); font-size:0.86rem; line-height:1.6;">每个假设至少 3 条带<em>昵称+IP+点赞数</em>的真实评论,覆盖小红书/抖音/Amazon 三平台</div>
  215. </div>
  216. <div style="padding:12px 14px; background:${BRAND.PURPLE}10; border-left:3px solid ${BRAND.PURPLE}; border-radius:4px;">
  217. <div style="color:${BRAND.PURPLE}; font-weight:700; margin-bottom:4px;">② 理论模型(决策工具)</div>
  218. <div style="color:var(--text-2); font-size:0.86rem; line-height:1.6;"><strong>KANO</strong>(必备/期望/兴奋)+ <strong>JTBD</strong>(F/E/S)+ <strong>场景四元素</strong>(时间×空间×触发×人群)</div>
  219. </div>
  220. <div style="padding:12px 14px; background:${BRAND.SAGE}10; border-left:3px solid ${BRAND.SAGE}; border-radius:4px;">
  221. <div style="color:${BRAND.SAGE}; font-weight:700; margin-bottom:4px;">③ 决策映射(落地可执行)</div>
  222. <div style="color:var(--text-2); font-size:0.86rem; line-height:1.6;">每个子章收尾 = <em>4-6 条 P0/P1 决策项</em>,直接对应 SKU / 包装 / 话术 / 价格 / 渠道决定</div>
  223. </div>
  224. </div>
  225. `,
  226. })}
  227. </div>
  228. </div>
  229. <div class="fade-up" style="margin-top:28px;">
  230. ${C.renderInsightHero({
  231. eyebrow: 'HYPOTHESIS MATRIX · 8 假设矩阵',
  232. color: BRAND.LIVER_AMBER,
  233. title: `<strong style="color:${BRAND.LIVER_AMBER};">H1-H8 全部有证据</strong>,其中 <strong style="color:${BRAND.TECH_BLUE};">H8 (Amazon 国际对标 2085 条)</strong> 和 <strong style="color:${BRAND.TECH_BLUE};">H5 (5 竞品心智 1508 条)</strong> 最厚,<strong style="color:${BRAND.WARM_ORANGE};">H6 (送长辈 80 条)</strong> 最薄但正是空白机会。`,
  234. subtitle: `证据厚度不均反映市场注意力分布:国际已经 DMY 成熟、国内 5 竞品被讨论透了,<strong>国产礼品装护肝是全品类空白机会</strong>——这是本报告后续章节反复挖掘的金矿。`,
  235. })}
  236. </div>
  237. ${C.renderDecisionList([
  238. `<strong>假设驱动的报告结构</strong>:每个章节开头明示"验证哪几条假设",结尾总结"假设成立 / 被推翻 / 被修正"`,
  239. `<strong>VOC 数据可追溯</strong>:每条引用带 <code>platform · 昵称 · IP · 点赞数 · keyword</code>,可 grep 回溯到 jsonl 行号`,
  240. `<strong>理论不装饰</strong>:KANO/JTBD 不是摆拍,必须映射到 SKU/话术/包装的具体决策`,
  241. `<strong>决策 P0 先做</strong>:每章 P0 决策 ≤ 3 条,避免"30 条建议 = 0 条动作"`,
  242. ], { title: '方法论自律 · 报告纪律四条', accent: BRAND.PURPLE, columns: 2 })}
  243. </div>
  244. </section>`;
  245. }
  246. module.exports = {
  247. 'challenge-1': renderSub1_1,
  248. 'challenge-2': renderSub1_2,
  249. 'challenge-3': renderSub1_3,
  250. };