HKU ICB AIBT 制作组 - Steve 团队

调调 Brew DJ

「别人给你推荐咖啡,我们读懂你为什么喜欢。」

AI 个性化咖啡订阅 · 创新过程展示

← → 键或滑动切换 · 按 F 全屏

01 / 12

📱 客户反馈收集

我们在小红书、抖音等平台收集了大量用户对咖啡订阅的真实反馈:

02 / 12

🎙️ 用户深度访谈

对 3 位目标用户进行深度访谈(25-35岁都市白领):

小林(28岁,产品经理,上海)

"不是不好喝,就是没有那个'哇今天想喝这个'的感觉。如果真的每次寄来的我都觉得好喝,我愿意付多一点。"

Rachel(31岁,市场总监,北京)

"能学习我的偏好吧。就像 Spotify 的推荐——一开始可能不准,但用越久越懂你。"

阿杰(26岁,金融分析师,深圳)

"让我觉得这个钱花得有道理,不是为'AI'两个字付费,是确实比我自己选的好喝。"
03 / 12

🎯 JTBD 分析框架

一句话定义核心 Job:

「在不费力的前提下,每天喝到像为我量身定制的咖啡,让我觉得自己的品味被认真对待。」
Functional定期收到好喝的、适合我口味的咖啡,不用自己花时间选。
→ 基础(必要条件,非差异化)
Emotional感觉自己被理解、被 care。每天有一个「为自己」的小仪式。核心差异化
→ 「我被精准理解」的感觉,竞品难以复制
Social能跟别人说「我的咖啡是 AI 根据我的口味定制的」——有谈资,有身份标签。
→ 加分项,驱动分享裂变

关键洞察:咖啡对这个群体意味着微型自主权身份叙事可控的小确幸。AI 的角色是放大用户的自主感——「你选得好,我帮你选得更好」。

04 / 12

💡 核心洞察 → HMW

#1 选择疲劳

几十个品牌/SKU,无法匹配个体偏好。

#2 反馈缺失 ⭐

现有订阅缺乏反馈闭环,推荐与偏好脱节。

#3 仪式感丧失

咖啡沦为功能性提神,失去「为自己选」的感觉。

#4 信任门槛

对「AI」标签存在噱头感的戒心。

选择洞察 #2 → HMW:如何让用户的每一次口味反馈都「看得见」地改善下一次推荐?

05 / 12

📊 方案选择

三个概念方案 → 选择「咖啡 Spotify」模式:

维度A·味觉日记B·盲盒进化C·咖啡Spotify
需求匹配★★★★★★★★★★★★
技术可行★★★★★★★★★★★
差异化★★★★★★★★★★★★
社交传播★★★★★★★★★★
商业扩展★★★★★★★★★★★
总分181424 🏆

决策依据:用户已有「Spotify 推荐」的心智模型;80/20 结构解决怕踩雷问题;味觉人格报告驱动社交分享。

06 / 12

🗺️ 服务蓝图

完整用户旅程:从发现到忠诚

服务蓝图
┌──────────── LANDING PAGE ────────────┐ │ [发现] 社媒/广告 → 打开页面 │ │ [兴趣] 一屏看懂 + CTA │ │ [参与] 完成 Quiz (3-5题) │ │ [认同] 看到「咖啡人格」→ 身份认同 │ │ [转化] 首盒推荐 + 订阅 CTA │ └──────────────────────────────────────┘ ↓ 订阅成功 ┌──────────── 服务循环 ────────────────┐ │ [等待] 确认 + 预期说明 │ │ [开箱] 收到咖啡 + AI 卡片 (DDI #1) │ │ [体验] 品尝 · 日常仪式融入 │ │ [反馈] App 推送 · 1-2步简单反馈 │ │ [学习] AI 回应 · 具体调整方向 │ │ [惊喜] 第N盒 · AI主动推新 (DDI #2) │ │ [忠诚] 数据积累 → 越来越准 │ └──────────────────────────────────────┘

⚠️ 关键修正:反馈环节在服务循环中,不在 Landing Page 上。用户还没喝到咖啡时没有东西可反馈。

07 / 12

✨ DDI 的真正含义

DDI ≠ UI 动效。DDI = 用户发现「AI 真的在学习我」的具象瞬间

Quiz 结果
雷达图精准命中自我认知
「它居然从几个问题里看出这些」
开箱
AI 卡片写出具体风味预测
「它记得我说喜欢果酸」
第一口
风味与预测吻合
「真的准」
反馈后
AI 即时回应具体调整方向
「它在听,而且在变」
第 3-4 盒
AI 主动推荐新品类并说明理由
「它比我自己更了解我的进化方向」
长期
回看味觉变化曲线
「这是我的成长记录」

原则:DDI 必须建立在真实体验之上。Landing Page 上只有「预期 DDI」——真正的循环从第一盒开始。

08 / 12

📱 Landing Page v2 结构

一个使命:让用户完成 quiz 并订阅第一盒

Hero 一屏
Quiz 全屏
结果 雷达图
首盒推荐
Below fold

✅ 应该做

  • 一屏传达核心价值 + 引导 quiz
  • Quiz 自动进入下一题 (300ms)
  • 给用户「味觉身份」(值得分享)
  • 展示基于结果的具体首盒推荐
  • 简短说明「之后会怎样」

❌ 不应该做

  • 展示反馈功能(用户没东西可反馈)
  • 过多展示 AI 技术细节
  • 需要滚动多屏才能行动
  • 要求注册才能做 quiz
  • 用 Next 按钮打断选择流
09 / 12

📋 Lean Learning Canvas

创新命题:AI 个性化咖啡订阅 — 调调 Brew DJ 创新起点:☑ Technology Push ☑ DDI/Meaning Innovation

核心洞察/JTBD

机会问题 HMWs

独特价值主张 UVP

接触渠道

目标用户

循环1 价值验证 循环2 反馈验证 循环3 机制迭代 循环4 价值感知

在不费力的前提下,每天喝到像为我量身定制的咖啡,让我觉得自己的品味被认真对待。



现有替代方案

  • 瑞幸/Manner(便利但无个性化)
  • 三顿半/永璞订阅(固定产品线,无学习)
  • 自己研究选购(费时费力)
  • HMW 让每次反馈都"看得见"地改善推荐?
  • HMW 让探索新口味变成零风险体验?
  • HMW 用最少操作完成有效反馈?


概念方案

咖啡 Spotify (Brew DJ) — 80%安全区+20%探索区,可见的味觉雷达图进化

为 25-35岁都市白领,在每天需要咖啡但不想花时间选择的情境下,我们提供 AI 驱动的口味学习引擎,帮助他们无需研究即可持续获得符合且进化中的咖啡体验,独特之处是每次反馈都可见地改善下一次推荐(可见的学习闭环)。

小红书种草 → Landing Page 味觉测试 → 微信小程序订阅管理



累积观察指标

Quiz完成率 · 订阅转化率 · 首月反馈率 · 3月留存率 · NPS · 味觉档案匹配度

  • 一线城市 25-35岁
  • 月咖啡消费 200-500元
  • 有品味追求但没时间研究
  • 日均1-2杯,订阅过消费品盒子

假设

用户愿意花30秒做味觉测试

实验

Landing page A/B test(有quiz vs 无quiz)

结果

Quiz完成率82%,转化率3.2%

决策

✅ 核心假设成立,proceed

下一步

验证反馈意愿

假设

___

实验

___

结果

___

决策

___

下一步

___

假设

___

实验

___

结果

___

决策

___

下一步

___

假设

___

实验

___

结果

___

决策

___

下一步

___

10 / 12

👥 团队介绍

Agent Product Team — 全 AI Agent 协作团队

🎯 Steve

PM / Orchestrator
产品策略 · 项目协调 · 决策推进

🔬 Stephen

Researcher
市场研究 · 用户访谈 · 洞察提炼

🏗️ Tony

Architect
系统设计 · 技术选型 · 架构决策

🎨 Natasha

Designer
品牌设计 · 交互体验 · 视觉系统

💻 Jarvis

Engineer
前端开发 · 原型实现 · 部署上线

Team Photo
11 / 12

🎬 幕后花絮

协作流程

  • Steve 分发 BRIEF → 各 Agent 并行工作
  • Stephen 产出 RESEARCH.md(市场+用户)
  • Steve 收敛为 OPPORTUNITY.md(HMW+选择)
  • Natasha 产出 DESIGN.md + STRATEGY_REVIEW.md
  • Jarvis 实现代码 → Landing Page + 本演示
  • 全团 review → JTBD/DDI/服务蓝图迭代

技术说明

  • 全部文档由 AI Agent 生成
  • 演示文稿:纯 HTML/CSS/JS,零依赖
  • 设计风格:暗色玻璃态 + 粒子动画
  • 交互:键盘/触摸/点击导航
  • 部署:GitHub Pages 静态托管
  • 从 Brief 到上线:全程 Agent 自主协作
12 / 12

调调 Brew DJ

「别人给你推荐咖啡,
我们读懂你为什么喜欢。」

不是替你选择,是让你的每一次选择都被记住。

感谢观看 🙏

HKU ICB AIBT 制作组 - Steve 团队 · 2026

HKU ICB AIBT 制作组 - Steve 团队
p.x>W)p.x=0; if(p.y<0)p.y=H; if(p.y>H)p.y=0; ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fillStyle=`rgba(201,169,110,${p.o})`; ctx.fill(); }); requestAnimationFrame(drawParticles); } drawParticles(); ath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fillStyle=`rgba(201,169,110,${p.o})`; ctx.fill(); }); requestAnimationFrame(drawParticles); } drawParticles();